diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp
index 9ae60ab301..052987b69f 100644
--- a/indra/llui/llnotifications.cpp
+++ b/indra/llui/llnotifications.cpp
@@ -1014,6 +1014,7 @@ LLBoundListener LLNotificationChannelBase::connectChangedImpl(const LLEventListe
LLBoundListener LLNotificationChannelBase::connectAtFrontChangedImpl(const LLEventListener& slot)
{
+ LLMutexLock lock(&mItemsMutex); // Guard against against unlocked access to mItems
for (LLNotificationSet::iterator it = mItems.begin(); it != mItems.end(); ++it)
{
slot(LLSD().with("sigtype", "load").with("id", (*it)->id()));
@@ -1052,10 +1053,17 @@ bool LLNotificationChannelBase::updateItem(const LLSD& payload)
bool LLNotificationChannelBase::updateItem(const LLSD& payload, LLNotificationPtr pNotification)
{
std::string cmd = payload["sigtype"];
- LLNotificationSet::iterator foundItem = mItems.find(pNotification);
- bool wasFound = (foundItem != mItems.end());
+ // Guard against unlocked access to mItems
+ // LLNotificationSet::iterator foundItem = mItems.find(pNotification);
+ // bool wasFound = (foundItem != mItems.end());
+ bool wasFound = false;
+ {
+ LLMutexLock lock(&mItemsMutex);
+ LLNotificationSet::iterator foundItem = mItems.find(pNotification);
+ wasFound = (foundItem != mItems.end());
+ }
+ //
bool passesFilter = mFilter ? mFilter(pNotification) : true;
-
// first, we offer the result of the filter test to the simple
// signals for pass/fail. One of these is guaranteed to be called.
// If either signal returns true, the change processing is NOT performed
@@ -1084,6 +1092,7 @@ bool LLNotificationChannelBase::updateItem(const LLSD& payload, LLNotificationPt
assert(!wasFound);
if (passesFilter)
{
+ LLMutexLock lock(&mItemsMutex); // Guard against unlocked access to mItems
// not in our list, add it and say so
mItems.insert(pNotification);
onLoad(pNotification);
@@ -1107,6 +1116,7 @@ bool LLNotificationChannelBase::updateItem(const LLSD& payload, LLNotificationPt
}
else
{
+ LLMutexLock lock(&mItemsMutex); // Guard against unlocked access to mItems
// not in our list, add it and say so
mItems.insert(pNotification);
onChange(pNotification);
@@ -1120,6 +1130,7 @@ bool LLNotificationChannelBase::updateItem(const LLSD& payload, LLNotificationPt
{
if (wasFound)
{
+ LLMutexLock lock(&mItemsMutex); // Guard against unlocked access to mItems
// it already existed, so this is a delete
mItems.erase(pNotification);
onChange(pNotification);
@@ -1138,6 +1149,7 @@ bool LLNotificationChannelBase::updateItem(const LLSD& payload, LLNotificationPt
assert(!wasFound);
if (passesFilter)
{
+ LLMutexLock lock(&mItemsMutex); // Guard against unlocked access to mItems
// not in our list, add it and say so
mItems.insert(pNotification);
onAdd(pNotification);
@@ -1149,6 +1161,7 @@ bool LLNotificationChannelBase::updateItem(const LLSD& payload, LLNotificationPt
// if we have it in our list, pass on the delete, then delete it, else do nothing
if (wasFound)
{
+ LLMutexLock lock(&mItemsMutex); // Guard against unlocked access to mItems
onDelete(pNotification);
abortProcessing = mChanged(payload);
mItems.erase(pNotification);
@@ -1714,6 +1727,7 @@ void LLNotifications::add(const LLNotificationPtr pNotif)
if (pNotif == NULL) return;
// first see if we already have it -- if so, that's a problem
+ LLMutexLock lock(&mItemsMutex); // Guard against unlocked acceess to mItems
LLNotificationSet::iterator it=mItems.find(pNotif);
if (it != mItems.end())
{
diff --git a/indra/newview/app_settings/grids.xml b/indra/newview/app_settings/grids.xml
index 2a2e599f07..5c37cb0767 100644
--- a/indra/newview/app_settings/grids.xml
+++ b/indra/newview/app_settings/grids.xml
@@ -1,942 +1,32 @@
+ util.aditi.lindenlab.com
LastModified
2018-09-26T20:15:00Z
@@ -953,7 +43,7 @@
agent
loginpage
- https://phoenixviewer.com/app/loginV3/
+ http://phoenixviewer.com/app/loginV3/
loginuri
https://login.aditi.lindenlab.com/cgi-bin/login.cgi
@@ -986,7 +76,7 @@
agent
loginpage
- https://phoenixviewer.com/app/loginV3/
+ http://phoenixviewer.com/app/loginV3/
loginuri
https://login.agni.lindenlab.com/cgi-bin/login.cgi
@@ -999,156 +89,6 @@
1
web_profile_url
https://my.secondlife.com/
-
- grid.alifevirtual.com:8002
-
- DEPRECATED
- TRUE
- LastModified
- 2020-04-04T10:42:24.54Z
- name
- grid.alifevirtual.com:8002
-
- www.alifevirtual.com:8002
-
- LastModified
- 2020-05-30T09:41:01.73Z
- about
- http://www.alifevirtual.com/
- gridname
- Alife Virtual
- gridnick
- AV
- help
- http://www.alifevirtual.com/
- helperuri
- http://www.alifevirtual.com/helper/
- login_identifier_types
-
- agent
- account
-
- loginpage
- http://www.alifevirtual.com/welcome.php
- loginuri
-
- http://www.alifevirtual.com:8002/
-
- name
- www.alifevirtual.com:8002
- password
- http://www.alifevirtual.com/
- platform
- OpenSim
- register
- http://www.alifevirtual.com/
- slurl_base
- hop://www.alifevirtual.com:8002/
-
- grid.avatarconnection.com:8002/
-
- DEPRECATED
- TRUE
- LastModified
- 2020-06-02T11:41:00.95Z
- name
- grid.avatarconnection.com:8002/
-
- grid.roleplayworlds.net:8002
-
- DEPRECATED
- TRUE
- LastModified
- 2020-06-02T11:41:00.95Z
- name
- grid.roleplayworlds.net:8002
-
- inworldz.com:8002
-
- LastModified
- 2018-08-23T21:00:00.00Z
- DEPRECATED
- TRUE
- name
- inworldz.com:8002
-
- login.avination.com/
-
- DEPRECATED
- TRUE
- name
- login.avination.com/
- LastModified
- 2018-02-28T15:36:26.43Z
-
- login.danger.osgrid.org
-
- DEPRECATED
- TRUE
- LastModified
- 2020-06-02T11:41:00.95Z
- name
- login.danger.osgrid.org
-
- reactiongrid.com:8008
-
- DEPRECATED
- TRUE
- LastModified
- 2020-06-02T11:41:00.95Z
- name
- reactiongrid.com:8008
-
- login.aurorascape.com:8002
-
- DEPRECATED
- TRUE
- LastModified
- 2020-06-02T11:41:00.95Z
- name
- login.aurorascape.com:8002
-
- vidadupla.com.br:8002
-
- DirectoryFee
- 0
- LastModified
- 2020-11-06T14:42:01.07Z
- SendGridInfoToViewerOnLogin
- true
- about
- http://vidadupla.com.br
- gatekeeper
- vidadupla.com.br:8002
- gridname
- Vida Dupla
- gridnick
- VD
- helperuri
- http://vidadupla.com.br/helper_scripts/helper/
- login_identifier_types
-
- agent
- account
-
- loginpage
- http://vidadupla.com.br/splash
- loginuri
-
- http://vidadupla.com.br:8002/
-
- name
- vidadupla.com.br:8002
- password
- http://vidadupla.com.br:8002/wifi/forgotpassword
- platform
- OpenSim
- register
- http://vidadupla.com.br:8002/wifi/user/account/
- search
- http://vidadupla.com.br/ossearch/query.php
- slurl_base
- hop://vidadupla.com.br:8002/
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 2f469bbd12..85a79e36d2 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -153,6 +153,17 @@
Value
http://phoenixviewer.com/app/fsdata/grids.xml
+ FSGridBuilderURL
+
+ Comment
+ Fetch an html page of grids from this URL.
+ Persist
+ 1
+ Type
+ String
+ Value
+ https://phoenixviewer.com/app/fsdata/fs_grid_builder.html
+
LastConnectedGrid
Comment
@@ -13959,6 +13970,17 @@ Change of this parameter will affect the layout of buttons in notification toast
Value
1
+ FSUseLegacyUnsupportedHardwareChecks
+
+ Comment
+ If enabled, Firestorm will perform utterly pointless checks that probably made sense in 2004.
+ Persist
+ 1
+ Type
+ Boolean
+ Value
+ 0
+
FSUseStandaloneGroupFloater
Comment
diff --git a/indra/newview/fsfloaterwearablefavorites.cpp b/indra/newview/fsfloaterwearablefavorites.cpp
index e0d7c3984a..0e3a79e748 100644
--- a/indra/newview/fsfloaterwearablefavorites.cpp
+++ b/indra/newview/fsfloaterwearablefavorites.cpp
@@ -313,6 +313,7 @@ void FSFloaterWearableFavorites::onFilterEdit(const std::string& search_string)
{
mItemsList->setFilterSubString(search_string, true);
mItemsList->setNoItemsCommentText(getString("empty_list"));
+ mItemsList->rearrange();
}
void FSFloaterWearableFavorites::onOptionsMenuItemClicked(const LLSD& userdata)
diff --git a/indra/newview/fsfloaterwearablefavorites.h b/indra/newview/fsfloaterwearablefavorites.h
index ee13a7e9f5..21431c7635 100644
--- a/indra/newview/fsfloaterwearablefavorites.h
+++ b/indra/newview/fsfloaterwearablefavorites.h
@@ -61,6 +61,11 @@ public:
return mDADSignal.connect(cb);
}
+ void rearrange()
+ {
+ rearrangeItems();
+ }
+
protected:
friend class LLUICtrlFactory;
FSWearableFavoritesItemsList(const Params&);
diff --git a/indra/newview/fspanellogin.cpp b/indra/newview/fspanellogin.cpp
index 1e5e8c5019..222b5dbd4e 100644
--- a/indra/newview/fspanellogin.cpp
+++ b/indra/newview/fspanellogin.cpp
@@ -250,6 +250,9 @@ FSPanelLogin::FSPanelLogin(const LLRect &rect,
LLTextBox* grid_mgr_help_text = getChild("grid_login_text");
grid_mgr_help_text->setClickedCallback(onClickGridMgrHelp, NULL);
+ LLTextBox* grid_builder_text = getChild("grid_builder_text");
+ grid_builder_text->setClickedCallback(onClickGridBuilder, NULL);
+
LLSLURL start_slurl(LLStartUp::getStartSLURL());
// The StartSLURL might have been set either by an explicit command-line
// argument (CmdLineLoginLocation) or by default.
@@ -1356,6 +1359,12 @@ void FSPanelLogin::onClickGridMgrHelp(void*)
}
}
+//static
+void FSPanelLogin::onClickGridBuilder(void*)
+{
+ LLWeb::loadURLInternal(gSavedSettings.getString("FSGridBuilderURL"));
+}
+
void FSPanelLogin::onSelectUser()
{
LL_INFOS("AppInit") << "onSelectUser()" << LL_ENDL;
diff --git a/indra/newview/fspanellogin.h b/indra/newview/fspanellogin.h
index be348ac25c..5963972abd 100644
--- a/indra/newview/fspanellogin.h
+++ b/indra/newview/fspanellogin.h
@@ -111,6 +111,7 @@ private:
static void onClickRemove(void*);
static void onRemoveCallback(const LLSD& notification, const LLSD& response);
static void onClickGridMgrHelp(void*);
+ static void onClickGridBuilder(void*);
static std::string credentialName();
private:
diff --git a/indra/newview/fsworldmapmessage.cpp b/indra/newview/fsworldmapmessage.cpp
index 48e1411142..9d53bbf74c 100644
--- a/indra/newview/fsworldmapmessage.cpp
+++ b/indra/newview/fsworldmapmessage.cpp
@@ -48,98 +48,101 @@
#define htxhop_log(format, ...) LL_DEBUGS("GridManager") << llformat(format, __VA_ARGS__) << LL_ENDL;
-static inline std::string extract_region(const std::string& s)
+namespace hypergrid
{
- static auto const& patterns = {
- std::regex { R"(/ ([^/:=]+)$)" }, // TODO: figure out where the spec lives for hop "slash space" embedding...
- std::regex { R"(([^/:=]+)$)" }, // TODO: figure out where the spec lives for hop "grid:port:region" embedding...
+ static inline std::string extract_region(const std::string& s)
+ {
+ static auto const& patterns = {
+ std::regex { R"(/ ([^/:=]+)$)" }, // TODO: figure out where the spec lives for hop "slash space" embedding...
+ std::regex { R"(([^/:=]+)$)" }, // TODO: figure out where the spec lives for hop "grid:port:region" embedding...
+ };
+ std::smatch match_results;
+ std::string ls{ s };
+ LLStringUtil::toLower(ls);
+ for (const auto& pattern : patterns)
+ {
+ if (std::regex_search(ls, match_results, pattern))
+ {
+ return match_results[1].str();
+ }
+ }
+ return {};
+ }
+
+ // helper to encapsulate Region Map Block responses
+ struct MapBlock
+ {
+ S32 index{};
+ U16 x_regions{}, y_regions{}, x_size{ REGION_WIDTH_UNITS }, y_size{ REGION_WIDTH_UNITS };
+ std::string name{};
+ U8 accesscode{};
+ U32 region_flags{};
+ LLUUID image_id{};
+
+ inline U32 x_world() const { return (U32)(x_regions)*REGION_WIDTH_UNITS; }
+ inline U32 y_world() const { return (U32)(y_regions)*REGION_WIDTH_UNITS; }
+ inline U64 region_handle() const { return grid_to_region_handle(x_regions, y_regions); }
+
+ // see: LLWorldMapMessage::processMapBlockReply
+ MapBlock(LLMessageSystem* msg, S32 block)
+ : index(block)
+ {
+ msg->getU16Fast(_PREHASH_Data, _PREHASH_X, x_regions, block);
+ msg->getU16Fast(_PREHASH_Data, _PREHASH_Y, y_regions, block);
+ msg->getStringFast(_PREHASH_Data, _PREHASH_Name, name, block);
+ msg->getU8Fast(_PREHASH_Data, _PREHASH_Access, accesscode, block);
+ msg->getU32Fast(_PREHASH_Data, _PREHASH_RegionFlags, region_flags, block);
+ // msg->getU8Fast(_PREHASH_Data, _PREHASH_WaterHeight, water_height, block);
+ // msg->getU8Fast(_PREHASH_Data, _PREHASH_Agents, agents, block);
+ msg->getUUIDFast(_PREHASH_Data, _PREHASH_MapImageID, image_id, block);
+ // Aurora Sim
+ if (msg->getNumberOfBlocksFast(_PREHASH_Size) > 0)
+ {
+ msg->getU16Fast(_PREHASH_Size, _PREHASH_SizeX, x_size, block);
+ msg->getU16Fast(_PREHASH_Size, _PREHASH_SizeY, y_size, block);
+ }
+ if (x_size == 0 || (x_size % 16) != 0 || (y_size % 16) != 0)
+ {
+ x_size = 256;
+ y_size = 256;
+ }
+ // Aurora Sim
+ }
};
- std::smatch match_results;
- std::string ls { s };
- LLStringUtil::toLower(ls);
- for (const auto& pattern : patterns)
+
+ constexpr U32 EXACT_FLAG = 0x00000000;
+ constexpr U32 LAYER_FLAG = 0x00000002;
+
+ // see: LLWorldMapMessage::sendNamedRegionRequest
+ static void sendMapNameRequest(const std::string& region_name, U32 flags)
{
- if (std::regex_search(ls, match_results, pattern))
- {
- return match_results[1].str();
- }
+ LLMessageSystem* msg = gMessageSystem;
+ msg->newMessageFast(_PREHASH_MapNameRequest);
+ msg->nextBlockFast(_PREHASH_AgentData);
+ msg->addUUIDFast(_PREHASH_AgentID, gAgentID);
+ msg->addUUIDFast(_PREHASH_SessionID, gAgentSessionID);
+ msg->addU32Fast(_PREHASH_Flags, flags);
+ msg->addU32Fast(_PREHASH_EstateID, 0); // Filled in on sim
+ msg->addBOOLFast(_PREHASH_Godlike, false); // Filled in on sim
+ msg->nextBlockFast(_PREHASH_NameData);
+ msg->addStringFast(_PREHASH_Name, region_name);
+ gAgent.sendReliableMessage();
}
- return {};
+
+ struct AdoptedRegionNameQuery
+ {
+ std::string key{};
+ std::string region_name{};
+ hypergrid::url_callback_t arbitrary_callback;
+ std::string arbitrary_slurl{};
+ bool arbitrary_teleport{ false };
+ };
+
+ // map extracted region names => pending query entries
+ static std::map region_name_queries;
}
-// helper to encapsulate Region Map Block responses
-struct _MapBlock
-{
- S32 index {};
- U16 x_regions {}, y_regions {}, x_size { REGION_WIDTH_UNITS }, y_size { REGION_WIDTH_UNITS };
- std::string name {};
- U8 accesscode {};
- U32 region_flags {};
- LLUUID image_id {};
-
- inline U32 x_world() const { return (U32)(x_regions)*REGION_WIDTH_UNITS; }
- inline U32 y_world() const { return (U32)(y_regions)*REGION_WIDTH_UNITS; }
- inline U64 region_handle() const { return grid_to_region_handle(x_regions, y_regions); }
-
- // see: LLWorldMapMessage::processMapBlockReply
- _MapBlock(LLMessageSystem* msg, S32 block)
- : index(block)
- {
- msg->getU16Fast(_PREHASH_Data, _PREHASH_X, x_regions, block);
- msg->getU16Fast(_PREHASH_Data, _PREHASH_Y, y_regions, block);
- msg->getStringFast(_PREHASH_Data, _PREHASH_Name, name, block);
- msg->getU8Fast(_PREHASH_Data, _PREHASH_Access, accesscode, block);
- msg->getU32Fast(_PREHASH_Data, _PREHASH_RegionFlags, region_flags, block);
- // msg->getU8Fast(_PREHASH_Data, _PREHASH_WaterHeight, water_height, block);
- // msg->getU8Fast(_PREHASH_Data, _PREHASH_Agents, agents, block);
- msg->getUUIDFast(_PREHASH_Data, _PREHASH_MapImageID, image_id, block);
- // Aurora Sim
- if (msg->getNumberOfBlocksFast(_PREHASH_Size) > 0)
- {
- msg->getU16Fast(_PREHASH_Size, _PREHASH_SizeX, x_size, block);
- msg->getU16Fast(_PREHASH_Size, _PREHASH_SizeY, y_size, block);
- }
- if (x_size == 0 || (x_size % 16) != 0 || (y_size % 16) != 0)
- {
- x_size = 256;
- y_size = 256;
- }
- // Aurora Sim
- }
-};
-
-constexpr U32 EXACT_FLAG = 0x00000000;
-constexpr U32 LAYER_FLAG = 0x00000002;
-
-// see: LLWorldMapMessage::sendNamedRegionRequest
-static void _hypergrid_sendMapNameRequest(const std::string& region_name, U32 flags)
-{
- LLMessageSystem* msg = gMessageSystem;
- msg->newMessageFast(_PREHASH_MapNameRequest);
- msg->nextBlockFast(_PREHASH_AgentData);
- msg->addUUIDFast(_PREHASH_AgentID, gAgentID);
- msg->addUUIDFast(_PREHASH_SessionID, gAgentSessionID);
- msg->addU32Fast(_PREHASH_Flags, flags);
- msg->addU32Fast(_PREHASH_EstateID, 0); // Filled in on sim
- msg->addBOOLFast(_PREHASH_Godlike, false); // Filled in on sim
- msg->nextBlockFast(_PREHASH_NameData);
- msg->addStringFast(_PREHASH_Name, region_name);
- gAgent.sendReliableMessage();
-}
-
-struct _AdoptedRegionNameQuery
-{
- std::string key{};
- std::string region_name{};
- url_callback_t arbitrary_callback;
- std::string arbitrary_slurl{};
- bool arbitrary_teleport{ false };
-};
-
-// map extracted region names => pending query entries
-static std::map _region_name_queries;
-
-bool hypergrid_sendExactNamedRegionRequest(const std::string& region_name, const url_callback_t& callback, const std::string& callback_url, bool teleport)
+bool hypergrid::sendExactNamedRegionRequest(const std::string& region_name, const url_callback_t& callback, const std::string& callback_url, bool teleport)
{
if (!LLGridManager::instance().isInOpenSim() || !callback)
{
@@ -151,13 +154,13 @@ bool hypergrid_sendExactNamedRegionRequest(const std::string& region_name, const
{
return false;
}
- _region_name_queries[key] = { key, region_name, callback, callback_url, teleport };
+ region_name_queries.try_emplace(key, AdoptedRegionNameQuery{ key, region_name, callback, callback_url, teleport });
htxhop_log("Send Region Name '%s' (key: %s)", region_name.c_str(), key.c_str());
- _hypergrid_sendMapNameRequest(region_name, EXACT_FLAG);
+ sendMapNameRequest(region_name, EXACT_FLAG);
return true;
}
-bool hypergrid_processExactNamedRegionResponse(LLMessageSystem* msg, U32 agent_flags)
+bool hypergrid::processExactNamedRegionResponse(LLMessageSystem* msg, U32 agent_flags)
{
if (!LLGridManager::instance().isInOpenSim() || !msg || agent_flags & LAYER_FLAG)
{
@@ -166,44 +169,44 @@ bool hypergrid_processExactNamedRegionResponse(LLMessageSystem* msg, U32 agent_f
// NOTE: we assume only agent_flags have been read from msg so far
S32 num_blocks = msg->getNumberOfBlocksFast(_PREHASH_Data);
- std::vector<_MapBlock> blocks;
+ std::vector blocks;
blocks.reserve(num_blocks);
for (S32 b = 0; b < num_blocks; b++)
{
blocks.emplace_back(msg, b);
}
- for (const auto& _block : blocks)
+ for (const auto& block : blocks)
{
- htxhop_log("#%02d key='%s' block.name='%s' block.region_handle=%llu", _block.index, extract_region(_block.name).c_str(), _block.name.c_str(), _block.region_handle());
+ htxhop_log("#%02d key='%s' block.name='%s' block.region_handle=%llu", block.index, extract_region(block.name).c_str(), block.name.c_str(), block.region_handle());
}
// special case: handle singular result w/empty name tho valid region handle AND singular pending query as a match
// (might be that a landing area / redirect hop URL is coming back: "^hop://grid:port/$", which extract_region's into "")
bool solo_result = blocks.size() == 2 && blocks[0].region_handle() && extract_region(blocks[0].name).empty() && !blocks[1].region_handle();
- if (solo_result && _region_name_queries.size() == 1)
+ if (solo_result && region_name_queries.size() == 1)
{
htxhop_log("applying first block as redirect; region_handle: %llu", blocks[0].region_handle());
- blocks[0].name = _region_name_queries.begin()->second.region_name;
+ blocks[0].name = region_name_queries.begin()->second.region_name;
}
- for (const auto& _block : blocks)
+ for (const auto& block : blocks)
{
- auto key = extract_region(_block.name);
+ auto key = extract_region(block.name);
if (key.empty())
{
continue;
}
- auto idx = _region_name_queries.find(key);
- if (idx == _region_name_queries.end())
+ auto idx = region_name_queries.find(key);
+ if (idx == region_name_queries.end())
{
continue;
}
- const auto& pending = idx->second;
+ auto pending{ idx->second };
htxhop_log("Recv Region Name '%s' (key: %s) block.name='%s' block.region_handle=%llu)", pending.region_name.c_str(),
- pending.key.c_str(), _block.name.c_str(), _block.region_handle());
- _region_name_queries.erase(idx);
- pending.arbitrary_callback(_block.region_handle(), pending.arbitrary_slurl, _block.image_id, pending.arbitrary_teleport);
+ pending.key.c_str(), block.name.c_str(), block.region_handle());
+ region_name_queries.erase(idx);
+ pending.arbitrary_callback(block.region_handle(), pending.arbitrary_slurl, block.image_id, pending.arbitrary_teleport);
return true;
}
return false;
diff --git a/indra/newview/fsworldmapmessage.h b/indra/newview/fsworldmapmessage.h
index 2464ef15fd..3e4cca01e7 100644
--- a/indra/newview/fsworldmapmessage.h
+++ b/indra/newview/fsworldmapmessage.h
@@ -37,10 +37,13 @@
class LLMessageSystem;
class LLUUID;
-using url_callback_t = std::function;
-
-bool hypergrid_sendExactNamedRegionRequest(const std::string& region_name, const url_callback_t& callback, const std::string& callback_url, bool teleport);
-bool hypergrid_processExactNamedRegionResponse(LLMessageSystem* msg, U32 agent_flags);
+namespace hypergrid
+{
+ // Needs to be identical to url_callback_t defined in llworldmapmessage.h
+ using url_callback_t = std::function;
+ bool sendExactNamedRegionRequest(const std::string& region_name, const url_callback_t& callback, const std::string& callback_url, bool teleport);
+ bool processExactNamedRegionResponse(LLMessageSystem* msg, U32 agent_flags);
+}
#endif
#endif // FS_WORLDMAPMESSAGE_H
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 0e2efa8217..12cab03b14 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -1166,7 +1166,7 @@ bool LLAppViewer::init()
}
// alert the user if they are using unsupported hardware
- if(!gSavedSettings.getBOOL("AlertedUnsupportedHardware"))
+ if(gSavedSettings.getBOOL("FSUseLegacyUnsupportedHardwareChecks") && !gSavedSettings.getBOOL("AlertedUnsupportedHardware"))
{
bool unsupported = false;
LLSD args;
diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp
index 61bfcc86e8..7dd70c8644 100644
--- a/indra/newview/llinventoryfunctions.cpp
+++ b/indra/newview/llinventoryfunctions.cpp
@@ -3375,7 +3375,7 @@ void LLInventoryAction::doToSelected(LLInventoryModel* model, LLFolderView* root
for (LLInventoryModel::item_array_t::value_type& item : items)
{
- if (get_is_item_worn(item))
+ if (!item->getIsLinkType() && get_is_item_worn(item))
{
has_worn = true;
LLWearableType::EType type = item->getWearableType();
@@ -3395,7 +3395,7 @@ void LLInventoryAction::doToSelected(LLInventoryModel* model, LLFolderView* root
}
}
LLViewerInventoryItem* item = gInventory.getItem(obj_id);
- if (item && get_is_item_worn(item))
+ if (item && !item->getIsLinkType() && get_is_item_worn(item))
{
has_worn = true;
LLWearableType::EType type = item->getWearableType();
diff --git a/indra/newview/llinventorygallery.cpp b/indra/newview/llinventorygallery.cpp
index 6b25857068..b873c6f702 100644
--- a/indra/newview/llinventorygallery.cpp
+++ b/indra/newview/llinventorygallery.cpp
@@ -1988,7 +1988,7 @@ void LLInventoryGallery::deleteSelection()
for (LLInventoryModel::item_array_t::value_type& item : items)
{
- if (get_is_item_worn(item))
+ if (!item->getIsLinkType() && get_is_item_worn(item))
{
has_worn = true;
LLWearableType::EType type = item->getWearableType();
@@ -2009,7 +2009,7 @@ void LLInventoryGallery::deleteSelection()
}
LLViewerInventoryItem* item = gInventory.getItem(id);
- if (item && get_is_item_worn(item))
+ if (item && !item->getIsLinkType() && get_is_item_worn(item))
{
has_worn = true;
LLWearableType::EType type = item->getWearableType();
diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp
index ac2459be80..459a33d111 100644
--- a/indra/newview/llpanelobjectinventory.cpp
+++ b/indra/newview/llpanelobjectinventory.cpp
@@ -627,13 +627,12 @@ void LLTaskInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
// [/RLVa:KB]
}
items.push_back(std::string("Task Properties"));
- // Legacy object properties
+ // Improved object properties
//if ((flags & FIRST_SELECTED_ITEM) == 0)
- if (!gSavedSettings.getBOOL("FSUseLegacyObjectProperties") && (flags & FIRST_SELECTED_ITEM) == 0)
+ //{
+ // disabled_items.push_back(std::string("Task Properties"));
+ //}
//
- {
- disabled_items.push_back(std::string("Task Properties"));
- }
// [RLVa:KB] - Checked: 2010-09-28 (RLVa-1.2.1f) | Added: RLVa-1.2.1f
items.push_back(std::string("Task Rename"));
if ( (!isItemRenameable()) || ((flags & FIRST_SELECTED_ITEM) == 0) )
@@ -1007,13 +1006,12 @@ void LLTaskSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
}
}
items.push_back(std::string("Task Properties"));
- // Legacy object properties
+ // Improved object properties
//if ((flags & FIRST_SELECTED_ITEM) == 0)
- if (!gSavedSettings.getBOOL("FSUseLegacyObjectProperties") && (flags & FIRST_SELECTED_ITEM) == 0)
+ //{
+ // disabled_items.push_back(std::string("Task Properties"));
+ //}
//
- {
- disabled_items.push_back(std::string("Task Properties"));
- }
if(isItemRenameable())
{
items.push_back(std::string("Task Rename"));
diff --git a/indra/newview/llworldmapmessage.cpp b/indra/newview/llworldmapmessage.cpp
index bbd0da9895..d521f5ded9 100644
--- a/indra/newview/llworldmapmessage.cpp
+++ b/indra/newview/llworldmapmessage.cpp
@@ -102,7 +102,7 @@ void LLWorldMapMessage::sendNamedRegionRequest(std::string region_name,
{
// FIRE-31368: [OPENSIM] ... Search returns more than one result
#ifdef OPENSIM
- if (hypergrid_sendExactNamedRegionRequest(region_name, callback, callback_url, teleport))
+ if (hypergrid::sendExactNamedRegionRequest(region_name, callback, callback_url, teleport))
{
return;
}
@@ -171,7 +171,7 @@ void LLWorldMapMessage::processMapBlockReply(LLMessageSystem* msg, void**)
msg->getU32Fast(_PREHASH_AgentData, _PREHASH_Flags, agent_flags);
// FIRE-31368: [OPENSIM] ... Search returns more than one result
#ifdef OPENSIM
- if (hypergrid_processExactNamedRegionResponse(msg, agent_flags))
+ if (hypergrid::processExactNamedRegionResponse(msg, agent_flags))
{
return;
}
diff --git a/indra/newview/skins/default/xui/de/panel_fs_login.xml b/indra/newview/skins/default/xui/de/panel_fs_login.xml
index 42d8bdbeee..3f5cb17650 100644
--- a/indra/newview/skins/default/xui/de/panel_fs_login.xml
+++ b/indra/newview/skins/default/xui/de/panel_fs_login.xml
@@ -34,6 +34,9 @@
+
+ + Klicken um Grids hinzuzufügen
+
Gridauswahl:
diff --git a/indra/newview/skins/default/xui/de/panel_fs_nui_login.xml b/indra/newview/skins/default/xui/de/panel_fs_nui_login.xml
index 3c8688ec84..b5e3865d9d 100644
--- a/indra/newview/skins/default/xui/de/panel_fs_nui_login.xml
+++ b/indra/newview/skins/default/xui/de/panel_fs_nui_login.xml
@@ -37,6 +37,9 @@
Grid:
+
+ + Klicken um Grids hinzuzufügen
+
diff --git a/indra/newview/skins/default/xui/en/panel_fs_login.xml b/indra/newview/skins/default/xui/en/panel_fs_login.xml
index 05fdee217b..52500edb4f 100644
--- a/indra/newview/skins/default/xui/en/panel_fs_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_fs_login.xml
@@ -150,25 +150,25 @@
Start at:
+ allow_text_entry="true"
+ control_name="NextLoginLocation"
+ follows="left|bottom"
+ height="22"
+ max_chars="128"
+ top_pad="0"
+ name="start_location_combo"
+ width="165">
+ label="Last location"
+ name="MyLastLocation"
+ value="last" />
+ label="Home"
+ name="MyHome"
+ value="home" />
+ label="<Type region name>"
+ name="Typeregionname" value="" />
+
+ + Click to add more grids
+
+
+ + Click to add more grids
+
+
+Les antivirus et les anti-logiciels malveillants sont un élément essentiel d'une utilisation sûre de l'internet, mais ils peuvent causer toute une série de problèmes à la visionneuse.
+Pour réduire les interférences et améliorer la stabilité et les performances, nous conseillons vivement à tous les utilisateurs de veiller à ce qu'il y ait des exclusions (connues sous le nom de liste blanche) pour les dossiers et les programmes importants que la visionneuse utilise.
+
+Pour plus d'informations, visitez le site
+https://wiki.firestormviewer.org/antivirus_whitelisting
+
+
+Pour vous simplifier la tâche, l'encadré ci-dessous indique les dossiers utilisés par la visionneuse.
+Veuillez les ajouter à vos exclusions de dossiers AV, comme indiqué sur la page wiki ci-dessus.
+
+
+La case suivante indique le nom et le chemin d'accès complet des exécutables de la visionneuse.
+Ajoutez-les à vos exclusions d'exécutables AV comme indiqué dans le wiki ci-dessus.
+
+
\ No newline at end of file
diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml
index aaedff79d6..00acc2e6aa 100644
--- a/indra/newview/skins/default/xui/fr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml
@@ -267,8 +267,17 @@
+
+
+
diff --git a/indra/newview/skins/default/xui/fr/panel_fs_login.xml b/indra/newview/skins/default/xui/fr/panel_fs_login.xml
index 73f9e42d81..f3e1c749ac 100644
--- a/indra/newview/skins/default/xui/fr/panel_fs_login.xml
+++ b/indra/newview/skins/default/xui/fr/panel_fs_login.xml
@@ -17,6 +17,9 @@
+
+ + Ajouter des grilles
+
Connexion à la Grille :
diff --git a/indra/newview/skins/default/xui/fr/panel_fs_nui_login.xml b/indra/newview/skins/default/xui/fr/panel_fs_nui_login.xml
index fb0ad900ce..f0d8968d49 100644
--- a/indra/newview/skins/default/xui/fr/panel_fs_nui_login.xml
+++ b/indra/newview/skins/default/xui/fr/panel_fs_nui_login.xml
@@ -37,6 +37,9 @@
Grille :
+
+ + Ajouter des grilles
+
diff --git a/indra/newview/skins/default/xui/fr/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/fr/panel_group_info_sidetray.xml
index 2bb67f774e..21dd703a9f 100644
--- a/indra/newview/skins/default/xui/fr/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/fr/panel_group_info_sidetray.xml
@@ -9,7 +9,10 @@
Quitter
-
+
+
+
+
@@ -24,11 +27,17 @@
-
-
+
+
+
+
+
+
+
+
+
-
diff --git a/indra/newview/skins/default/xui/pl/panel_fs_login.xml b/indra/newview/skins/default/xui/pl/panel_fs_login.xml
index ad4302a343..dbb2a84c4f 100644
--- a/indra/newview/skins/default/xui/pl/panel_fs_login.xml
+++ b/indra/newview/skins/default/xui/pl/panel_fs_login.xml
@@ -28,6 +28,9 @@
+
+ + Kliknij, by dodać światy
+
Loguj do świata:
diff --git a/indra/newview/skins/default/xui/pl/panel_fs_nui_login.xml b/indra/newview/skins/default/xui/pl/panel_fs_nui_login.xml
index ba215d8ec0..08af7c43a2 100644
--- a/indra/newview/skins/default/xui/pl/panel_fs_nui_login.xml
+++ b/indra/newview/skins/default/xui/pl/panel_fs_nui_login.xml
@@ -34,6 +34,9 @@
Świat:
+
+ + Kliknij, by dodać światy
+
diff --git a/indra/newview/skins/default/xui/ru/panel_fs_login.xml b/indra/newview/skins/default/xui/ru/panel_fs_login.xml
index c5ba3bbd22..a6ee2abfe8 100644
--- a/indra/newview/skins/default/xui/ru/panel_fs_login.xml
+++ b/indra/newview/skins/default/xui/ru/panel_fs_login.xml
@@ -28,6 +28,9 @@
+
+ + Нажмите чтобы добавить больше сеток
+
Подключиться к сетке:
diff --git a/indra/newview/skins/default/xui/ru/panel_fs_nui_login.xml b/indra/newview/skins/default/xui/ru/panel_fs_nui_login.xml
index 4d1ae4bc90..b64cdf63c9 100644
--- a/indra/newview/skins/default/xui/ru/panel_fs_nui_login.xml
+++ b/indra/newview/skins/default/xui/ru/panel_fs_nui_login.xml
@@ -33,6 +33,7 @@
Сеть:
+ + Нажмите чтобы добавить больше сеток
Режим: