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 @@ - alternatemetaverse.com:8002 + localhost:9000 LastModified - 2020-06-02T11:41:00.95Z + 2024-05-28T12:00:00Z + grid_login_id + localhost:9000 gridname - Alternate Metaverse + localhost gridnick - AMV + localhost login_identifier_types agent account loginpage - https://alternatemetaverse.com/splash - loginuri - - http://alternatemetaverse.com:8002 - - name - alternatemetaverse.com:8002 - platform - OpenSim - slurl_base - hop://alternatemetaverse.com:8002/ - - astralia.eu:8002 - - LastModified - 2020-06-02T11:43:19.89Z - gatekeeper - astralia.eu:8002 - gridname - astralia - gridnick - astralia - helperuri - http://astralia.eu//currency/helper/landtool.php - login_identifier_types - - agent - account - - loginpage - http://astralia.eu - loginuri - - http://astralia.eu:8002/ - - name - astralia.eu:8002 - platform - OpenSim - slurl_base - hop://astralia.eu:8002/ - - cc.opensimulator.org:8002 - - LastModified - 2019-12-09T10:00:00Z - gatekeeper - cc.opensimulator.org:8002 - gridname - OpenSim Community Conference - gridnick - opensimcc - helperuri - http://cc.opensimulator.org/helper/ - login_identifier_types - - agent - account - - loginpage - http://cc.opensimulator.org:8005/wifi/welcome.html - loginuri - - http://cc.opensimulator.org:8002/ - - name - cc.opensimulator.org:8002 - password - http://cc.opensimulator.org:8005/wifi/forgotpassword - platform - OpenSim - register - http://cc.opensimulator.org:8005/wifi/user/account - slurl_base - hop://cc.opensimulator.org:8002/ - - craft-world.org:8002 - - LastModified - 2020-06-02T14:23:31.86Z - about - https://www.craft-world.org/ - gatekeeper - craft-world.org:8002 - gridname - Craft World - gridnick - craft - help - https://www.craft-world.org/page/en/support.php - helperuri - http://webapp.craft-world.org/economy/ - login_identifier_types - - agent - account - - loginpage - https://www.craft-world.org/loginscreen.php - loginuri - - http://craft-world.org:8002/ - - name - craft-world.org:8002 - password - https://www.craft-world.org/page/en/avatar-tools.php - platform - OpenSim - register - https://www.craft-world.org/page/en/register-an-avatar.php - slurl_base - hop://craft-world.org:8002/ - - discoverygrid.net:8002 - - LastModified - 2020-04-24T12:06:59.18Z - about - https://discoverygrid.net/about.php - gatekeeper - discoverygrid.net:8002 - gridname - DiscoveryGrid - gridnick - DiscoveryGrid - help - https://discoverygrid.net - helperuri - https://discoverygrid.net/apps/ - login_identifier_types - - agent - account - - loginpage - https://discoverygrid.net/viewersplash.php - loginuri - - http://discoverygrid.net:8002/ - - name - discoverygrid.net:8002 - password - https://discoverygrid.net/#needpw - platform - OpenSim - register - https://discoverygrid.net/index.php#create - slurl_base - hop://discoverygrid.net:8002/ - - fireandicegrid.net:8002 - - LastModified - 2020-06-02T11:41:59.83Z - about - http://fireandicegrid.net - gatekeeper - fireandicegrid.net:8002 - gridname - Fire And Ice Grid - gridnick - FireAndIceGrid - help - http://fireandicegrid.net - helperuri - http://fireandicegrid.net - login_identifier_types - - agent - account - - loginpage - http://fireandicegrid.net - loginuri - - http://fireandicegrid.net:8002/ - - name - fireandicegrid.net:8002 - password - http://fireandicegrid.net:8002/wifi - platform - OpenSim - register - http://fireandicegrid.net:8002/wifi - slurl_base - hop://fireandicegrid.net:8002/ - - gaynations.org:7002 - - DEPRECATED - TRUE - login_identifier_types - - agent - account - - LastModified - 2020-06-02T11:41:00.95Z - name - gaynations.org:7002 - - goto.theencoreescape.com:8002 - - DirectoryFee - 0 - LastModified - 2020-04-24T17:00:50.92Z - SendGridInfoToViewerOnLogin - true - about - http://theencoreescape.com/ - gatekeeper - goto.theencoreescape.com:8002 - gridname - The Encore Escape - gridnick - EncoreEscape - help - http://theencoreescape.com/ - helperuri - http://money.theencoreescape.com/ - login_identifier_types - - agent - account - - loginpage - http://splash.theencoreescape.com/ - loginuri - - http://goto.theencoreescape.com:8002/ - - name - goto.theencoreescape.com:8002 - password - http://theencoreescape.com/ - platform - OpenSim - register - http://theencoreescape.com/ - search - http://search.theencoreescape.com/query.php - slurl_base - hop://goto.theencoreescape.com:8002/ - - grid.3rdrockgrid.com:8002 - - LastModified - 2012-08-03T15:32:54.31Z - about - http://3rdrockgrid.com/ - gridname - 3RD Rock Grid - gridnick - 3RG - help - http://3rdrockgrid.com/ - helperuri - http://grid.3rdrockgrid.com/3rg_money/ - login_identifier_types - - agent - account - - loginpage - http://grid.3rdrockgrid.com/3rg_login/ - loginuri - - http://grid.3rdrockgrid.com:8002/ - - name - grid.3rdrockgrid.com:8002 - password - http://3rdrockgrid.com/ - register - http://3rdrockgrid.com/ - slurl_base - hop://grid.3rdrockgrid.com:8002/ - - - grid.avacon.org:8002 - - LastModified - 2020-06-02T12:01:35.02Z - gatekeeper - grid.avacon.org:8002 - gridname - AvaCon Grid - gridnick - avacon - helperuri - http://grid.avacon.org/helper/ - login_identifier_types - - agent - account - - loginpage - http://grid.avacon.org:8005/wifi/welcome.html - loginuri - - http://grid.avacon.org:8002/ - - name - grid.avacon.org:8002 - password - http://grid.avacon.org:8005/wifi/forgotpassword - platform - OpenSim - register - http://grid.avacon.org:8005/wifi/user/account - slurl_base - hop://grid.avacon.org:8002/ - - grid.kitely.com:8002 - - LastModified - 2014-03-20T12:30:00Z - gatekeeper - grid.kitely.com:8002 - gridname - Kitely - gridnick - kitely - helperuri - http://grid.kitely.com:8002/ - login_identifier_types - - agent - account - - loginpage - http://www.kitely.com/viewer_login - loginuri - - http://grid.kitely.com:8002/ - - name - grid.kitely.com:8002 - platform - OpenSim - slurl_base - hop://grid.kitely.com:8002/ - - grid.virtualife.cloud:8002 - - LastModified - 2019-12-04T10:50:32.55Z - about - http://www.virtualife.cloud - gatekeeper - grid.virtualife.cloud:8002 - gridname - virtualife world - gridnick - Virtualife world - login_identifier_types - - agent - account - - loginpage - http://www.virtualife.cloud/index.php?option=com_opensim - loginuri - - http://grid.virtualife.cloud:8002/ - - name - grid.virtualife.cloud:8002 - password - http://grid.virtualife.cloud:8002/wifi/forgotpassword - platform - OpenSim - register - http://grid.virtualife.cloud:8002/wifi/user/account - slurl_base - hop://grid.virtualife.cloud:8002/ - - grid01.from-ne.com:8002 - - DEPRECATED - TRUE - LastModified - 2020-06-02T11:41:00.95Z - login_identifier_types - - agent - account - - name - grid01.from-ne.com:8002 - - hypergrid.org:8002 - - LastModified - 2013-04-02T01:01:24.65Z - about - http://www.hypergrid.org/metropolis/wiki - gatekeeper - hypergrid.org:8002 - gridname - Metropolis Metaversum - gridnick - Metropolis - help - http://metropolis.hypergrid.org/forum - helperuri - http://metropolis.hypergrid.org/currency/helper/ - login_identifier_types - - agent - account - - loginpage - http://metropolis.hypergrid.org - loginuri - - http://hypergrid.org:8002/ - - name - hypergrid.org:8002 - password - http://metropolis.hypergrid.org/password.php - platform - OpenSim - register - http://www.hypergrid.org/metropolis/metro_rg.php - slurl_base - hop://hypergrid.org:8002/ - - islandoasisgrid.biz:8002 - - LastModified - 2013-01-21T20:10:35.17Z - about - http://www.islandoasis.biz/GridStats.aspx - gridname - Island Oasis - gridnick - Island_Oasis - help - http://www.islandoasis.biz/Support.aspx - helperuri - http://islandoasisgrid:8020/OsCurrency/ - login_identifier_types - - agent - account - - loginpage - http://www.islandoasis.biz/welcome.aspx - loginuri - - http://islandoasisgrid.biz:8002/ - - name - islandoasisgrid.biz:8002 - password - http://www.islandoasis.biz/Login.aspx - platform - OpenSim - register - http://www.islandoasis.biz/verification.aspx - slurl_base - hop://islandoasisgrid.biz:8002/ - - lfgrid.com:8002 - - LastModified - 2013-03-18T21:51:17.62Z - about - http://lfgrid.com/about/ - gatekeeper - lfgrid.com:8002 - gridname - Littlefield Grid - gridnick - LFgrid - help - http://lfgrid.com/help - helperuri - http://lfgrid.com/services/ - login_identifier_types - - agent - account - - loginpage - http://www.lfgrid.com/splash/index.php - loginuri - - http://lfgrid.com:8002/ - - name - lfgrid.com:8002 - password - http://lfgrid.com:8002/wifi/forgotpassword - platform - OpenSim - register - http://lfgrid.com:8002/wifi/user/account/ - slurl_base - hop://lfgrid.com:8002/ - - login.aviworlds.com:8002 - - DirectoryFee - 0 - LastModified - 2020-06-02T11:41:55.32Z - SendGridInfoToViewerOnLogin - true - about - http://aviworlds.com - gatekeeper - login.aviworlds.com:8002 - gridname - AviWorlds - gridnick - Avi - help - http://aviworlds.com - helperuri - http://login.aviworlds.com/helper_scripts/helper/ - login_identifier_types - - agent - account - - loginpage - http://login.aviworlds.com/splash - loginuri - - http://login.aviworlds.com:8002/ - - name - login.aviworlds.com:8002 - password - http://login.aviworlds.com:8002/wifi/forgotpassword - platform - OpenSim - register - http://login.aviworlds.com:8002/wifi/user/account/ - search - http://login.aviworlds.com/ossearch/query.php - slurl_base - hop://login.aviworlds.com:8002/ - - login.digiworldz.com:8002 - - DirectoryFee - 0 - LastModified - 2015-07-24T13:19:44.27Z - SendGridInfoToViewerOnLogin - true - about - http://digiworldz.com/ - gatekeeper - login.digiworldz.com:8002 - gridname - DigiWorldZ Grid - gridnick - DWG - help - http://digiworldz.com/ - helperuri - http://money.digiworldz.com/ - login_identifier_types - - agent - account - - loginpage - http://splash.digiworldz.com/ - loginuri - - http://login.digiworldz.com:8002/ - - name - login.digiworldz.com:8002 - password - http://digiworldz.com/ - platform - OpenSim - register - http://digiworldz.com/ - search - http://search.digiworldz.com/query.php - slurl_base - hop://login.digiworldz.com:8002/ - - login.francogrid.org:80 - - LastModified - 2013-02-14T02:00:46.10Z - about - http://francogrid.org/ - gridname - FrancoGrid - gridnick - francogrid - help - http://francogrid.org/aide - helperuri - http://helper.main.francogrid.org/ - login_identifier_types - - agent - account - - loginpage - http://viewer.francogrid.org/ - loginuri - - http://login.francogrid.org/ - - name - login.francogrid.org:80 - password - http://francogrid.org/user/password - platform - OpenSim - register - http://francogrid.org/user/register - slurl_base - hop://login.francogrid.org:80/ - - login.greatcanadiangrid.ca:8002 - - DEPRECATED - TRUE - login_identifier_types - - agent - account - - LastModified - 2020-06-02T11:41:00.95Z - name - login.greatcanadiangrid.ca:8002 - - login.osgrid.org - - LastModified - 2019-04-19T21:15:00Z - about - http://www.osgrid.org/ - gatekeeper - hg.osgrid.org:80 - gridname - OSGrid - gridnick - osgrid - help - http://www.osgrid.org/ - helperuri - http://helper.osgrid.org/ - login_identifier_types - - agent - account - - loginpage - http://www.osgrid.org/splash/ - loginuri - - http://login.osgrid.org/ - - name - login.osgrid.org - password - http://www.osgrid.org/ - platform - register - http://www.osgrid.org/ - slurl_base - hop://login.osgrid.org/ - web_profile_url - http://my.osgrid.org/?name=[AGENT_NAME] - - login.ufsgrid.com:8002 - - DEPRECATED - TRUE - LastModified - 2020-06-02T11:41:00.95Z - login_identifier_types - - agent - account - - name - login.ufsgrid.com:8002 - - login.zetaworlds.com - - LastModified - 2020-06-02T12:39:31.19Z - about - https://zetaworlds.com/ - gridname - ZetaWorlds - gridnick - ZetaWorlds - helperuri - http://money.zetaworlds.com/ - login_identifier_types - - agent - account - - loginpage - http://zetaworlds.com/splash loginuri - https://login.zetaworlds.com/ + http://localhost:9000 name - login.zetaworlds.com - password - https://zetaworlds.com/user/forgot - platform - OpenSim - register - http://zetaworlds.com/user/register + localhost:9000 slurl_base - hop://login.zetaworlds.com/ - - login.zonenations.com:8002 - - LastModified - 2019-12-04T10:43:24.96Z - about - https://www.zonenations.com/ - gatekeeper - login.zonenations.com:8002 - gridname - Zone Nations - gridnick - ZoneNations - help - https://www.zonenations.com/supporto.html - helperuri - https://www.zonenations.com/components/com_opensim/ - login_identifier_types - - agent - account - - loginpage - https://www.zonenations.com/index.php?option=com_opensim - loginuri - - http://login.zonenations.com:8002/ - - name - login.zonenations.com:8002 - password - https://www.zonenations.com/password-smarrita.html - platform - OpenSim - register - https://www.zonenations.com/iscriviti.html - slurl_base - hop://login.zonenations.com:8002/ - - login.main.mobiusgrid.us:8002 - - LastModified - 2020-06-02T11:41:00.95Z - DEPRECATED - TRUE - name - login.main.mobiusgrid.us:8002 - - main.mobiusgrid.us - - LastModified - 2020-06-02T13:19:55.40Z - about - https://mobiusgrid.us/about - gridname - Mobius Grid - gridnick - Mobius - help - https://mobiusgrid.us/help - login_identifier_types - - agent - account - - loginpage - https://mobiusgrid.us/splash - loginuri - - http://login.main.mobiusgrid.us - - name - main.mobiusgrid.us - password - https://mobiusgrid.us/forgot - platform - OpenSim - register - https://mobiusgrid.us/join - slurl_base - hop://main.mobiusgrid.us/ - - partydestinationgrid.com:8002 - - LastModified - 2019-12-04T10:48:17.58Z - about - https://partydestinationgrid.com/ - gatekeeper - partydestinationgrid.com:8002 - gridname - Party Destination Grid - gridnick - partydestinationgrid - help - https://partydestinationgrid.com/index.php/help/help - helperuri - http://partydestinationgrid.com/components/com_opensim/ - login_identifier_types - - agent - account - - loginpage - http://module.partydestinationgrid.com/login - loginuri - - http://partydestinationgrid.com:8002/ - - name - partydestinationgrid.com:8002 - platform - OpenSim - register - https://partydestinationgrid.com/index.php/component/users/?view=registration - slurl_base - hop://partydestinationgrid.com:8002/ - - tanglegrid.net:8002 - - LastModified - 2019-12-04T10:49:43.20Z - about - http://tanglegrid.com/ - gatekeeper - tanglegrid.net:8002 - gridname - TanGLe Grid - gridnick - TanGLe - help - http://tanglegrid.com/contact.php - helperuri - http://tanglegrid.net/scripts/helper/ - login_identifier_types - - agent - account - - loginpage - http://tanglegrid.net/web_interface/loginscreen.php - loginuri - - http://tanglegrid.net:8002/ - - name - tanglegrid.net:8002 - password - http://www.tanglegrid.net/web_interface/index.php?page=forgotpass - platform - OpenSim - register - http://www.tanglegrid.net/web_interface/avatar.php - search - http://www.tanglegrid.net/helper/query.php - slurl_base - hop://tanglegrid.net:8002/ - - thekazgrid.com:8002 - - LastModified - 2019-12-04T10:47:15.79Z - about - https://www.thekazgrid.com/index.php/11-about/6-about - gridname - TheKaz Grid - gridnick - TheKaz - helperuri - https://www.thekazgrid.com/currency/helper/ - login_identifier_types - - agent - account - - loginpage - https://www.thekazgrid.com/index.php?option=com_opensim - loginuri - - http://thekazgrid.com:8002/ - - name - thekazgrid.com:8002 - platform - OpenSim - register - https://www.thekazgrid.com/index.php/join - slurl_base - hop://thekazgrid.com:8002/ - - util.aditi.lindenlab.com + hop://localhost:9000/ + + 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 @@ -