summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
authorAndreyL ProductEngine <alihatskiy@productengine.com>2019-11-27 08:19:22 +0200
committerAndreyL ProductEngine <alihatskiy@productengine.com>2019-11-27 08:19:22 +0200
commitd0c7b4fade611bb3bd05a4e6230145b1babc9f7f (patch)
tree96edb360c7cacaef64a4b865e7d97c9ef8404669 /indra/newview
parent49216183902045a2b9ba4a0627eb4298a65c004c (diff)
parent78bdf57ad6610b34389226bf941ba736ca0c2225 (diff)
Merged in lindenlab/viewer-release
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/CMakeLists.txt10
-rw-r--r--indra/newview/VIEWER_VERSION.txt2
-rw-r--r--indra/newview/installers/windows/lang_en-us.nsibin11488 -> 11434 bytes
-rw-r--r--indra/newview/llagent.cpp17
-rw-r--r--indra/newview/llagent.h2
-rw-r--r--indra/newview/llagentcamera.cpp8
-rw-r--r--indra/newview/llappdelegate-objc.mm13
-rw-r--r--indra/newview/llappearancemgr.cpp2
-rw-r--r--indra/newview/llappviewer.cpp84
-rw-r--r--indra/newview/llappviewerwin32.cpp12
-rw-r--r--indra/newview/llavatarlist.cpp2
-rw-r--r--indra/newview/llbrowsernotification.cpp2
-rw-r--r--indra/newview/llchannelmanager.cpp21
-rw-r--r--indra/newview/llchannelmanager.h1
-rw-r--r--indra/newview/llcofwearables.cpp3
-rw-r--r--indra/newview/llcontrolavatar.cpp9
-rw-r--r--indra/newview/llconversationlog.cpp24
-rw-r--r--indra/newview/llconversationlog.h7
-rw-r--r--indra/newview/lldonotdisturbnotificationstorage.cpp2
-rw-r--r--indra/newview/lldonotdisturbnotificationstorage.h5
-rw-r--r--indra/newview/llexpandabletextbox.cpp2
-rw-r--r--indra/newview/llexternaleditor.cpp4
-rw-r--r--indra/newview/llface.cpp6
-rw-r--r--indra/newview/llface.h2
-rw-r--r--indra/newview/llfeaturemanager.cpp2
-rw-r--r--indra/newview/llfeaturemanager.h5
-rw-r--r--indra/newview/llfirstuse.cpp31
-rw-r--r--indra/newview/llfirstuse.h9
-rw-r--r--indra/newview/llfloaterbvhpreview.cpp2
-rw-r--r--indra/newview/llfloatercamera.cpp2
-rw-r--r--indra/newview/llfloaterchatvoicevolume.cpp2
-rw-r--r--indra/newview/llfloaterconversationpreview.cpp15
-rw-r--r--indra/newview/llfloaterimagepreview.cpp2
-rw-r--r--indra/newview/llfloaterimcontainer.cpp4
-rw-r--r--indra/newview/llfloaterimnearbychat.cpp2
-rw-r--r--indra/newview/llfloatermodelpreview.cpp2
-rw-r--r--indra/newview/llfloatermyscripts.cpp25
-rw-r--r--indra/newview/llfloatermyscripts.h4
-rw-r--r--indra/newview/llfloaterpreference.cpp18
-rw-r--r--indra/newview/llfloaterreporter.cpp16
-rw-r--r--indra/newview/llfloatersearch.cpp3
-rw-r--r--indra/newview/llfloaterspellchecksettings.cpp10
-rw-r--r--indra/newview/llfloatertools.cpp12
-rw-r--r--indra/newview/llfloateruipreview.cpp6
-rw-r--r--indra/newview/llfloatervoicevolume.cpp2
-rw-r--r--indra/newview/llfloaterwebcontent.cpp4
-rw-r--r--indra/newview/llfloaterworldmap.cpp4
-rw-r--r--indra/newview/llfollowcam.cpp72
-rw-r--r--indra/newview/llfollowcam.h54
-rw-r--r--indra/newview/llgroupactions.cpp2
-rw-r--r--indra/newview/llhints.cpp45
-rw-r--r--indra/newview/llhints.h21
-rw-r--r--indra/newview/llimagefiltersmanager.cpp2
-rw-r--r--indra/newview/llimprocessing.cpp2
-rw-r--r--indra/newview/llimview.cpp84
-rw-r--r--indra/newview/llimview.h24
-rw-r--r--indra/newview/llinspect.cpp10
-rw-r--r--indra/newview/llinspectavatar.cpp4
-rw-r--r--indra/newview/llinspectgroup.cpp4
-rw-r--r--indra/newview/llinspectobject.cpp8
-rw-r--r--indra/newview/llinspectremoteobject.cpp4
-rw-r--r--indra/newview/llinspecttoast.cpp2
-rw-r--r--indra/newview/llinventorybridge.cpp158
-rw-r--r--indra/newview/llinventorybridge.h2
-rw-r--r--indra/newview/lllocalbitmaps.cpp54
-rw-r--r--indra/newview/lllocalbitmaps.h45
-rw-r--r--indra/newview/lllocationinputctrl.cpp2
-rw-r--r--indra/newview/lllogchat.cpp94
-rw-r--r--indra/newview/lllogchat.h30
-rw-r--r--indra/newview/llmaniptranslate.cpp2
-rw-r--r--indra/newview/llmarketplacefunctions.cpp6
-rw-r--r--indra/newview/llmediactrl.cpp6
-rw-r--r--indra/newview/llmoveview.cpp4
-rw-r--r--indra/newview/llnamelistctrl.cpp2
-rw-r--r--indra/newview/llnavigationbar.cpp2
-rw-r--r--indra/newview/llnetmap.cpp4
-rw-r--r--indra/newview/llnotificationhandlerutil.cpp2
-rw-r--r--indra/newview/llnotificationhinthandler.cpp6
-rw-r--r--indra/newview/llpanelface.cpp8
-rw-r--r--indra/newview/llpanelmediasettingsgeneral.cpp2
-rw-r--r--indra/newview/llpanelnearbymedia.cpp77
-rw-r--r--indra/newview/llpanelpicks.cpp4
-rw-r--r--indra/newview/llpanelplaces.cpp2
-rw-r--r--indra/newview/llpanelprimmediacontrols.cpp2
-rw-r--r--indra/newview/llpanelprofile.cpp2
-rw-r--r--indra/newview/llpersistentnotificationstorage.cpp1
-rw-r--r--indra/newview/llpersistentnotificationstorage.h6
-rw-r--r--indra/newview/llpopupview.cpp4
-rw-r--r--indra/newview/llpreviewscript.cpp2
-rw-r--r--indra/newview/llprogressview.cpp4
-rw-r--r--indra/newview/llsaveoutfitcombobtn.cpp2
-rw-r--r--indra/newview/llshareavatarhandler.cpp2
-rw-r--r--indra/newview/llskinningutil.cpp4
-rw-r--r--indra/newview/llskinningutil.h1
-rw-r--r--indra/newview/llsky.cpp2
-rw-r--r--indra/newview/llstartup.cpp106
-rw-r--r--indra/newview/llstartup.h6
-rw-r--r--indra/newview/llstatusbar.cpp28
-rw-r--r--indra/newview/llsurfacepatch.cpp2
-rw-r--r--indra/newview/lltexturectrl.cpp16
-rw-r--r--indra/newview/lltexturefetch.cpp6
-rw-r--r--indra/newview/lltoast.cpp2
-rw-r--r--indra/newview/lltoastalertpanel.cpp13
-rw-r--r--indra/newview/lltoastalertpanel.h15
-rw-r--r--indra/newview/lltoolfocus.cpp6
-rw-r--r--indra/newview/lltoolgrab.cpp6
-rw-r--r--indra/newview/lltoolpie.cpp28
-rw-r--r--indra/newview/lluilistener.cpp4
-rw-r--r--indra/newview/llurldispatcher.cpp2
-rw-r--r--indra/newview/llurllineeditorctrl.cpp2
-rw-r--r--indra/newview/llurlwhitelist.cpp25
-rw-r--r--indra/newview/llurlwhitelist.h13
-rw-r--r--indra/newview/llvieweraudio.cpp15
-rw-r--r--indra/newview/llviewerdisplay.cpp43
-rw-r--r--indra/newview/llviewerinventory.cpp2
-rw-r--r--indra/newview/llviewermedia.cpp200
-rw-r--r--indra/newview/llviewermedia.h113
-rw-r--r--indra/newview/llviewermediafocus.cpp10
-rw-r--r--indra/newview/llviewermenu.cpp3
-rw-r--r--indra/newview/llviewermessage.cpp38
-rw-r--r--indra/newview/llviewerobject.cpp2
-rw-r--r--indra/newview/llviewerobjectlist.cpp6
-rw-r--r--indra/newview/llviewerparcelmedia.cpp113
-rw-r--r--indra/newview/llviewerparcelmedia.h87
-rw-r--r--indra/newview/llviewerparcelmediaautoplay.cpp25
-rw-r--r--indra/newview/llviewerparcelmediaautoplay.h8
-rw-r--r--indra/newview/llviewerparcelmgr.cpp2
-rw-r--r--indra/newview/llviewertexteditor.cpp2
-rw-r--r--indra/newview/llviewertexture.cpp6
-rw-r--r--indra/newview/llviewerwindow.cpp76
-rw-r--r--indra/newview/llviewerwindow.h2
-rw-r--r--indra/newview/llvoavatar.cpp9
-rw-r--r--indra/newview/llvoavatarself.cpp4
-rw-r--r--indra/newview/llvocache.cpp4
-rw-r--r--indra/newview/llvocache.h9
-rw-r--r--indra/newview/llvoicecallhandler.cpp2
-rw-r--r--indra/newview/llvoiceclient.cpp3
-rw-r--r--indra/newview/llvoiceclient.h7
-rw-r--r--indra/newview/llvoicevivox.cpp14
-rw-r--r--indra/newview/llvovolume.cpp4
-rw-r--r--indra/newview/llweb.cpp29
-rw-r--r--indra/newview/llweb.h2
-rw-r--r--indra/newview/llwebprofile.cpp2
-rw-r--r--indra/newview/llwindowlistener.cpp16
-rw-r--r--indra/newview/llworld.cpp4
-rw-r--r--indra/newview/llworld.h2
-rw-r--r--indra/newview/llworldmapview.cpp2
-rw-r--r--indra/newview/skins/default/xui/de/floater_about_land.xml34
-rw-r--r--indra/newview/skins/default/xui/de/floater_ban_duration.xml19
-rw-r--r--indra/newview/skins/default/xui/de/floater_gesture.xml4
-rw-r--r--indra/newview/skins/default/xui/de/floater_preferences_graphics_advanced.xml1
-rw-r--r--indra/newview/skins/default/xui/de/floater_preview_notecard.xml1
-rw-r--r--indra/newview/skins/default/xui/de/floater_report_abuse.xml2
-rw-r--r--indra/newview/skins/default/xui/de/notifications.xml2
-rw-r--r--indra/newview/skins/default/xui/de/panel_group_general.xml2
-rw-r--r--indra/newview/skins/default/xui/de/panel_region_access.xml5
-rw-r--r--indra/newview/skins/default/xui/de/panel_region_estate.xml2
-rw-r--r--indra/newview/skins/default/xui/de/strings.xml18
-rw-r--r--indra/newview/skins/default/xui/en/notifications.xml18
-rw-r--r--indra/newview/skins/default/xui/en/strings.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_about_land.xml30
-rw-r--r--indra/newview/skins/default/xui/es/floater_ban_duration.xml19
-rw-r--r--indra/newview/skins/default/xui/es/floater_gesture.xml4
-rw-r--r--indra/newview/skins/default/xui/es/floater_preferences_graphics_advanced.xml1
-rw-r--r--indra/newview/skins/default/xui/es/floater_preview_notecard.xml1
-rw-r--r--indra/newview/skins/default/xui/es/notifications.xml2
-rw-r--r--indra/newview/skins/default/xui/es/panel_group_general.xml2
-rw-r--r--indra/newview/skins/default/xui/es/panel_region_access.xml3
-rw-r--r--indra/newview/skins/default/xui/es/strings.xml18
-rw-r--r--indra/newview/skins/default/xui/fr/floater_about_land.xml30
-rw-r--r--indra/newview/skins/default/xui/fr/floater_ban_duration.xml19
-rw-r--r--indra/newview/skins/default/xui/fr/floater_gesture.xml4
-rw-r--r--indra/newview/skins/default/xui/fr/floater_preferences_graphics_advanced.xml1
-rw-r--r--indra/newview/skins/default/xui/fr/floater_preview_notecard.xml1
-rw-r--r--indra/newview/skins/default/xui/fr/notifications.xml8
-rw-r--r--indra/newview/skins/default/xui/fr/panel_group_general.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_region_access.xml5
-rw-r--r--indra/newview/skins/default/xui/fr/strings.xml18
-rw-r--r--indra/newview/skins/default/xui/it/floater_about_land.xml32
-rw-r--r--indra/newview/skins/default/xui/it/floater_ban_duration.xml19
-rw-r--r--indra/newview/skins/default/xui/it/floater_gesture.xml4
-rw-r--r--indra/newview/skins/default/xui/it/floater_preferences_graphics_advanced.xml1
-rw-r--r--indra/newview/skins/default/xui/it/floater_preview_notecard.xml1
-rw-r--r--indra/newview/skins/default/xui/it/floater_report_abuse.xml2
-rw-r--r--indra/newview/skins/default/xui/it/notifications.xml4
-rw-r--r--indra/newview/skins/default/xui/it/panel_group_general.xml2
-rw-r--r--indra/newview/skins/default/xui/it/panel_region_access.xml13
-rw-r--r--indra/newview/skins/default/xui/it/strings.xml18
-rw-r--r--indra/newview/skins/default/xui/ja/floater_about_land.xml32
-rw-r--r--indra/newview/skins/default/xui/ja/floater_ban_duration.xml19
-rw-r--r--indra/newview/skins/default/xui/ja/floater_gesture.xml4
-rw-r--r--indra/newview/skins/default/xui/ja/floater_preferences_graphics_advanced.xml1
-rw-r--r--indra/newview/skins/default/xui/ja/floater_preview_notecard.xml1
-rw-r--r--indra/newview/skins/default/xui/ja/floater_report_abuse.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/panel_group_general.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/panel_region_access.xml3
-rw-r--r--indra/newview/skins/default/xui/ja/strings.xml18
-rw-r--r--indra/newview/skins/default/xui/pt/floater_about_land.xml30
-rw-r--r--indra/newview/skins/default/xui/pt/floater_ban_duration.xml19
-rw-r--r--indra/newview/skins/default/xui/pt/floater_gesture.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/floater_preferences_graphics_advanced.xml1
-rw-r--r--indra/newview/skins/default/xui/pt/floater_preview_notecard.xml1
-rw-r--r--indra/newview/skins/default/xui/pt/floater_report_abuse.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/notifications.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/panel_group_general.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/panel_region_access.xml3
-rw-r--r--indra/newview/skins/default/xui/pt/strings.xml18
-rw-r--r--indra/newview/skins/default/xui/ru/floater_about_land.xml30
-rw-r--r--indra/newview/skins/default/xui/ru/floater_ban_duration.xml19
-rw-r--r--indra/newview/skins/default/xui/ru/floater_gesture.xml4
-rw-r--r--indra/newview/skins/default/xui/ru/floater_preferences_graphics_advanced.xml1
-rw-r--r--indra/newview/skins/default/xui/ru/floater_preview_notecard.xml1
-rw-r--r--indra/newview/skins/default/xui/ru/floater_report_abuse.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/panel_group_general.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/panel_region_access.xml3
-rw-r--r--indra/newview/skins/default/xui/ru/panel_region_estate.xml2
-rw-r--r--indra/newview/skins/default/xui/ru/strings.xml18
-rw-r--r--indra/newview/skins/default/xui/tr/floater_about_land.xml32
-rw-r--r--indra/newview/skins/default/xui/tr/floater_ban_duration.xml19
-rw-r--r--indra/newview/skins/default/xui/tr/floater_gesture.xml4
-rw-r--r--indra/newview/skins/default/xui/tr/floater_preferences_graphics_advanced.xml1
-rw-r--r--indra/newview/skins/default/xui/tr/floater_preview_notecard.xml1
-rw-r--r--indra/newview/skins/default/xui/tr/floater_report_abuse.xml2
-rw-r--r--indra/newview/skins/default/xui/tr/panel_group_general.xml2
-rw-r--r--indra/newview/skins/default/xui/tr/panel_region_access.xml3
-rw-r--r--indra/newview/skins/default/xui/tr/strings.xml18
-rw-r--r--indra/newview/skins/default/xui/zh/floater_about_land.xml30
-rw-r--r--indra/newview/skins/default/xui/zh/floater_ban_duration.xml19
-rw-r--r--indra/newview/skins/default/xui/zh/floater_gesture.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/floater_preferences_graphics_advanced.xml1
-rw-r--r--indra/newview/skins/default/xui/zh/floater_preview_notecard.xml1
-rw-r--r--indra/newview/skins/default/xui/zh/floater_report_abuse.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/panel_group_general.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/panel_region_access.xml3
-rw-r--r--indra/newview/skins/default/xui/zh/strings.xml18
-rw-r--r--indra/newview/tests/llxmlrpclistener_test.cpp24
-rwxr-xr-xindra/newview/viewer_manifest.py90
237 files changed, 1927 insertions, 1419 deletions
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 46fd0f3fd1..694e89ab99 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -1377,8 +1377,12 @@ if (DARWIN)
PROPERTIES
COMPILE_DEFINITIONS "${VIEWER_CHANNEL_VERSION_DEFINES}"
# BugsplatMac is a module, imported with @import. That language feature
- # demands these switches.
- COMPILE_FLAGS "-fmodules -fcxx-modules"
+ # demands these -f switches.
+ # Xcode 10.2 requires that Objective-C++ headers declare nullability of
+ # pointer variables. As of 2019-06-26, the BugsplatMac version we're using
+ # does not yet do so in its own header files. This -W flag prevents fatal
+ # warnings.
+ COMPILE_FLAGS "-fmodules -fcxx-modules -Wno-nullability-completeness"
)
find_library(AGL_LIBRARY AGL)
@@ -2117,7 +2121,7 @@ if (DARWIN)
set(MACOSX_BUNDLE_BUNDLE_VERSION "${VIEWER_SHORT_VERSION}${VIEWER_MACOSX_PHASE}${VIEWER_REVISION}")
set(MACOSX_BUNDLE_COPYRIGHT "Copyright © Linden Research, Inc. 2018")
set(MACOSX_BUNDLE_NSMAIN_NIB_FILE "SecondLife.nib")
- set(MACOSX_BUNDLE_NSPRINCIPAL_CLASS "NSApplication")
+ set(MACOSX_BUNDLE_NSPRINCIPAL_CLASS "LLApplication")
# https://blog.kitware.com/upcoming-in-cmake-2-8-12-osx-rpath-support/
set(CMAKE_MACOSX_RPATH 1)
diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt
index 91e4a9f262..b98d1d3fa7 100644
--- a/indra/newview/VIEWER_VERSION.txt
+++ b/indra/newview/VIEWER_VERSION.txt
@@ -1 +1 @@
-6.3.2
+6.3.5
diff --git a/indra/newview/installers/windows/lang_en-us.nsi b/indra/newview/installers/windows/lang_en-us.nsi
index fd4d340816..ea680f08e4 100644
--- a/indra/newview/installers/windows/lang_en-us.nsi
+++ b/indra/newview/installers/windows/lang_en-us.nsi
Binary files differ
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 8b2d591da5..31b8b90518 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -3710,6 +3710,23 @@ BOOL LLAgent::getHomePosGlobal( LLVector3d* pos_global )
return TRUE;
}
+bool LLAgent::isInHomeRegion()
+{
+ if(!mHaveHomePosition)
+ {
+ return false;
+ }
+ if (!getRegion())
+ {
+ return false;
+ }
+ if (getRegion()->getHandle() != mHomeRegionHandle)
+ {
+ return false;
+ }
+ return true;
+}
+
void LLAgent::clearVisualParams(void *data)
{
if (isAgentAvatarValid())
diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h
index ea6f68c482..5ba1083d8e 100644
--- a/indra/newview/llagent.h
+++ b/indra/newview/llagent.h
@@ -233,6 +233,8 @@ public:
void setStartPosition(U32 location_id); // Marks current location as start, sends information to servers
void setHomePosRegion(const U64& region_handle, const LLVector3& pos_region);
BOOL getHomePosGlobal(LLVector3d* pos_global);
+ bool isInHomeRegion();
+
private:
void setStartPositionSuccess(const LLSD &result);
diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp
index 92a3026096..0b4b848014 100644
--- a/indra/newview/llagentcamera.cpp
+++ b/indra/newview/llagentcamera.cpp
@@ -1140,7 +1140,7 @@ void LLAgentCamera::updateCamera()
mCameraUpVector = mCameraUpVector * gAgentAvatarp->getRenderRotation();
}
- if (cameraThirdPerson() && (mFocusOnAvatar || mAllowChangeToFollow) && LLFollowCamMgr::getActiveFollowCamParams())
+ if (cameraThirdPerson() && (mFocusOnAvatar || mAllowChangeToFollow) && LLFollowCamMgr::getInstance()->getActiveFollowCamParams())
{
mAllowChangeToFollow = FALSE;
mFocusOnAvatar = TRUE;
@@ -1240,7 +1240,7 @@ void LLAgentCamera::updateCamera()
// *TODO: use combined rotation of frameagent and sit object
LLQuaternion avatarRotationForFollowCam = gAgentAvatarp->isSitting() ? gAgentAvatarp->getRenderRotation() : gAgent.getFrameAgent().getQuaternion();
- LLFollowCamParams* current_cam = LLFollowCamMgr::getActiveFollowCamParams();
+ LLFollowCamParams* current_cam = LLFollowCamMgr::getInstance()->getActiveFollowCamParams();
if (current_cam)
{
mFollowCam.copyParams(*current_cam);
@@ -2046,7 +2046,7 @@ void LLAgentCamera::changeCameraToMouselook(BOOL animate)
// Menus should not remain open on switching to mouselook...
LLMenuGL::sMenuContainer->hideMenus();
- LLUI::clearPopups();
+ LLUI::getInstance()->clearPopups();
// unpause avatar animation
gAgent.unpauseAnimation();
@@ -2100,7 +2100,7 @@ void LLAgentCamera::changeCameraToDefault()
return;
}
- if (LLFollowCamMgr::getActiveFollowCamParams())
+ if (LLFollowCamMgr::getInstance()->getActiveFollowCamParams())
{
changeCameraToFollow();
}
diff --git a/indra/newview/llappdelegate-objc.mm b/indra/newview/llappdelegate-objc.mm
index 1d55537427..47fde299c7 100644
--- a/indra/newview/llappdelegate-objc.mm
+++ b/indra/newview/llappdelegate-objc.mm
@@ -342,3 +342,16 @@ struct AttachmentInfo
#endif // LL_BUGSPLAT
@end
+
+@implementation LLApplication
+
+- (void)sendEvent:(NSEvent *)event
+{
+ [super sendEvent:event];
+ if ([event type] == NSKeyUp && ([event modifierFlags] & NSCommandKeyMask))
+ {
+ [[self keyWindow] sendEvent:event];
+ }
+}
+
+@end
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 22bcbad7da..7325ec598a 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -148,7 +148,7 @@ public:
{
// support secondlife:///app/appearance/show, but for now we just
// make all secondlife:///app/appearance SLapps behave this way
- if (!LLUI::sSettingGroups["config"]->getBOOL("EnableAppearance"))
+ if (!LLUI::getInstance()->mSettingGroups["config"]->getBOOL("EnableAppearance"))
{
LLNotificationsUtil::add("NoAppearance", LLSD(), LLSD(), std::string("SwitchToStandardSkinAndQuit"));
return true;
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index be5611899a..ff897ef962 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -100,7 +100,6 @@
#include "llscenemonitor.h"
#include "llavatarrenderinfoaccountant.h"
#include "lllocalbitmaps.h"
-#include "llskinningutil.h"
// Linden library includes
#include "llavatarnamecache.h"
@@ -774,7 +773,7 @@ bool LLAppViewer::init()
// initialize LLWearableType translation bridge.
// Memory will be cleaned up in ::cleanupClass()
- LLWearableType::initClass(new LLUITranslationBridge());
+ LLWearableType::initParamSingleton(new LLUITranslationBridge());
// initialize SSE options
LLVector4a::initClass();
@@ -798,9 +797,6 @@ bool LLAppViewer::init()
LL_INFOS("InitInfo") << "Configuration initialized." << LL_ENDL ;
- // initialize skinning util
- LLSkinningUtil::initClass();
-
//set the max heap size.
initMaxHeapSize() ;
LLCoros::instance().setStackSize(gSavedSettings.getS32("CoroutineStackSize"));
@@ -848,11 +844,10 @@ bool LLAppViewer::init()
settings_map["floater"] = &gSavedSettings; // *TODO: New settings file
settings_map["account"] = &gSavedPerAccountSettings;
- LLUI::initClass(settings_map,
+ LLUI::initParamSingleton(settings_map,
LLUIImageList::getInstance(),
ui_audio_callback,
- deferred_ui_audio_callback,
- &LLUI::getScaleFactor());
+ deferred_ui_audio_callback);
LL_INFOS("InitInfo") << "UI initialized." << LL_ENDL ;
// NOW LLUI::getLanguage() should work. gDirUtilp must know the language
@@ -896,8 +891,6 @@ bool LLAppViewer::init()
// LLKeyboard relies on LLUI to know what some accelerator keys are called.
LLKeyboard::setStringTranslatorFunc( LLTrans::getKeyboardString );
- LLWeb::initClass(); // do this after LLUI
-
// Provide the text fields with callbacks for opening Urls
LLUrlAction::setOpenURLCallback(boost::bind(&LLWeb::loadURL, _1, LLStringUtil::null, LLStringUtil::null));
LLUrlAction::setOpenURLInternalCallback(boost::bind(&LLWeb::loadURLInternal, _1, LLStringUtil::null, LLStringUtil::null, false));
@@ -905,7 +898,7 @@ bool LLAppViewer::init()
LLUrlAction::setExecuteSLURLCallback(&LLURLDispatcher::dispatchFromTextEditor);
// Let code in llui access the viewer help floater
- LLUI::sHelpImpl = LLViewerHelp::getInstance();
+ LLUI::getInstance()->mHelpImpl = LLViewerHelp::getInstance();
LL_INFOS("InitInfo") << "UI initialization is done." << LL_ENDL ;
@@ -1211,9 +1204,6 @@ bool LLAppViewer::init()
<< LL_ENDL;
}
- LLViewerMedia::initClass();
- LL_INFOS("InitInfo") << "Viewer media initialized." << LL_ENDL ;
-
LLTextUtil::TextHelpers::iconCallbackCreationFunction = create_text_segment_icon_from_url_match;
//EXT-7013 - On windows for some locale (Japanese) standard
@@ -1253,7 +1243,7 @@ bool LLAppViewer::init()
// Note: this is where gLocalSpeakerMgr and gActiveSpeakerMgr used to be instantiated.
LLVoiceChannel::initClass();
- LLVoiceClient::getInstance()->init(gServicePump);
+ LLVoiceClient::initParamSingleton(gServicePump);
LLVoiceChannel::setCurrentVoiceChannelChangedCallback(boost::bind(&LLFloaterIMContainer::onCurrentChannelChanged, _1), true);
joystick = LLViewerJoystick::getInstance();
@@ -1750,8 +1740,6 @@ bool LLAppViewer::cleanup()
gTransferManager.cleanup();
#endif
- SUBSYSTEM_CLEANUP(LLLocalBitmapMgr);
-
// Note: this is where gWorldMap used to be deleted.
// Note: this is where gHUDManager used to be deleted.
@@ -1894,12 +1882,9 @@ bool LLAppViewer::cleanup()
//end_messaging_system();
- SUBSYSTEM_CLEANUP(LLFollowCamMgr);
- //SUBSYSTEM_CLEANUP(LLVolumeMgr);
LLPrimitive::cleanupVolumeManager();
SUBSYSTEM_CLEANUP(LLWorldMapView);
SUBSYSTEM_CLEANUP(LLFolderViewItem);
- SUBSYSTEM_CLEANUP(LLUI);
//
// Shut down the VFS's AFTER the decode manager cleans up (since it cleans up vfiles).
@@ -2049,13 +2034,10 @@ bool LLAppViewer::cleanup()
//Note:
//SUBSYSTEM_CLEANUP(LLViewerMedia) has to be put before gTextureList.shutdown()
//because some new image might be generated during cleaning up media. --bao
- SUBSYSTEM_CLEANUP(LLViewerMedia);
- SUBSYSTEM_CLEANUP(LLViewerParcelMedia);
gTextureList.shutdown(); // shutdown again in case a callback added something
LLUIImageList::getInstance()->cleanUp();
// This should eventually be done in LLAppViewer
- SUBSYSTEM_CLEANUP(LLImage);
SUBSYSTEM_CLEANUP(LLVFSThread);
SUBSYSTEM_CLEANUP(LLLFSThread);
@@ -2103,8 +2085,6 @@ bool LLAppViewer::cleanup()
SUBSYSTEM_CLEANUP(LLProxy);
LLCore::LLHttp::cleanup();
- SUBSYSTEM_CLEANUP(LLWearableType);
-
LLMainLoopRepeater::instance().stop();
ll_close_fail_log();
@@ -2163,7 +2143,7 @@ bool LLAppViewer::initThreads()
{
static const bool enable_threads = true;
- LLImage::initClass(gSavedSettings.getBOOL("TextureNewByteRange"),gSavedSettings.getS32("TextureReverseByteRange"));
+ LLImage::initParamSingleton(gSavedSettings.getBOOL("TextureNewByteRange"),gSavedSettings.getS32("TextureReverseByteRange"));
LLVFSThread::initClass(enable_threads && false);
LLLFSThread::initClass(enable_threads && false);
@@ -2882,6 +2862,7 @@ void LLAppViewer::initStrings()
if (strings_path_full.empty() || !LLFile::isfile(strings_path_full))
{
// initial check to make sure files are there failed
+ gDirUtilp->dumpCurrentDirectories(LLError::LEVEL_WARN);
LL_ERRS() << "Viewer failed to find localization and UI files. Please reinstall viewer from https://secondlife.com/support/downloads/ and contact https://support.secondlife.com if issue persists after reinstall." << LL_ENDL;
}
LLTransUtil::parseStrings(strings_file, default_trans_args);
@@ -3046,7 +3027,7 @@ bool LLAppViewer::initWindow()
gViewerWindow->getWindow()->maximize();
}
- LLUI::sWindow = gViewerWindow->getWindow();
+ LLUI::getInstance()->mWindow = gViewerWindow->getWindow();
// Show watch cursor
gViewerWindow->setCursor(UI_CURSOR_WAIT);
@@ -4145,7 +4126,7 @@ bool LLAppViewer::initCache()
mPurgeCache = false;
BOOL read_only = mSecondInstance ? TRUE : FALSE;
LLAppViewer::getTextureCache()->setReadOnly(read_only) ;
- LLVOCache::getInstance()->setReadOnly(read_only);
+ LLVOCache::initParamSingleton(read_only);
bool texture_cache_mismatch = false;
if (gSavedSettings.getS32("LocalCacheVersion") != LLAppViewer::getTextureCacheVersion())
@@ -4217,7 +4198,8 @@ bool LLAppViewer::initCache()
S64 extra = LLAppViewer::getTextureCache()->initCache(LL_PATH_CACHE, texture_cache_size, texture_cache_mismatch);
texture_cache_size -= extra;
- LLVOCache::getInstance()->initCache(LL_PATH_CACHE, gSavedSettings.getU32("CacheNumberOfRegionsForObjects"), getObjectCacheVersion()) ;
+
+ LLVOCache::getInstance()->initCache(LL_PATH_CACHE, gSavedSettings.getU32("CacheNumberOfRegionsForObjects"), getObjectCacheVersion());
LLSplashScreen::update(LLTrans::getString("StartupInitializingVFS"));
@@ -4504,10 +4486,37 @@ void LLAppViewer::saveFinalSnapshot()
std::string snap_filename = gDirUtilp->getLindenUserDir();
snap_filename += gDirUtilp->getDirDelimiter();
- snap_filename += SCREEN_LAST_FILENAME;
+ snap_filename += LLStartUp::getScreenLastFilename();
// use full pixel dimensions of viewer window (not post-scale dimensions)
- gViewerWindow->saveSnapshot(snap_filename, gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw(), FALSE, TRUE);
+ gViewerWindow->saveSnapshot(snap_filename,
+ gViewerWindow->getWindowWidthRaw(),
+ gViewerWindow->getWindowHeightRaw(),
+ FALSE,
+ TRUE,
+ LLSnapshotModel::SNAPSHOT_TYPE_COLOR,
+ LLSnapshotModel::SNAPSHOT_FORMAT_PNG);
mSavedFinalSnapshot = TRUE;
+
+ if (gAgent.isInHomeRegion())
+ {
+ LLVector3d home;
+ if (gAgent.getHomePosGlobal(&home) && dist_vec(home, gAgent.getPositionGlobal()) < 10)
+ {
+ // We are at home position or close to it, see if we need to create home screenshot
+ // Notes:
+ // 1. It might be beneficial to also replace home if file is too old
+ // 2. This is far from best way/place to update screenshot since location might be not fully loaded,
+ // but we don't have many options
+ std::string snap_home = gDirUtilp->getLindenUserDir();
+ snap_home += gDirUtilp->getDirDelimiter();
+ snap_home += LLStartUp::getScreenHomeFilename();
+ if (!gDirUtilp->fileExists(snap_home))
+ {
+ // We are at home position yet no home image exist, fix it
+ LLFile::copy(snap_filename, snap_home);
+ }
+ }
+ }
}
}
@@ -4520,7 +4529,7 @@ void LLAppViewer::loadNameCache()
llifstream name_cache_stream(filename.c_str());
if(name_cache_stream.is_open())
{
- if ( ! LLAvatarNameCache::importFile(name_cache_stream))
+ if ( ! LLAvatarNameCache::getInstance()->importFile(name_cache_stream))
{
LL_WARNS("AppInit") << "removing invalid '" << filename << "'" << LL_ENDL;
name_cache_stream.close();
@@ -4547,7 +4556,7 @@ void LLAppViewer::saveNameCache()
llofstream name_cache_stream(filename.c_str());
if(name_cache_stream.is_open())
{
- LLAvatarNameCache::exportFile(name_cache_stream);
+ LLAvatarNameCache::getInstance()->exportFile(name_cache_stream);
}
// real names cache
@@ -5154,7 +5163,8 @@ void LLAppViewer::idleNameCache()
// granted to neighbor regions before the main agent gets there. Can't
// do it in the move-into-region code because cap not guaranteed to be
// granted yet, for example on teleport.
- bool had_capability = LLAvatarNameCache::hasNameLookupURL();
+ LLAvatarNameCache *name_cache = LLAvatarNameCache::getInstance();
+ bool had_capability = LLAvatarNameCache::getInstance()->hasNameLookupURL();
std::string name_lookup_url;
name_lookup_url.reserve(128); // avoid a memory allocation below
name_lookup_url = region->getCapability("GetDisplayNames");
@@ -5171,12 +5181,12 @@ void LLAppViewer::idleNameCache()
{
name_lookup_url += '/';
}
- LLAvatarNameCache::setNameLookupURL(name_lookup_url);
+ name_cache->setNameLookupURL(name_lookup_url);
}
else
{
// Display names not available on this region
- LLAvatarNameCache::setNameLookupURL( std::string() );
+ name_cache->setNameLookupURL( std::string() );
}
// Error recovery - did we change state?
@@ -5186,7 +5196,7 @@ void LLAppViewer::idleNameCache()
LLVOAvatar::invalidateNameTags();
}
- LLAvatarNameCache::idle();
+ name_cache->idle();
}
//
diff --git a/indra/newview/llappviewerwin32.cpp b/indra/newview/llappviewerwin32.cpp
index fff2653c98..d208e135bb 100644
--- a/indra/newview/llappviewerwin32.cpp
+++ b/indra/newview/llappviewerwin32.cpp
@@ -312,12 +312,12 @@ void ll_nvapi_init(NvDRSSessionHandle hSession)
#if DEBUGGING_SEH_FILTER
# define WINMAIN DebuggingWinMain
#else
-# define WINMAIN WinMain
+# define WINMAIN wWinMain
#endif
int APIENTRY WINMAIN(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
- LPSTR lpCmdLine,
+ PWSTR pCmdLine,
int nCmdShow)
{
const S32 MAX_HEAPS = 255;
@@ -356,8 +356,8 @@ int APIENTRY WINMAIN(HINSTANCE hInstance,
// *FIX: global
gIconResource = MAKEINTRESOURCE(IDI_LL_ICON);
- LLAppViewerWin32* viewer_app_ptr = new LLAppViewerWin32(lpCmdLine);
-
+ LLAppViewerWin32* viewer_app_ptr = new LLAppViewerWin32(ll_convert_wide_to_string(pCmdLine).c_str());
+
gOldTerminateHandler = std::set_terminate(exceptionTerminateHandler);
viewer_app_ptr->setErrorHandler(LLAppViewer::handleViewerCrash);
@@ -469,9 +469,9 @@ int APIENTRY WINMAIN(HINSTANCE hInstance,
// in a method that uses object destructors. Go figure.
// This winmain just calls the real winmain inside __try.
// The __except calls our exception filter function. For debugging purposes.
-int APIENTRY WinMain(HINSTANCE hInstance,
+int APIENTRY wWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
- LPSTR lpCmdLine,
+ PWSTR lpCmdLine,
int nCmdShow)
{
__try
diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp
index 513f25e301..b0715a3afd 100644
--- a/indra/newview/llavatarlist.cpp
+++ b/indra/newview/llavatarlist.cpp
@@ -154,7 +154,7 @@ LLAvatarList::LLAvatarList(const Params& p)
mLITUpdateTimer->start();
}
- LLAvatarNameCache::addUseDisplayNamesCallback(boost::bind(&LLAvatarList::handleDisplayNamesOptionChanged, this));
+ LLAvatarNameCache::getInstance()->addUseDisplayNamesCallback(boost::bind(&LLAvatarList::handleDisplayNamesOptionChanged, this));
}
diff --git a/indra/newview/llbrowsernotification.cpp b/indra/newview/llbrowsernotification.cpp
index 19747757db..0460bff1b4 100644
--- a/indra/newview/llbrowsernotification.cpp
+++ b/indra/newview/llbrowsernotification.cpp
@@ -50,7 +50,7 @@ bool LLBrowserNotification::processNotification(const LLNotificationPtr& notific
}
else if (LLViewerMediaFocus::instance().getControlsMediaID() == media_id)
{
- LLViewerMediaImpl* impl = LLViewerMedia::getMediaImplFromTextureID(media_id);
+ LLViewerMediaImpl* impl = LLViewerMedia::getInstance()->getMediaImplFromTextureID(media_id);
if (impl)
{
impl->showNotification(notification);
diff --git a/indra/newview/llchannelmanager.cpp b/indra/newview/llchannelmanager.cpp
index d6240838b6..0b7b9cbbc7 100644
--- a/indra/newview/llchannelmanager.cpp
+++ b/indra/newview/llchannelmanager.cpp
@@ -58,15 +58,22 @@ LLChannelManager::LLChannelManager()
//--------------------------------------------------------------------------
LLChannelManager::~LLChannelManager()
{
- for(std::vector<ChannelElem>::iterator it = mChannelList.begin(); it != mChannelList.end(); ++it)
- {
- LLScreenChannelBase* channel = it->channel.get();
- if (!channel) continue;
+}
- delete channel;
- }
+//--------------------------------------------------------------------------
+void LLChannelManager::cleanupSingleton()
+{
+ // Note: LLScreenChannelBase is a LLUICtrl and depends onto other singletions
+ // not captured by singleton-dependency, so cleanup it here instead of destructor
+ for (std::vector<ChannelElem>::iterator it = mChannelList.begin(); it != mChannelList.end(); ++it)
+ {
+ LLScreenChannelBase* channel = it->channel.get();
+ if (!channel) continue;
- mChannelList.clear();
+ delete channel;
+ }
+
+ mChannelList.clear();
}
//--------------------------------------------------------------------------
diff --git a/indra/newview/llchannelmanager.h b/indra/newview/llchannelmanager.h
index 8b9d0dda8b..8abe350196 100644
--- a/indra/newview/llchannelmanager.h
+++ b/indra/newview/llchannelmanager.h
@@ -46,6 +46,7 @@ class LLChannelManager : public LLSingleton<LLChannelManager>
LLSINGLETON(LLChannelManager);
virtual ~LLChannelManager();
+ void cleanupSingleton();
public:
diff --git a/indra/newview/llcofwearables.cpp b/indra/newview/llcofwearables.cpp
index b47e0930a3..1caefd58ab 100644
--- a/indra/newview/llcofwearables.cpp
+++ b/indra/newview/llcofwearables.cpp
@@ -502,13 +502,14 @@ void LLCOFWearables::populateAttachmentsAndBodypartsLists(const LLInventoryModel
{
mAttachments->sort();
mAttachments->notify(REARRANGE); //notifying the parent about the list's size change (cause items were added with rearrange=false)
- setAttachmentsTitle();
}
else
{
mAttachments->setNoItemsCommentText(LLTrans::getString("no_attachments"));
}
+ setAttachmentsTitle();
+
if (mBodyParts->size())
{
mBodyParts->sort();
diff --git a/indra/newview/llcontrolavatar.cpp b/indra/newview/llcontrolavatar.cpp
index d24dac385f..92eeebd705 100644
--- a/indra/newview/llcontrolavatar.cpp
+++ b/indra/newview/llcontrolavatar.cpp
@@ -327,10 +327,13 @@ LLControlAvatar *LLControlAvatar::createControlAvatar(LLVOVolume *obj)
{
LLControlAvatar *cav = (LLControlAvatar*)gObjectList.createObjectViewer(LL_PCODE_LEGACY_AVATAR, gAgent.getRegion(), CO_FLAG_CONTROL_AVATAR);
- cav->mRootVolp = obj;
+ if (cav)
+ {
+ cav->mRootVolp = obj;
- // Sync up position/rotation with object
- cav->matchVolumeTransform();
+ // Sync up position/rotation with object
+ cav->matchVolumeTransform();
+ }
return cav;
}
diff --git a/indra/newview/llconversationlog.cpp b/indra/newview/llconversationlog.cpp
index 9ccf9b98f7..f7c61efce0 100644
--- a/indra/newview/llconversationlog.cpp
+++ b/indra/newview/llconversationlog.cpp
@@ -189,16 +189,6 @@ LLConversationLog::LLConversationLog() :
mAvatarNameCacheConnection(),
mLoggingEnabled(false)
{
- if(gSavedPerAccountSettings.controlExists("KeepConversationLogTranscripts"))
- {
- LLControlVariable * keep_log_ctrlp = gSavedPerAccountSettings.getControl("KeepConversationLogTranscripts").get();
- S32 log_mode = keep_log_ctrlp->getValue();
- keep_log_ctrlp->getSignal()->connect(boost::bind(&LLConversationLog::enableLogging, this, _2));
- if (log_mode > 0)
- {
- enableLogging(log_mode);
- }
- }
}
void LLConversationLog::enableLogging(S32 log_mode)
@@ -443,6 +433,20 @@ bool LLConversationLog::moveLog(const std::string &originDirectory, const std::s
return true;
}
+void LLConversationLog::initLoggingState()
+{
+ if (gSavedPerAccountSettings.controlExists("KeepConversationLogTranscripts"))
+ {
+ LLControlVariable * keep_log_ctrlp = gSavedPerAccountSettings.getControl("KeepConversationLogTranscripts").get();
+ S32 log_mode = keep_log_ctrlp->getValue();
+ keep_log_ctrlp->getSignal()->connect(boost::bind(&LLConversationLog::enableLogging, this, _2));
+ if (log_mode > 0)
+ {
+ enableLogging(log_mode);
+ }
+ }
+}
+
std::string LLConversationLog::getFileName()
{
std::string filename = "conversation";
diff --git a/indra/newview/llconversationlog.h b/indra/newview/llconversationlog.h
index 035cbcb945..46e46a3278 100644
--- a/indra/newview/llconversationlog.h
+++ b/indra/newview/llconversationlog.h
@@ -111,7 +111,6 @@ class LLConversationLog : public LLSingleton<LLConversationLog>, LLIMSessionObse
{
LLSINGLETON(LLConversationLog);
public:
-
void removeConversation(const LLConversation& conversation);
/**
@@ -149,6 +148,12 @@ public:
bool isLogEmpty() { return mConversations.empty(); }
/**
+ * inits connection to per account settings,
+ * loads saved file and inits enabled state
+ */
+ void initLoggingState();
+
+ /**
* constructs file name in which conversations log will be saved
* file name is conversation.log
*/
diff --git a/indra/newview/lldonotdisturbnotificationstorage.cpp b/indra/newview/lldonotdisturbnotificationstorage.cpp
index 7d2712eec7..cb5f9c8a2c 100644
--- a/indra/newview/lldonotdisturbnotificationstorage.cpp
+++ b/indra/newview/lldonotdisturbnotificationstorage.cpp
@@ -48,7 +48,6 @@ const char * LLDoNotDisturbNotificationStorage::offerName = "UserGiveItem";
LLDoNotDisturbNotificationStorageTimer::LLDoNotDisturbNotificationStorageTimer() : LLEventTimer(DND_TIMER)
{
-
}
LLDoNotDisturbNotificationStorageTimer::~LLDoNotDisturbNotificationStorageTimer()
@@ -74,6 +73,7 @@ LLDoNotDisturbNotificationStorage::LLDoNotDisturbNotificationStorage()
{
nameToPayloadParameterMap[toastName] = "SESSION_ID";
nameToPayloadParameterMap[offerName] = "object_id";
+ initialize();
}
LLDoNotDisturbNotificationStorage::~LLDoNotDisturbNotificationStorage()
diff --git a/indra/newview/lldonotdisturbnotificationstorage.h b/indra/newview/lldonotdisturbnotificationstorage.h
index e6cb7835e3..c6f0bf1ab5 100644
--- a/indra/newview/lldonotdisturbnotificationstorage.h
+++ b/indra/newview/lldonotdisturbnotificationstorage.h
@@ -45,7 +45,7 @@ public:
BOOL tick();
};
-class LLDoNotDisturbNotificationStorage : public LLSingleton<LLDoNotDisturbNotificationStorage>, public LLNotificationStorage
+class LLDoNotDisturbNotificationStorage : public LLParamSingleton<LLDoNotDisturbNotificationStorage>, public LLNotificationStorage
{
LLSINGLETON(LLDoNotDisturbNotificationStorage);
~LLDoNotDisturbNotificationStorage();
@@ -55,7 +55,6 @@ public:
static const char * toastName;
static const char * offerName;
- void initialize();
bool getDirty();
void resetDirty();
void saveNotifications();
@@ -66,6 +65,8 @@ public:
protected:
private:
+ void initialize();
+
bool mDirty;
LLDoNotDisturbNotificationStorageTimer mTimer;
diff --git a/indra/newview/llexpandabletextbox.cpp b/indra/newview/llexpandabletextbox.cpp
index d657f04457..3395777aab 100644
--- a/indra/newview/llexpandabletextbox.cpp
+++ b/indra/newview/llexpandabletextbox.cpp
@@ -97,7 +97,7 @@ public:
/*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask) { mEditor.onCommit(); return TRUE; }
/*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask)
{
- LLUI::getWindow()->setCursor(UI_CURSOR_HAND);
+ LLUI::getInstance()->getWindow()->setCursor(UI_CURSOR_HAND);
return TRUE;
}
private:
diff --git a/indra/newview/llexternaleditor.cpp b/indra/newview/llexternaleditor.cpp
index 776bbf78c2..b66eb754a4 100644
--- a/indra/newview/llexternaleditor.cpp
+++ b/indra/newview/llexternaleditor.cpp
@@ -184,9 +184,9 @@ std::string LLExternalEditor::findCommand(
cmd = override;
LL_INFOS() << "Using override" << LL_ENDL;
}
- else if (!LLUI::sSettingGroups["config"]->getString(sSetting).empty())
+ else if (!LLUI::getInstance()->mSettingGroups["config"]->getString(sSetting).empty())
{
- cmd = LLUI::sSettingGroups["config"]->getString(sSetting);
+ cmd = LLUI::getInstance()->mSettingGroups["config"]->getString(sSetting);
LL_INFOS() << "Using setting" << LL_ENDL;
}
else // otherwise use the path specified by the environment variable
diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp
index 912bde9986..1587903a15 100644
--- a/indra/newview/llface.cpp
+++ b/indra/newview/llface.cpp
@@ -228,12 +228,6 @@ void LLFace::destroy()
mVObjp = NULL;
}
-
-// static
-void LLFace::initClass()
-{
-}
-
void LLFace::setWorldMatrix(const LLMatrix4 &mat)
{
LL_ERRS() << "Faces on this drawable are not independently modifiable\n" << LL_ENDL;
diff --git a/indra/newview/llface.h b/indra/newview/llface.h
index a08e730e54..77861f7d2f 100644
--- a/indra/newview/llface.h
+++ b/indra/newview/llface.h
@@ -80,8 +80,6 @@ public:
PARTICLE = 0x0080,
};
- static void initClass();
-
static void cacheFaceInVRAM(const LLVolumeFace& vf);
public:
diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp
index 8d07035b97..aa9cba0c18 100644
--- a/indra/newview/llfeaturemanager.cpp
+++ b/indra/newview/llfeaturemanager.cpp
@@ -522,7 +522,7 @@ void LLFeatureManager::cleanupFeatureTables()
mMaskList.clear();
}
-void LLFeatureManager::init()
+void LLFeatureManager::initSingleton()
{
// load the tables
loadFeatureTables();
diff --git a/indra/newview/llfeaturemanager.h b/indra/newview/llfeaturemanager.h
index f77861a1a7..42a226cd18 100644
--- a/indra/newview/llfeaturemanager.h
+++ b/indra/newview/llfeaturemanager.h
@@ -100,9 +100,10 @@ class LLFeatureManager : public LLFeatureList, public LLSingleton<LLFeatureManag
LLSINGLETON(LLFeatureManager);
~LLFeatureManager() {cleanupFeatureTables();}
-public:
// initialize this by loading feature table and gpu table
- void init();
+ void initSingleton();
+
+public:
void maskCurrentList(const std::string& name); // Mask the current feature list with the named list
diff --git a/indra/newview/llfirstuse.cpp b/indra/newview/llfirstuse.cpp
index 2e1afc68b4..1ce9fe3a7a 100644
--- a/indra/newview/llfirstuse.cpp
+++ b/indra/newview/llfirstuse.cpp
@@ -41,37 +41,6 @@
// static
-std::set<std::string> LLFirstUse::sConfigVariables;
-
-// static
-void LLFirstUse::addConfigVariable(const std::string& var)
-{
- sConfigVariables.insert(var);
-}
-
-// static
-void LLFirstUse::disableFirstUse()
-{
- // Set all first-use warnings to disabled
- for (std::set<std::string>::iterator iter = sConfigVariables.begin();
- iter != sConfigVariables.end(); ++iter)
- {
- gWarningSettings.setBOOL(*iter, FALSE);
- }
-}
-
-// static
-void LLFirstUse::resetFirstUse()
-{
- // Set all first-use warnings to disabled
- for (std::set<std::string>::iterator iter = sConfigVariables.begin();
- iter != sConfigVariables.end(); ++iter)
- {
- gWarningSettings.setBOOL(*iter, TRUE);
- }
-}
-
-// static
void LLFirstUse::otherAvatarChatFirst(bool enable)
{
firstUseNotification("FirstOtherChatBeforeUser", enable, "HintChat", LLSD(), LLSD().with("target", "nearby_chat").with("direction", "top_right").with("distance", 24));
diff --git a/indra/newview/llfirstuse.h b/indra/newview/llfirstuse.h
index 4c8c9d3cde..80b83580b3 100644
--- a/indra/newview/llfirstuse.h
+++ b/indra/newview/llfirstuse.h
@@ -78,14 +78,6 @@ class LLNotification;
class LLFirstUse
{
public:
-
- // Add a config variable to be reset on resetFirstUse()
- static void addConfigVariable(const std::string& var);
-
- // Sets all controls back to show the dialogs.
- static void disableFirstUse();
- static void resetFirstUse();
-
static void otherAvatarChatFirst(bool enable = true);
static void speak(bool enable = true);
static void sit(bool enable = true);
@@ -100,7 +92,6 @@ public:
protected:
static void firstUseNotification(const std::string& control_var, bool enable, const std::string& notification_name, LLSD args = LLSD(), LLSD payload = LLSD());
- static std::set<std::string> sConfigVariables;
static void init();
static bool processNotification(const LLSD& notify);
diff --git a/indra/newview/llfloaterbvhpreview.cpp b/indra/newview/llfloaterbvhpreview.cpp
index 080d0ed8ea..ee7e6f8562 100644
--- a/indra/newview/llfloaterbvhpreview.cpp
+++ b/indra/newview/llfloaterbvhpreview.cpp
@@ -527,7 +527,7 @@ BOOL LLFloaterBvhPreview::handleHover(S32 x, S32 y, MASK mask)
mAnimPreview->requestUpdate();
- LLUI::setMousePositionLocal(this, mLastMouseX, mLastMouseY);
+ LLUI::getInstance()->setMousePositionLocal(this, mLastMouseX, mLastMouseY);
}
if (!mPreviewRect.pointInRect(x, y) || !mAnimPreview)
diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp
index 20d650fa37..f3406d93bb 100644
--- a/indra/newview/llfloatercamera.cpp
+++ b/indra/newview/llfloatercamera.cpp
@@ -351,7 +351,7 @@ LLFloaterCamera::LLFloaterCamera(const LLSD& val)
mCurrMode(CAMERA_CTRL_MODE_PAN),
mPrevMode(CAMERA_CTRL_MODE_PAN)
{
- LLHints::registerHintTarget("view_popup", getHandle());
+ LLHints::getInstance()->registerHintTarget("view_popup", getHandle());
mCommitCallbackRegistrar.add("CameraPresets.ChangeView", boost::bind(&LLFloaterCamera::onClickCameraItem, _2));
}
diff --git a/indra/newview/llfloaterchatvoicevolume.cpp b/indra/newview/llfloaterchatvoicevolume.cpp
index 3c76a3a43c..45aea00a49 100644
--- a/indra/newview/llfloaterchatvoicevolume.cpp
+++ b/indra/newview/llfloaterchatvoicevolume.cpp
@@ -35,7 +35,7 @@ LLFloaterChatVoiceVolume::LLFloaterChatVoiceVolume(const LLSD& key)
void LLFloaterChatVoiceVolume::onOpen(const LLSD& key)
{
LLInspect::onOpen(key);
- LLUI::positionViewNearMouse(this);
+ LLUI::getInstance()->positionViewNearMouse(this);
}
LLFloaterChatVoiceVolume::~LLFloaterChatVoiceVolume()
diff --git a/indra/newview/llfloaterconversationpreview.cpp b/indra/newview/llfloaterconversationpreview.cpp
index 66198b3bf6..55561fa128 100644
--- a/indra/newview/llfloaterconversationpreview.cpp
+++ b/indra/newview/llfloaterconversationpreview.cpp
@@ -111,7 +111,7 @@ void LLFloaterConversationPreview::setPages(std::list<LLSD>* messages, const std
getChild<LLTextBox>("page_num_label")->setValue(total_page_num);
mShowHistory = true;
}
- LLLoadHistoryThread* loadThread = LLLogChat::getLoadHistoryThread(mSessionID);
+ LLLoadHistoryThread* loadThread = LLLogChat::getInstance()->getLoadHistoryThread(mSessionID);
if (loadThread)
{
loadThread->removeLoadEndSignal(boost::bind(&LLFloaterConversationPreview::setPages, this, _1, _2));
@@ -135,7 +135,7 @@ void LLFloaterConversationPreview::onOpen(const LLSD& key)
return;
}
mOpened = true;
- if (!LLLogChat::historyThreadsFinished(mSessionID))
+ if (!LLLogChat::getInstance()->historyThreadsFinished(mSessionID))
{
LLNotificationsUtil::add("ChatHistoryIsBusyAlert");
mHistoryThreadsBusy = true;
@@ -165,15 +165,16 @@ void LLFloaterConversationPreview::onOpen(const LLSD& key)
// LLDeleteHistoryThread is started in destructor
std::list<LLSD>* messages = new std::list<LLSD>();
- LLLogChat::cleanupHistoryThreads();
+ LLLogChat *log_chat_inst = LLLogChat::getInstance();
+ log_chat_inst->cleanupHistoryThreads();
LLLoadHistoryThread* loadThread = new LLLoadHistoryThread(mChatHistoryFileName, messages, load_params);
loadThread->setLoadEndSignal(boost::bind(&LLFloaterConversationPreview::setPages, this, _1, _2));
loadThread->start();
- LLLogChat::addLoadHistoryThread(mSessionID, loadThread);
+ log_chat_inst->addLoadHistoryThread(mSessionID, loadThread);
LLDeleteHistoryThread* deleteThread = new LLDeleteHistoryThread(messages, loadThread);
- LLLogChat::addDeleteHistoryThread(mSessionID, deleteThread);
+ log_chat_inst->addDeleteHistoryThread(mSessionID, deleteThread);
mShowHistory = true;
}
@@ -183,7 +184,7 @@ void LLFloaterConversationPreview::onClose(bool app_quitting)
mOpened = false;
if (!mHistoryThreadsBusy)
{
- LLDeleteHistoryThread* deleteThread = LLLogChat::getDeleteHistoryThread(mSessionID);
+ LLDeleteHistoryThread* deleteThread = LLLogChat::getInstance()->getDeleteHistoryThread(mSessionID);
if (deleteThread)
{
deleteThread->start();
@@ -221,7 +222,7 @@ void LLFloaterConversationPreview::showHistory()
else
{
std::string legacy_name = gCacheName->buildLegacyName(from);
- from_id = LLAvatarNameCache::findIdByName(legacy_name);
+ from_id = LLAvatarNameCache::getInstance()->findIdByName(legacy_name);
}
LLChat chat;
diff --git a/indra/newview/llfloaterimagepreview.cpp b/indra/newview/llfloaterimagepreview.cpp
index 3c428a70f3..d4b0fa85ab 100644
--- a/indra/newview/llfloaterimagepreview.cpp
+++ b/indra/newview/llfloaterimagepreview.cpp
@@ -503,7 +503,7 @@ BOOL LLFloaterImagePreview::handleHover(S32 x, S32 y, MASK mask)
mSculptedPreview->refresh();
}
- LLUI::setMousePositionLocal(this, mLastMouseX, mLastMouseY);
+ LLUI::getInstance()->setMousePositionLocal(this, mLastMouseX, mLastMouseY);
}
if (!mPreviewRect.pointInRect(x, y) || !mAvatarPreview || !mSculptedPreview)
diff --git a/indra/newview/llfloaterimcontainer.cpp b/indra/newview/llfloaterimcontainer.cpp
index 30d05ae287..21420b122b 100644
--- a/indra/newview/llfloaterimcontainer.cpp
+++ b/indra/newview/llfloaterimcontainer.cpp
@@ -237,7 +237,7 @@ BOOL LLFloaterIMContainer::postBuild()
collapseMessagesPane(gSavedPerAccountSettings.getBOOL("ConversationsMessagePaneCollapsed"));
collapseConversationsPane(gSavedPerAccountSettings.getBOOL("ConversationsListPaneCollapsed"), false);
- LLAvatarNameCache::addUseDisplayNamesCallback(boost::bind(&LLFloaterIMSessionTab::processChatHistoryStyleUpdate, false));
+ LLAvatarNameCache::getInstance()->addUseDisplayNamesCallback(boost::bind(&LLFloaterIMSessionTab::processChatHistoryStyleUpdate, false));
mMicroChangedSignal = LLVoiceClient::getInstance()->MicroChangedCallback(boost::bind(&LLFloaterIMContainer::updateSpeakBtnState, this));
if (! mMessagesPane->isCollapsed() && ! mConversationsPane->isCollapsed())
@@ -267,7 +267,7 @@ BOOL LLFloaterIMContainer::postBuild()
// We'll take care of view updates on idle
gIdleCallbacks.addFunction(idle, this);
// When display name option change, we need to reload all participant names
- LLAvatarNameCache::addUseDisplayNamesCallback(boost::bind(&LLFloaterIMContainer::processParticipantsStyleUpdate, this));
+ LLAvatarNameCache::getInstance()->addUseDisplayNamesCallback(boost::bind(&LLFloaterIMContainer::processParticipantsStyleUpdate, this));
mParticipantRefreshTimer.setTimerExpirySec(0);
mParticipantRefreshTimer.start();
diff --git a/indra/newview/llfloaterimnearbychat.cpp b/indra/newview/llfloaterimnearbychat.cpp
index f9efd13608..a6531ed7e1 100644
--- a/indra/newview/llfloaterimnearbychat.cpp
+++ b/indra/newview/llfloaterimnearbychat.cpp
@@ -228,7 +228,7 @@ void LLFloaterIMNearbyChat::loadHistory()
else
{
std::string legacy_name = gCacheName->buildLegacyName(from);
- from_id = LLAvatarNameCache::findIdByName(legacy_name);
+ from_id = LLAvatarNameCache::getInstance()->findIdByName(legacy_name);
}
LLChat chat;
diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp
index 9c2ddfb68d..e1665dc255 100644
--- a/indra/newview/llfloatermodelpreview.cpp
+++ b/indra/newview/llfloatermodelpreview.cpp
@@ -896,7 +896,7 @@ BOOL LLFloaterModelPreview::handleHover (S32 x, S32 y, MASK mask)
mModelPreview->refresh();
- LLUI::setMousePositionLocal(this, mLastMouseX, mLastMouseY);
+ LLUI::getInstance()->setMousePositionLocal(this, mLastMouseX, mLastMouseY);
}
if (!mPreviewRect.pointInRect(x, y) || !mModelPreview)
diff --git a/indra/newview/llfloatermyscripts.cpp b/indra/newview/llfloatermyscripts.cpp
index fa2de21a8f..6f9a6c9066 100644
--- a/indra/newview/llfloatermyscripts.cpp
+++ b/indra/newview/llfloatermyscripts.cpp
@@ -41,6 +41,7 @@ const S32 SIZE_OF_ONE_KB = 1024;
LLFloaterMyScripts::LLFloaterMyScripts(const LLSD& seed)
: LLFloater(seed),
mGotAttachmentMemoryUsed(false),
+ mAttachmentDetailsRequested(false),
mAttachmentMemoryMax(0),
mAttachmentMemoryUsed(0),
mGotAttachmentURLsUsed(false),
@@ -55,12 +56,24 @@ BOOL LLFloaterMyScripts::postBuild()
std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestWaiting");
getChild<LLUICtrl>("loading_text")->setValue(LLSD(msg_waiting));
- return requestAttachmentDetails();
+ mAttachmentDetailsRequested = requestAttachmentDetails();
+ return TRUE;
}
-BOOL LLFloaterMyScripts::requestAttachmentDetails()
+// virtual
+void LLFloaterMyScripts::onOpen(const LLSD& key)
{
- if (!gAgent.getRegion()) return FALSE;
+ if (!mAttachmentDetailsRequested)
+ {
+ mAttachmentDetailsRequested = requestAttachmentDetails();
+ }
+
+ LLFloater::onOpen(key);
+}
+
+bool LLFloaterMyScripts::requestAttachmentDetails()
+{
+ if (!gAgent.getRegion()) return false;
LLSD body;
std::string url = gAgent.getRegion()->getCapability("AttachmentResources");
@@ -68,11 +81,11 @@ BOOL LLFloaterMyScripts::requestAttachmentDetails()
{
LLCoros::instance().launch("LLFloaterMyScripts::getAttachmentLimitsCoro",
boost::bind(&LLFloaterMyScripts::getAttachmentLimitsCoro, this, url));
- return TRUE;
+ return true;
}
else
{
- return FALSE;
+ return false;
}
}
@@ -284,7 +297,7 @@ void LLFloaterMyScripts::onClickRefresh(void* userdata)
btn->setEnabled(false);
}
instance->clearList();
- instance->requestAttachmentDetails();
+ instance->mAttachmentDetailsRequested = instance->requestAttachmentDetails();
}
else
{
diff --git a/indra/newview/llfloatermyscripts.h b/indra/newview/llfloatermyscripts.h
index fe33ab90ae..3c053a0223 100644
--- a/indra/newview/llfloatermyscripts.h
+++ b/indra/newview/llfloatermyscripts.h
@@ -36,15 +36,17 @@ public:
LLFloaterMyScripts(const LLSD& seed);
BOOL postBuild();
+ /*virtual*/ void onOpen(const LLSD& key);
void setAttachmentDetails(LLSD content);
void setAttachmentSummary(LLSD content);
- BOOL requestAttachmentDetails();
+ bool requestAttachmentDetails();
void clearList();
private:
void getAttachmentLimitsCoro(std::string url);
bool mGotAttachmentMemoryUsed;
+ bool mAttachmentDetailsRequested;
S32 mAttachmentMemoryMax;
S32 mAttachmentMemoryUsed;
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 64961fc99c..fe347a91a3 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -254,8 +254,8 @@ bool callback_clear_browser_cache(const LLSD& notification, const LLSD& response
if ( option == 0 ) // YES
{
// clean web
- LLViewerMedia::clearAllCaches();
- LLViewerMedia::clearAllCookies();
+ LLViewerMedia::getInstance()->clearAllCaches();
+ LLViewerMedia::getInstance()->clearAllCookies();
// clean nav bar history
LLNavigationBar::getInstance()->clearHistoryCache();
@@ -278,13 +278,13 @@ bool callback_clear_browser_cache(const LLSD& notification, const LLSD& response
void handleNameTagOptionChanged(const LLSD& newvalue)
{
- LLAvatarNameCache::setUseUsernames(gSavedSettings.getBOOL("NameTagShowUsernames"));
+ LLAvatarNameCache::getInstance()->setUseUsernames(gSavedSettings.getBOOL("NameTagShowUsernames"));
LLVOAvatar::invalidateNameTags();
}
void handleDisplayNamesOptionChanged(const LLSD& newvalue)
{
- LLAvatarNameCache::setUseDisplayNames(newvalue.asBoolean());
+ LLAvatarNameCache::getInstance()->setUseDisplayNames(newvalue.asBoolean());
LLVOAvatar::invalidateNameTags();
}
@@ -523,7 +523,7 @@ BOOL LLFloaterPreference::postBuild()
// set 'enable' property for 'Clear log...' button
changed();
- LLLogChat::setSaveHistorySignal(boost::bind(&LLFloaterPreference::onLogChatHistorySaved, this));
+ LLLogChat::getInstance()->setSaveHistorySignal(boost::bind(&LLFloaterPreference::onLogChatHistorySaved, this));
LLSliderCtrl* fov_slider = getChild<LLSliderCtrl>("camera_fov");
fov_slider->setMinValue(LLViewerCamera::getInstance()->getMinView());
@@ -635,14 +635,14 @@ void LLFloaterPreference::apply()
std::string cache_location = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "");
setCacheLocation(cache_location);
- LLViewerMedia::setCookiesEnabled(getChild<LLUICtrl>("cookies_enabled")->getValue());
+ LLViewerMedia::getInstance()->setCookiesEnabled(getChild<LLUICtrl>("cookies_enabled")->getValue());
if (hasChild("web_proxy_enabled", TRUE) &&hasChild("web_proxy_editor", TRUE) && hasChild("web_proxy_port", TRUE))
{
bool proxy_enable = getChild<LLUICtrl>("web_proxy_enabled")->getValue();
std::string proxy_address = getChild<LLUICtrl>("web_proxy_editor")->getValue();
int proxy_port = getChild<LLUICtrl>("web_proxy_port")->getValue();
- LLViewerMedia::setProxyConfig(proxy_enable, proxy_address, proxy_port);
+ LLViewerMedia::getInstance()->setProxyConfig(proxy_enable, proxy_address, proxy_port);
}
if (mGotPersonalInfo)
@@ -1234,7 +1234,7 @@ void LLFloaterPreference::buildPopupLists()
{
if (ignore == LLNotificationForm::IGNORE_WITH_LAST_RESPONSE)
{
- LLSD last_response = LLUI::sSettingGroups["config"]->getLLSD("Default" + templatep->mName);
+ LLSD last_response = LLUI::getInstance()->mSettingGroups["config"]->getLLSD("Default" + templatep->mName);
if (!last_response.isUndefined())
{
for (LLSD::map_const_iterator it = last_response.beginMap();
@@ -1739,7 +1739,7 @@ void LLFloaterPreference::onClickEnablePopup()
LLNotificationTemplatePtr templatep = LLNotifications::instance().getTemplate(*(std::string*)((*itor)->getUserdata()));
//gSavedSettings.setWarning(templatep->mName, TRUE);
std::string notification_name = templatep->mName;
- LLUI::sSettingGroups["ignores"]->setBOOL(notification_name, TRUE);
+ LLUI::getInstance()->mSettingGroups["ignores"]->setBOOL(notification_name, TRUE);
}
buildPopupLists();
diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp
index d94bf3f651..960fd9620d 100644
--- a/indra/newview/llfloaterreporter.cpp
+++ b/indra/newview/llfloaterreporter.cpp
@@ -38,7 +38,7 @@
#include "llcallbacklist.h"
#include "llcheckboxctrl.h"
#include "llfontgl.h"
-#include "llimagebmp.h"
+#include "llimagepng.h"
#include "llimagej2c.h"
#include "llinventory.h"
#include "llnotificationsutil.h"
@@ -89,7 +89,7 @@
#include "llcorehttputil.h"
#include "llviewerassetupload.h"
-const std::string SCREEN_PREV_FILENAME = "screen_report_last.bmp";
+const std::string SCREEN_PREV_FILENAME = "screen_report_last.png";
//=========================================================================
//-----------------------------------------------------------------------------
@@ -872,10 +872,10 @@ void LLFloaterReporter::takeScreenshot(bool use_prev_screenshot)
if(!use_prev_screenshot)
{
std::string screenshot_filename(gDirUtilp->getLindenUserDir() + gDirUtilp->getDirDelimiter() + SCREEN_PREV_FILENAME);
- LLPointer<LLImageBMP> bmp_image = new LLImageBMP;
- if(bmp_image->encode(mImageRaw, 0.0f))
+ LLPointer<LLImagePNG> png_image = new LLImagePNG;
+ if(png_image->encode(mImageRaw, 0.0f))
{
- bmp_image->save(screenshot_filename);
+ png_image->save(screenshot_filename);
}
}
else
@@ -948,10 +948,10 @@ void LLFloaterReporter::takeNewSnapshot()
{
std::string screenshot_filename(gDirUtilp->getLindenUserDir() + gDirUtilp->getDirDelimiter() + SCREEN_PREV_FILENAME);
mPrevImageRaw = new LLImageRaw;
- LLPointer<LLImageBMP> start_image_bmp = new LLImageBMP;
- if(start_image_bmp->load(screenshot_filename))
+ LLPointer<LLImagePNG> start_image_png = new LLImagePNG;
+ if(start_image_png->load(screenshot_filename))
{
- if (start_image_bmp->decode(mPrevImageRaw, 0.0f))
+ if (start_image_png->decode(mPrevImageRaw, 0.0f))
{
LLNotificationsUtil::add("LoadPreviousReportScreenshot", LLSD(), LLSD(), boost::bind(&LLFloaterReporter::onLoadScreenshotDialog,this, _1, _2));
return;
diff --git a/indra/newview/llfloatersearch.cpp b/indra/newview/llfloatersearch.cpp
index 66e832111b..779542cfcc 100644
--- a/indra/newview/llfloatersearch.cpp
+++ b/indra/newview/llfloatersearch.cpp
@@ -48,7 +48,7 @@ public:
LLSearchHandler() : LLCommandHandler("search", UNTRUSTED_THROTTLE) { }
bool handle(const LLSD& tokens, const LLSD& query_map, LLMediaCtrl* web)
{
- if (!LLUI::sSettingGroups["config"]->getBOOL("EnableSearch"))
+ if (!LLUI::getInstance()->mSettingGroups["config"]->getBOOL("EnableSearch"))
{
LLNotificationsUtil::add("NoSearch", LLSD(), LLSD(), std::string("SwitchToStandardSkinAndQuit"));
return true;
@@ -120,6 +120,7 @@ void LLFloaterSearch::onOpen(const LLSD& key)
p.allow_address_entry = false;
LLFloaterWebContent::onOpen(p);
+ mWebBrowser->setFocus(TRUE);
search(p.search);
}
diff --git a/indra/newview/llfloaterspellchecksettings.cpp b/indra/newview/llfloaterspellchecksettings.cpp
index b87044ef5a..de5d59f484 100644
--- a/indra/newview/llfloaterspellchecksettings.cpp
+++ b/indra/newview/llfloaterspellchecksettings.cpp
@@ -56,7 +56,7 @@ void LLFloaterSpellCheckerSettings::draw()
bool enable_remove = !sel_items.empty();
for (std::vector<LLScrollListItem*>::const_iterator sel_it = sel_items.begin(); sel_it != sel_items.end(); ++sel_it)
{
- enable_remove &= LLSpellChecker::canRemoveDictionary((*sel_it)->getValue().asString());
+ enable_remove &= LLSpellChecker::getInstance()->canRemoveDictionary((*sel_it)->getValue().asString());
}
getChild<LLUICtrl>("spellcheck_remove_btn")->setEnabled(enable_remove);
}
@@ -121,7 +121,7 @@ void LLFloaterSpellCheckerSettings::onClose(bool app_quitting)
for (std::vector<LLScrollListItem*>::const_iterator item_it = list_items.begin(); item_it != list_items.end(); ++item_it)
{
const std::string language = (*item_it)->getValue().asString();
- if (LLSpellChecker::hasDictionary(language, true))
+ if (LLSpellChecker::getInstance()->hasDictionary(language, true))
{
list_dict.push_back(language);
}
@@ -164,7 +164,7 @@ void LLFloaterSpellCheckerSettings::refreshDictionaries(bool from_settings)
}
dict_combo->clearRows();
- const LLSD& dict_map = LLSpellChecker::getDictionaryMap();
+ const LLSD& dict_map = LLSpellChecker::getInstance()->getDictionaryMap();
if (dict_map.size())
{
for (LLSD::array_const_iterator dict_it = dict_map.beginArray(); dict_it != dict_map.endArray(); ++dict_it)
@@ -216,7 +216,7 @@ void LLFloaterSpellCheckerSettings::refreshDictionaries(bool from_settings)
for (LLSpellChecker::dict_list_t::const_iterator it = active_list.begin(); it != active_list.end(); ++it)
{
const std::string language = *it;
- const LLSD dict = LLSpellChecker::getDictionaryData(language);
+ const LLSD dict = LLSpellChecker::getInstance()->getDictionaryData(language);
row["value"] = language;
row["columns"][0]["value"] = (!dict["user_installed"].asBoolean()) ? language : language + " " + LLTrans::getString("UserDictionary");
active_ctrl->addElement(row);
@@ -380,7 +380,7 @@ void LLFloaterSpellCheckerImport::onBtnOK()
custom_file_out.close();
}
- LLSpellChecker::refreshDictionaryMap();
+ LLSpellChecker::getInstance()->refreshDictionaryMap();
}
closeFloater(false);
diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp
index c2c15ee12b..0429749e11 100644
--- a/indra/newview/llfloatertools.cpp
+++ b/indra/newview/llfloatertools.cpp
@@ -850,6 +850,18 @@ void LLFloaterTools::onOpen(const LLSD& key)
{
mTab->selectTabByName(panel);
}
+
+ LLTool* tool = LLToolMgr::getInstance()->getCurrentTool();
+ if (tool == LLToolCompInspect::getInstance()
+ || tool == LLToolDragAndDrop::getInstance())
+ {
+ // Something called floater up while it was supressed (during drag n drop, inspect),
+ // so it won't be getting any layout or visibility updates, update once
+ // further updates will come from updateLayout()
+ LLCoordGL select_center_screen;
+ MASK mask = gKeyboard->currentMask(TRUE);
+ updatePopup(select_center_screen, mask);
+ }
//gMenuBarView->setItemVisible("BuildTools", TRUE);
}
diff --git a/indra/newview/llfloateruipreview.cpp b/indra/newview/llfloateruipreview.cpp
index db5a192287..e67c79a3a0 100644
--- a/indra/newview/llfloateruipreview.cpp
+++ b/indra/newview/llfloateruipreview.cpp
@@ -291,8 +291,8 @@ bool LLPreviewedFloater::sShowRectangles = false;
// Changes are made here
LLLocalizationResetForcer::LLLocalizationResetForcer(LLFloaterUIPreview* floater, S32 ID)
{
- mSavedLocalization = LLUI::sSettingGroups["config"]->getString("Language"); // save current localization setting
- LLUI::sSettingGroups["config"]->setString("Language", floater->getLocStr(ID));// hack language to be the one we want to preview floaters in
+ mSavedLocalization = LLUI::getInstance()->mSettingGroups["config"]->getString("Language"); // save current localization setting
+ LLUI::getInstance()->mSettingGroups["config"]->setString("Language", floater->getLocStr(ID));// hack language to be the one we want to preview floaters in
// forcibly reset XUI paths with this new language
gDirUtilp->setSkinFolder(gDirUtilp->getSkinFolder(), floater->getLocStr(ID));
}
@@ -301,7 +301,7 @@ LLLocalizationResetForcer::LLLocalizationResetForcer(LLFloaterUIPreview* floater
// Changes are reversed here
LLLocalizationResetForcer::~LLLocalizationResetForcer()
{
- LLUI::sSettingGroups["config"]->setString("Language", mSavedLocalization); // reset language to what it was before we changed it
+ LLUI::getInstance()->mSettingGroups["config"]->setString("Language", mSavedLocalization); // reset language to what it was before we changed it
// forcibly reset XUI paths with this new language
gDirUtilp->setSkinFolder(gDirUtilp->getSkinFolder(), mSavedLocalization);
}
diff --git a/indra/newview/llfloatervoicevolume.cpp b/indra/newview/llfloatervoicevolume.cpp
index 38446e46df..59e1f49f81 100644
--- a/indra/newview/llfloatervoicevolume.cpp
+++ b/indra/newview/llfloatervoicevolume.cpp
@@ -127,7 +127,7 @@ void LLFloaterVoiceVolume::onOpen(const LLSD& data)
// Extract appropriate avatar id
mAvatarID = data["avatar_id"];
- LLUI::positionViewNearMouse(this);
+ LLUI::getInstance()->positionViewNearMouse(this);
getChild<LLUICtrl>("avatar_name")->setValue("");
updateVolumeControls();
diff --git a/indra/newview/llfloaterwebcontent.cpp b/indra/newview/llfloaterwebcontent.cpp
index 13953d6be5..c591dfacaf 100644
--- a/indra/newview/llfloaterwebcontent.cpp
+++ b/indra/newview/llfloaterwebcontent.cpp
@@ -234,7 +234,7 @@ void LLFloaterWebContent::preCreate(LLFloaterWebContent::Params& p)
void LLFloaterWebContent::open_media(const Params& p)
{
- LLViewerMedia::proxyWindowOpened(p.target(), p.id());
+ LLViewerMedia::getInstance()->proxyWindowOpened(p.target(), p.id());
mWebBrowser->setHomePageUrl(p.url);
mWebBrowser->setTarget(p.target);
mWebBrowser->navigateTo(p.url);
@@ -308,7 +308,7 @@ void LLFloaterWebContent::onClose(bool app_quitting)
LLTwitterConnect::instance().setConnectionState(LLTwitterConnect::TWITTER_CONNECTION_FAILED);
}
}
- LLViewerMedia::proxyWindowClosed(mUUID);
+ LLViewerMedia::getInstance()->proxyWindowClosed(mUUID);
destroy();
}
diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp
index 1e9c9ce5e0..27197f0b06 100644
--- a/indra/newview/llfloaterworldmap.cpp
+++ b/indra/newview/llfloaterworldmap.cpp
@@ -122,7 +122,7 @@ public:
bool handle(const LLSD& params, const LLSD& query_map,
LLMediaCtrl* web)
{
- if (!LLUI::sSettingGroups["config"]->getBOOL("EnableWorldMap"))
+ if (!LLUI::getInstance()->mSettingGroups["config"]->getBOOL("EnableWorldMap"))
{
LLNotificationsUtil::add("NoWorldMap", LLSD(), LLSD(), std::string("SwitchToStandardSkinAndQuit"));
return true;
@@ -160,7 +160,7 @@ public:
bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
{
- if (!LLUI::sSettingGroups["config"]->getBOOL("EnableWorldMap"))
+ if (!LLUI::getInstance()->mSettingGroups["config"]->getBOOL("EnableWorldMap"))
{
LLNotificationsUtil::add("NoWorldMap", LLSD(), LLSD(), std::string("SwitchToStandardSkinAndQuit"));
return true;
diff --git a/indra/newview/llfollowcam.cpp b/indra/newview/llfollowcam.cpp
index 612afc0d18..c2ea3b07c1 100644
--- a/indra/newview/llfollowcam.cpp
+++ b/indra/newview/llfollowcam.cpp
@@ -30,12 +30,6 @@
#include "llagent.h"
//-------------------------------------------------------
-// class statics
-//-------------------------------------------------------
-std::map<LLUUID, LLFollowCamParams*> LLFollowCamMgr::sParamMap;
-std::vector<LLFollowCamParams*> LLFollowCamMgr::sParamStack;
-
-//-------------------------------------------------------
// constants
//-------------------------------------------------------
const F32 FOLLOW_CAM_ZOOM_FACTOR = 0.1f;
@@ -668,18 +662,20 @@ LLFollowCam::~LLFollowCam()
//-------------------------------------------------------
// LLFollowCamMgr
//-------------------------------------------------------
-//static
-void LLFollowCamMgr::cleanupClass()
+LLFollowCamMgr::LLFollowCamMgr()
{
- for (param_map_t::iterator iter = sParamMap.begin(); iter != sParamMap.end(); ++iter)
- {
- LLFollowCamParams* params = iter->second;
- delete params;
- }
- sParamMap.clear();
}
-//static
+LLFollowCamMgr::~LLFollowCamMgr()
+{
+ for (param_map_t::iterator iter = mParamMap.begin(); iter != mParamMap.end(); ++iter)
+ {
+ LLFollowCamParams* params = iter->second;
+ delete params;
+ }
+ mParamMap.clear();
+}
+
void LLFollowCamMgr::setPositionLag( const LLUUID& source, F32 lag)
{
LLFollowCamParams* paramsp = getParamsForID(source);
@@ -689,7 +685,6 @@ void LLFollowCamMgr::setPositionLag( const LLUUID& source, F32 lag)
}
}
-//static
void LLFollowCamMgr::setFocusLag( const LLUUID& source, F32 lag)
{
LLFollowCamParams* paramsp = getParamsForID(source);
@@ -699,7 +694,6 @@ void LLFollowCamMgr::setFocusLag( const LLUUID& source, F32 lag)
}
}
-//static
void LLFollowCamMgr::setFocusThreshold( const LLUUID& source, F32 threshold)
{
LLFollowCamParams* paramsp = getParamsForID(source);
@@ -710,7 +704,6 @@ void LLFollowCamMgr::setFocusThreshold( const LLUUID& source, F32 threshold)
}
-//static
void LLFollowCamMgr::setPositionThreshold( const LLUUID& source, F32 threshold)
{
LLFollowCamParams* paramsp = getParamsForID(source);
@@ -720,7 +713,6 @@ void LLFollowCamMgr::setPositionThreshold( const LLUUID& source, F32 threshold)
}
}
-//static
void LLFollowCamMgr::setDistance( const LLUUID& source, F32 distance)
{
LLFollowCamParams* paramsp = getParamsForID(source);
@@ -730,7 +722,6 @@ void LLFollowCamMgr::setDistance( const LLUUID& source, F32 distance)
}
}
-//static
void LLFollowCamMgr::setPitch( const LLUUID& source, F32 pitch)
{
LLFollowCamParams* paramsp = getParamsForID(source);
@@ -740,7 +731,6 @@ void LLFollowCamMgr::setPitch( const LLUUID& source, F32 pitch)
}
}
-//static
void LLFollowCamMgr::setFocusOffset( const LLUUID& source, const LLVector3& offset)
{
LLFollowCamParams* paramsp = getParamsForID(source);
@@ -750,7 +740,6 @@ void LLFollowCamMgr::setFocusOffset( const LLUUID& source, const LLVector3& offs
}
}
-//static
void LLFollowCamMgr::setBehindnessAngle( const LLUUID& source, F32 angle)
{
LLFollowCamParams* paramsp = getParamsForID(source);
@@ -760,7 +749,6 @@ void LLFollowCamMgr::setBehindnessAngle( const LLUUID& source, F32 angle)
}
}
-//static
void LLFollowCamMgr::setBehindnessLag( const LLUUID& source, F32 force)
{
LLFollowCamParams* paramsp = getParamsForID(source);
@@ -770,7 +758,6 @@ void LLFollowCamMgr::setBehindnessLag( const LLUUID& source, F32 force)
}
}
-//static
void LLFollowCamMgr::setPosition( const LLUUID& source, const LLVector3 position)
{
LLFollowCamParams* paramsp = getParamsForID(source);
@@ -780,7 +767,6 @@ void LLFollowCamMgr::setPosition( const LLUUID& source, const LLVector3 position
}
}
-//static
void LLFollowCamMgr::setFocus( const LLUUID& source, const LLVector3 focus)
{
LLFollowCamParams* paramsp = getParamsForID(source);
@@ -790,7 +776,6 @@ void LLFollowCamMgr::setFocus( const LLUUID& source, const LLVector3 focus)
}
}
-//static
void LLFollowCamMgr::setPositionLocked( const LLUUID& source, bool locked)
{
LLFollowCamParams* paramsp = getParamsForID(source);
@@ -800,7 +785,6 @@ void LLFollowCamMgr::setPositionLocked( const LLUUID& source, bool locked)
}
}
-//static
void LLFollowCamMgr::setFocusLocked( const LLUUID& source, bool locked )
{
LLFollowCamParams* paramsp = getParamsForID(source);
@@ -810,16 +794,15 @@ void LLFollowCamMgr::setFocusLocked( const LLUUID& source, bool locked )
}
}
-//static
LLFollowCamParams* LLFollowCamMgr::getParamsForID(const LLUUID& source)
{
LLFollowCamParams* params = NULL;
- param_map_t::iterator found_it = sParamMap.find(source);
- if (found_it == sParamMap.end()) // didn't find it?
+ param_map_t::iterator found_it = mParamMap.find(source);
+ if (found_it == mParamMap.end()) // didn't find it?
{
params = new LLFollowCamParams();
- sParamMap[source] = params;
+ mParamMap[source] = params;
}
else
{
@@ -829,56 +812,51 @@ LLFollowCamParams* LLFollowCamMgr::getParamsForID(const LLUUID& source)
return params;
}
-//static
LLFollowCamParams* LLFollowCamMgr::getActiveFollowCamParams()
{
- if (sParamStack.empty())
+ if (mParamStack.empty())
{
return NULL;
}
- return sParamStack.back();
+ return mParamStack.back();
}
-//static
void LLFollowCamMgr::setCameraActive( const LLUUID& source, bool active )
{
LLFollowCamParams* params = getParamsForID(source);
- param_stack_t::iterator found_it = std::find(sParamStack.begin(), sParamStack.end(), params);
- if (found_it != sParamStack.end())
+ param_stack_t::iterator found_it = std::find(mParamStack.begin(), mParamStack.end(), params);
+ if (found_it != mParamStack.end())
{
- sParamStack.erase(found_it);
+ mParamStack.erase(found_it);
}
// put on top of stack
if(active)
{
- sParamStack.push_back(params);
+ mParamStack.push_back(params);
}
}
-//static
void LLFollowCamMgr::removeFollowCamParams(const LLUUID& source)
{
setCameraActive(source, FALSE);
LLFollowCamParams* params = getParamsForID(source);
- sParamMap.erase(source);
+ mParamMap.erase(source);
delete params;
}
-//static
bool LLFollowCamMgr::isScriptedCameraSource(const LLUUID& source)
{
- param_map_t::iterator found_it = sParamMap.find(source);
- return (found_it != sParamMap.end());
+ param_map_t::iterator found_it = mParamMap.find(source);
+ return (found_it != mParamMap.end());
}
-//static
void LLFollowCamMgr::dump()
{
S32 param_count = 0;
LL_INFOS() << "Scripted camera active stack" << LL_ENDL;
- for (param_stack_t::iterator param_it = sParamStack.begin();
- param_it != sParamStack.end();
+ for (param_stack_t::iterator param_it = mParamStack.begin();
+ param_it != mParamStack.end();
++param_it)
{
LL_INFOS() << param_count++ <<
diff --git a/indra/newview/llfollowcam.h b/indra/newview/llfollowcam.h
index f4b7b2723a..7995848160 100644
--- a/indra/newview/llfollowcam.h
+++ b/indra/newview/llfollowcam.h
@@ -193,40 +193,40 @@ protected:
};// end of FollowCam class
-class LLFollowCamMgr
+class LLFollowCamMgr : public LLSingleton<LLFollowCamMgr>
{
-public:
- static void cleanupClass ( );
-
- static void setPositionLag ( const LLUUID& source, F32 lag);
- static void setFocusLag ( const LLUUID& source, F32 lag);
- static void setFocusThreshold ( const LLUUID& source, F32 threshold);
- static void setPositionThreshold ( const LLUUID& source, F32 threshold);
- static void setDistance ( const LLUUID& source, F32 distance);
- static void setPitch ( const LLUUID& source, F32 pitch);
- static void setFocusOffset ( const LLUUID& source, const LLVector3& offset);
- static void setBehindnessAngle ( const LLUUID& source, F32 angle);
- static void setBehindnessLag ( const LLUUID& source, F32 lag);
- static void setPosition ( const LLUUID& source, const LLVector3 position);
- static void setFocus ( const LLUUID& source, const LLVector3 focus);
- static void setPositionLocked ( const LLUUID& source, bool locked);
- static void setFocusLocked ( const LLUUID& source, bool locked );
-
- static void setCameraActive ( const LLUUID& source, bool active );
-
- static LLFollowCamParams* getActiveFollowCamParams();
- static LLFollowCamParams* getParamsForID(const LLUUID& source);
- static void removeFollowCamParams(const LLUUID& source);
- static bool isScriptedCameraSource(const LLUUID& source);
- static void dump();
+ LLSINGLETON(LLFollowCamMgr);
+ ~LLFollowCamMgr();
+public:
+ void setPositionLag ( const LLUUID& source, F32 lag);
+ void setFocusLag ( const LLUUID& source, F32 lag);
+ void setFocusThreshold ( const LLUUID& source, F32 threshold);
+ void setPositionThreshold ( const LLUUID& source, F32 threshold);
+ void setDistance ( const LLUUID& source, F32 distance);
+ void setPitch ( const LLUUID& source, F32 pitch);
+ void setFocusOffset ( const LLUUID& source, const LLVector3& offset);
+ void setBehindnessAngle ( const LLUUID& source, F32 angle);
+ void setBehindnessLag ( const LLUUID& source, F32 lag);
+ void setPosition ( const LLUUID& source, const LLVector3 position);
+ void setFocus ( const LLUUID& source, const LLVector3 focus);
+ void setPositionLocked ( const LLUUID& source, bool locked);
+ void setFocusLocked ( const LLUUID& source, bool locked );
+
+ void setCameraActive ( const LLUUID& source, bool active );
+
+ LLFollowCamParams* getActiveFollowCamParams();
+ LLFollowCamParams* getParamsForID(const LLUUID& source);
+ void removeFollowCamParams(const LLUUID& source);
+ bool isScriptedCameraSource(const LLUUID& source);
+ void dump();
protected:
typedef std::map<LLUUID, LLFollowCamParams*> param_map_t;
- static param_map_t sParamMap;
+ param_map_t mParamMap;
typedef std::vector<LLFollowCamParams*> param_stack_t;
- static param_stack_t sParamStack;
+ param_stack_t mParamStack;
};
#endif //LL_FOLLOWCAM_H
diff --git a/indra/newview/llgroupactions.cpp b/indra/newview/llgroupactions.cpp
index 913efd6434..599790d2bb 100644
--- a/indra/newview/llgroupactions.cpp
+++ b/indra/newview/llgroupactions.cpp
@@ -55,7 +55,7 @@ public:
bool handle(const LLSD& tokens, const LLSD& query_map,
LLMediaCtrl* web)
{
- if (!LLUI::sSettingGroups["config"]->getBOOL("EnableGroupInfo"))
+ if (!LLUI::getInstance()->mSettingGroups["config"]->getBOOL("EnableGroupInfo"))
{
LLNotificationsUtil::add("NoGroupInfo", LLSD(), LLSD(), std::string("SwitchToStandardSkinAndQuit"));
return true;
diff --git a/indra/newview/llhints.cpp b/indra/newview/llhints.cpp
index 197408b40e..7271376a3c 100644
--- a/indra/newview/llhints.cpp
+++ b/indra/newview/llhints.cpp
@@ -240,7 +240,7 @@ void LLHintPopup::draw()
}
else
{
- LLView* targetp = LLHints::getHintTarget(mTarget).get();
+ LLView* targetp = LLHints::getInstance()->getHintTarget(mTarget).get();
if (!targetp)
{
// target widget is no longer valid, go away
@@ -349,10 +349,20 @@ void LLHintPopup::draw()
}
-LLRegistry<std::string, LLHandle<LLView> > LLHints::sTargetRegistry;
-std::map<LLNotificationPtr, class LLHintPopup*> LLHints::sHints;
+/// LLHints
+
+LLHints::LLHints()
+{
+ LLControlVariablePtr control = gSavedSettings.getControl("EnableUIHints");
+ mControlConnection = control->getSignal()->connect(boost::bind(&LLHints::showHints, this, _2));
+ gViewerWindow->getHintHolder()->setVisible(control->getValue().asBoolean());
+}
+
+LLHints::~LLHints()
+{
+ mControlConnection.disconnect();
+}
-//static
void LLHints::show(LLNotificationPtr hint)
{
LLHintPopup::Params p(LLUICtrlFactory::getDefaultParams<LLHintPopup>());
@@ -365,7 +375,7 @@ void LLHints::show(LLNotificationPtr hint)
{
LLHintPopup* popup = new LLHintPopup(p);
- sHints[hint] = popup;
+ mHints[hint] = popup;
LLView* hint_holder = gViewerWindow->getHintHolder();
if (hint_holder)
@@ -376,27 +386,24 @@ void LLHints::show(LLNotificationPtr hint)
}
}
-//static
void LLHints::hide(LLNotificationPtr hint)
{
- hint_map_t::iterator found_it = sHints.find(hint);
- if (found_it != sHints.end())
+ hint_map_t::iterator found_it = mHints.find(hint);
+ if (found_it != mHints.end())
{
found_it->second->hide();
- sHints.erase(found_it);
+ mHints.erase(found_it);
}
}
-//static
void LLHints::registerHintTarget(const std::string& name, LLHandle<LLView> target)
{
- sTargetRegistry.defaultRegistrar().replace(name, target);
+ mTargetRegistry.defaultRegistrar().replace(name, target);
}
-//static
LLHandle<LLView> LLHints::getHintTarget(const std::string& name)
{
- LLHandle<LLView>* handlep = sTargetRegistry.getValue(name);
+ LLHandle<LLView>* handlep = mTargetRegistry.getValue(name);
if (handlep)
{
return *handlep;
@@ -407,18 +414,6 @@ LLHandle<LLView> LLHints::getHintTarget(const std::string& name)
}
}
-//static
-void LLHints::initClass()
-{
- sRegister.reference();
-
- LLControlVariablePtr control = gSavedSettings.getControl("EnableUIHints");
- control->getSignal()->connect(boost::bind(&showHints, _2));
- gViewerWindow->getHintHolder()->setVisible(control->getValue().asBoolean());
-
-}
-
-//staic
void LLHints::showHints(const LLSD& show)
{
bool visible = show.asBoolean();
diff --git a/indra/newview/llhints.h b/indra/newview/llhints.h
index dd6195a9ce..1f730734d0 100644
--- a/indra/newview/llhints.h
+++ b/indra/newview/llhints.h
@@ -32,19 +32,22 @@
#include "llinitdestroyclass.h"
-class LLHints : public LLInitClass<LLHints>
+class LLHints : public LLSingleton<LLHints>
{
+ LLSINGLETON(LLHints);
+ ~LLHints();
public:
- static void show(LLNotificationPtr hint);
- static void hide(LLNotificationPtr hint);
- static void registerHintTarget(const std::string& name, LLHandle<LLView> target);
- static LLHandle<LLView> getHintTarget(const std::string& name);
- static void initClass();
+ void show(LLNotificationPtr hint);
+ void hide(LLNotificationPtr hint);
+ void registerHintTarget(const std::string& name, LLHandle<LLView> target);
+ LLHandle<LLView> getHintTarget(const std::string& name);
private:
- static LLRegistry<std::string, LLHandle<LLView> > sTargetRegistry;
+ LLRegistry<std::string, LLHandle<LLView> > mTargetRegistry;
typedef std::map<LLNotificationPtr, class LLHintPopup*> hint_map_t;
- static hint_map_t sHints;
- static void showHints(const LLSD& show);
+ hint_map_t mHints;
+ void showHints(const LLSD& show);
+
+ boost::signals2::connection mControlConnection;
};
diff --git a/indra/newview/llimagefiltersmanager.cpp b/indra/newview/llimagefiltersmanager.cpp
index ee6b39efac..c23cdc8103 100644
--- a/indra/newview/llimagefiltersmanager.cpp
+++ b/indra/newview/llimagefiltersmanager.cpp
@@ -48,7 +48,7 @@ LLImageFiltersManager::~LLImageFiltersManager()
{
}
-// virtual static
+// virtual
void LLImageFiltersManager::initSingleton()
{
loadAllFilters();
diff --git a/indra/newview/llimprocessing.cpp b/indra/newview/llimprocessing.cpp
index d59c301210..3606a439a6 100644
--- a/indra/newview/llimprocessing.cpp
+++ b/indra/newview/llimprocessing.cpp
@@ -695,7 +695,7 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
// The group notice packet does not have an AgentID. Obtain one from the name cache.
// If last name is "Resident" strip it out so the cache name lookup works.
std::string legacy_name = gCacheName->buildLegacyName(original_name);
- agent_id = LLAvatarNameCache::findIdByName(legacy_name);
+ agent_id = LLAvatarNameCache::getInstance()->findIdByName(legacy_name);
if (agent_id.isNull())
{
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 0f5d514660..e331a51bda 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -83,11 +83,6 @@ void startConfrenceCoro(std::string url, LLUUID tempSessionId, LLUUID creatorId,
void chatterBoxInvitationCoro(std::string url, LLUUID sessionId, LLIMMgr::EInvitationType invitationType);
void start_deprecated_conference_chat(const LLUUID& temp_session_id, const LLUUID& creator_id, const LLUUID& other_participant_id, const LLSD& agents_to_invite);
-std::string LLCallDialogManager::sPreviousSessionlName = "";
-LLIMModel::LLIMSession::SType LLCallDialogManager::sPreviousSessionType = LLIMModel::LLIMSession::P2P_SESSION;
-std::string LLCallDialogManager::sCurrentSessionlName = "";
-LLIMModel::LLIMSession* LLCallDialogManager::sSession = NULL;
-LLVoiceChannel::EState LLCallDialogManager::sOldState = LLVoiceChannel::STATE_READY;
const LLUUID LLOutgoingCallDialog::OCD_KEY = LLUUID("7CF78E11-0CFE-498D-ADB9-1417BF03DDB4");
//
// Globals
@@ -811,7 +806,7 @@ void LLIMModel::LLIMSession::addMessagesFromHistory(const std::list<LLSD>& histo
{
// convert it to a legacy name if we have a complete name
std::string legacy_name = gCacheName->buildLegacyName(from);
- from_id = LLAvatarNameCache::findIdByName(legacy_name);
+ from_id = LLAvatarNameCache::getInstance()->findIdByName(legacy_name);
}
std::string timestamp = msg[LL_IM_TIME];
@@ -1786,7 +1781,12 @@ LLIMMgr::onConfirmForceCloseError(
// Class LLCallDialogManager
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-LLCallDialogManager::LLCallDialogManager()
+LLCallDialogManager::LLCallDialogManager():
+mPreviousSessionlName(""),
+mPreviousSessionType(LLIMModel::LLIMSession::P2P_SESSION),
+mCurrentSessionlName(""),
+mSession(NULL),
+mOldState(LLVoiceChannel::STATE_READY)
{
}
@@ -1794,39 +1794,45 @@ LLCallDialogManager::~LLCallDialogManager()
{
}
-void LLCallDialogManager::initClass()
+void LLCallDialogManager::initSingleton()
{
LLVoiceChannel::setCurrentVoiceChannelChangedCallback(LLCallDialogManager::onVoiceChannelChanged);
}
+// static
void LLCallDialogManager::onVoiceChannelChanged(const LLUUID &session_id)
{
+ LLCallDialogManager::getInstance()->onVoiceChannelChangedInt(session_id);
+}
+
+void LLCallDialogManager::onVoiceChannelChangedInt(const LLUUID &session_id)
+{
LLIMModel::LLIMSession* session = LLIMModel::getInstance()->findIMSession(session_id);
if(!session)
{
- sPreviousSessionlName = sCurrentSessionlName;
- sCurrentSessionlName = ""; // Empty string results in "Nearby Voice Chat" after substitution
+ mPreviousSessionlName = mCurrentSessionlName;
+ mCurrentSessionlName = ""; // Empty string results in "Nearby Voice Chat" after substitution
return;
}
- if (sSession)
+ if (mSession)
{
// store previous session type to process Avaline calls in dialogs
- sPreviousSessionType = sSession->mSessionType;
+ mPreviousSessionType = mSession->mSessionType;
}
- sSession = session;
+ mSession = session;
static boost::signals2::connection prev_channel_state_changed_connection;
// disconnect previously connected callback to avoid have invalid sSession in onVoiceChannelStateChanged()
prev_channel_state_changed_connection.disconnect();
prev_channel_state_changed_connection =
- sSession->mVoiceChannel->setStateChangedCallback(boost::bind(LLCallDialogManager::onVoiceChannelStateChanged, _1, _2, _3, _4));
+ mSession->mVoiceChannel->setStateChangedCallback(boost::bind(LLCallDialogManager::onVoiceChannelStateChanged, _1, _2, _3, _4));
- if(sCurrentSessionlName != session->mName)
+ if(mCurrentSessionlName != session->mName)
{
- sPreviousSessionlName = sCurrentSessionlName;
- sCurrentSessionlName = session->mName;
+ mPreviousSessionlName = mCurrentSessionlName;
+ mCurrentSessionlName = session->mName;
}
if (LLVoiceChannel::getCurrentVoiceChannel()->getState() == LLVoiceChannel::STATE_CALL_STARTED &&
@@ -1835,14 +1841,14 @@ void LLCallDialogManager::onVoiceChannelChanged(const LLUUID &session_id)
//*TODO get rid of duplicated code
LLSD mCallDialogPayload;
- mCallDialogPayload["session_id"] = sSession->mSessionID;
- mCallDialogPayload["session_name"] = sSession->mName;
- mCallDialogPayload["other_user_id"] = sSession->mOtherParticipantID;
- mCallDialogPayload["old_channel_name"] = sPreviousSessionlName;
- mCallDialogPayload["old_session_type"] = sPreviousSessionType;
+ mCallDialogPayload["session_id"] = mSession->mSessionID;
+ mCallDialogPayload["session_name"] = mSession->mName;
+ mCallDialogPayload["other_user_id"] = mSession->mOtherParticipantID;
+ mCallDialogPayload["old_channel_name"] = mPreviousSessionlName;
+ mCallDialogPayload["old_session_type"] = mPreviousSessionType;
mCallDialogPayload["state"] = LLVoiceChannel::STATE_CALL_STARTED;
- mCallDialogPayload["disconnected_channel_name"] = sSession->mName;
- mCallDialogPayload["session_type"] = sSession->mSessionType;
+ mCallDialogPayload["disconnected_channel_name"] = mSession->mName;
+ mCallDialogPayload["session_type"] = mSession->mSessionType;
LLOutgoingCallDialog* ocd = LLFloaterReg::getTypedInstance<LLOutgoingCallDialog>("outgoing_call", LLOutgoingCallDialog::OCD_KEY);
if(ocd)
@@ -1853,26 +1859,32 @@ void LLCallDialogManager::onVoiceChannelChanged(const LLUUID &session_id)
}
+// static
void LLCallDialogManager::onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state, const LLVoiceChannel::EDirection& direction, bool ended_by_agent)
{
+ LLCallDialogManager::getInstance()->onVoiceChannelStateChangedInt(old_state, new_state, direction, ended_by_agent);
+}
+
+void LLCallDialogManager::onVoiceChannelStateChangedInt(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state, const LLVoiceChannel::EDirection& direction, bool ended_by_agent)
+{
LLSD mCallDialogPayload;
LLOutgoingCallDialog* ocd = NULL;
- if(sOldState == new_state)
+ if(mOldState == new_state)
{
return;
}
- sOldState = new_state;
+ mOldState = new_state;
- mCallDialogPayload["session_id"] = sSession->mSessionID;
- mCallDialogPayload["session_name"] = sSession->mName;
- mCallDialogPayload["other_user_id"] = sSession->mOtherParticipantID;
- mCallDialogPayload["old_channel_name"] = sPreviousSessionlName;
- mCallDialogPayload["old_session_type"] = sPreviousSessionType;
+ mCallDialogPayload["session_id"] = mSession->mSessionID;
+ mCallDialogPayload["session_name"] = mSession->mName;
+ mCallDialogPayload["other_user_id"] = mSession->mOtherParticipantID;
+ mCallDialogPayload["old_channel_name"] = mPreviousSessionlName;
+ mCallDialogPayload["old_session_type"] = mPreviousSessionType;
mCallDialogPayload["state"] = new_state;
- mCallDialogPayload["disconnected_channel_name"] = sSession->mName;
- mCallDialogPayload["session_type"] = sSession->mSessionType;
+ mCallDialogPayload["disconnected_channel_name"] = mSession->mName;
+ mCallDialogPayload["session_type"] = mSession->mSessionType;
mCallDialogPayload["ended_by_agent"] = ended_by_agent;
switch(new_state)
@@ -1887,7 +1899,7 @@ void LLCallDialogManager::onVoiceChannelStateChanged(const LLVoiceChannel::EStat
case LLVoiceChannel::STATE_HUNG_UP:
// this state is coming before session is changed, so, put it into payload map
- mCallDialogPayload["old_session_type"] = sSession->mSessionType;
+ mCallDialogPayload["old_session_type"] = mSession->mSessionType;
break;
case LLVoiceChannel::STATE_CONNECTED :
@@ -1925,7 +1937,7 @@ LLCallDialog::LLCallDialog(const LLSD& payload)
LLCallDialog::~LLCallDialog()
{
- LLUI::removePopup(this);
+ LLUI::getInstance()->removePopup(this);
}
BOOL LLCallDialog::postBuild()
@@ -2002,7 +2014,7 @@ void LLCallDialog::onOpen(const LLSD& key)
LLDockableFloater::onOpen(key);
// it should be over the all floaters. EXT-5116
- LLUI::addPopup(this);
+ LLUI::getInstance()->addPopup(this);
}
void LLCallDialog::setIcon(const LLSD& session_id, const LLSD& participant_id)
diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h
index 81d3ffa1a6..2a9e4679a8 100644
--- a/indra/newview/llimview.h
+++ b/indra/newview/llimview.h
@@ -499,22 +499,26 @@ private:
LLSD mPendingAgentListUpdates;
};
-class LLCallDialogManager : public LLInitClass<LLCallDialogManager>
+class LLCallDialogManager : public LLSingleton<LLCallDialogManager>
{
-public:
- LLCallDialogManager();
+ LLSINGLETON(LLCallDialogManager);
~LLCallDialogManager();
-
- static void initClass();
+public:
+ // static for convinience
static void onVoiceChannelChanged(const LLUUID &session_id);
static void onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state, const LLVoiceChannel::EDirection& direction, bool ended_by_agent);
+private:
+ void initSingleton();
+ void onVoiceChannelChangedInt(const LLUUID &session_id);
+ void onVoiceChannelStateChangedInt(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state, const LLVoiceChannel::EDirection& direction, bool ended_by_agent);
+
protected:
- static std::string sPreviousSessionlName;
- static LLIMModel::LLIMSession::SType sPreviousSessionType;
- static std::string sCurrentSessionlName;
- static LLIMModel::LLIMSession* sSession;
- static LLVoiceChannel::EState sOldState;
+ std::string mPreviousSessionlName;
+ LLIMModel::LLIMSession::SType mPreviousSessionType;
+ std::string mCurrentSessionlName;
+ LLIMModel::LLIMSession* mSession;
+ LLVoiceChannel::EState mOldState;
};
class LLCallDialog : public LLDockableFloater
diff --git a/indra/newview/llinspect.cpp b/indra/newview/llinspect.cpp
index e6cb068613..479e8f9abf 100644
--- a/indra/newview/llinspect.cpp
+++ b/indra/newview/llinspect.cpp
@@ -28,7 +28,7 @@
#include "lltooltip.h"
#include "llcontrol.h" // LLCachedControl
-#include "llui.h" // LLUI::sSettingsGroups
+#include "llui.h" // LLUI::getInstance()->mSettingsGroups
#include "llviewermenu.h"
LLInspect::LLInspect(const LLSD& key)
@@ -45,8 +45,8 @@ LLInspect::~LLInspect()
// virtual
void LLInspect::draw()
{
- static LLCachedControl<F32> FADE_TIME(*LLUI::sSettingGroups["config"], "InspectorFadeTime", 1.f);
- static LLCachedControl<F32> STAY_TIME(*LLUI::sSettingGroups["config"], "InspectorShowTime", 1.f);
+ static LLCachedControl<F32> FADE_TIME(*LLUI::getInstance()->mSettingGroups["config"], "InspectorFadeTime", 1.f);
+ static LLCachedControl<F32> STAY_TIME(*LLUI::getInstance()->mSettingGroups["config"], "InspectorShowTime", 1.f);
if (mOpenTimer.getStarted())
{
LLFloater::draw();
@@ -113,7 +113,7 @@ BOOL LLInspect::handleToolTip(S32 x, S32 y, MASK mask)
params.fillFrom(LLUICtrlFactory::instance().getDefaultParams<LLInspector>());
params.message = child_handler->getToolTip();
//set up delay if there is no visible tooltip at this moment
- params.delay_time = LLToolTipMgr::instance().toolTipVisible() ? 0.f : LLUI::sSettingGroups["config"]->getF32( "ToolTipDelay" );
+ params.delay_time = LLToolTipMgr::instance().toolTipVisible() ? 0.f : LLUI::getInstance()->mSettingGroups["config"]->getF32( "ToolTipDelay" );
LLToolTipMgr::instance().show(params);
handled = TRUE;
}
@@ -137,7 +137,7 @@ bool LLInspect::childHasVisiblePopupMenu()
LLRect floater_rc = calcScreenRect();
LLRect menu_screen_rc = child_menu->calcScreenRect();
S32 mx, my;
- LLUI::getMousePositionScreen(&mx, &my);
+ LLUI::getInstance()->getMousePositionScreen(&mx, &my);
// This works wrong if we spawn a menu near Inspector and menu overlaps Inspector.
if(floater_rc.overlaps(menu_screen_rc) && menu_screen_rc.pointInRect(mx, my))
diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp
index 88e7ad1b71..10814ac076 100644
--- a/indra/newview/llinspectavatar.cpp
+++ b/indra/newview/llinspectavatar.cpp
@@ -207,11 +207,11 @@ void LLInspectAvatar::onOpen(const LLSD& data)
// See LLToolTipMgr::createToolTip
if (data.has("pos"))
{
- LLUI::positionViewNearMouse(this, data["pos"]["x"].asInteger(), data["pos"]["y"].asInteger());
+ LLUI::getInstance()->positionViewNearMouse(this, data["pos"]["x"].asInteger(), data["pos"]["y"].asInteger());
}
else
{
- LLUI::positionViewNearMouse(this);
+ LLUI::getInstance()->positionViewNearMouse(this);
}
// Generate link to avatar profile.
diff --git a/indra/newview/llinspectgroup.cpp b/indra/newview/llinspectgroup.cpp
index 8332443162..fa8a53c546 100644
--- a/indra/newview/llinspectgroup.cpp
+++ b/indra/newview/llinspectgroup.cpp
@@ -129,11 +129,11 @@ void LLInspectGroup::onOpen(const LLSD& data)
// See LLToolTipMgr::createToolTip
if (data.has("pos"))
{
- LLUI::positionViewNearMouse(this, data["pos"]["x"].asInteger(), data["pos"]["y"].asInteger());
+ LLUI::getInstance()->positionViewNearMouse(this, data["pos"]["x"].asInteger(), data["pos"]["y"].asInteger());
}
else
{
- LLUI::positionViewNearMouse(this);
+ LLUI::getInstance()->positionViewNearMouse(this);
}
// can't call from constructor as widgets are not built yet
diff --git a/indra/newview/llinspectobject.cpp b/indra/newview/llinspectobject.cpp
index 46019557f8..f78a5cc64e 100644
--- a/indra/newview/llinspectobject.cpp
+++ b/indra/newview/llinspectobject.cpp
@@ -202,11 +202,11 @@ void LLInspectObject::onOpen(const LLSD& data)
// See LLToolTipMgr::createToolTip
if (data.has("pos"))
{
- LLUI::positionViewNearMouse(this, data["pos"]["x"].asInteger(), data["pos"]["y"].asInteger());
+ LLUI::getInstance()->positionViewNearMouse(this, data["pos"]["x"].asInteger(), data["pos"]["y"].asInteger());
}
else
{
- LLUI::positionViewNearMouse(this);
+ LLUI::getInstance()->positionViewNearMouse(this);
}
// Promote hovered object to a complete selection, which will also force
@@ -241,7 +241,7 @@ void LLInspectObject::onOpen(const LLSD& data)
if(!mMediaEntry)
return;
- mMediaImpl = LLViewerMedia::getMediaImplFromTextureID(mMediaEntry->getMediaID());
+ mMediaImpl = LLViewerMedia::getInstance()->getMediaImplFromTextureID(mMediaEntry->getMediaID());
}
}
@@ -300,7 +300,7 @@ void LLInspectObject::update()
if(!mMediaEntry)
return;
- mMediaImpl = LLViewerMedia::getMediaImplFromTextureID(mMediaEntry->getMediaID());
+ mMediaImpl = LLViewerMedia::getInstance()->getMediaImplFromTextureID(mMediaEntry->getMediaID());
updateMediaCurrentURL();
updateSecureBrowsing();
diff --git a/indra/newview/llinspectremoteobject.cpp b/indra/newview/llinspectremoteobject.cpp
index b64df2bd47..272c8acbd5 100644
--- a/indra/newview/llinspectremoteobject.cpp
+++ b/indra/newview/llinspectremoteobject.cpp
@@ -116,11 +116,11 @@ void LLInspectRemoteObject::onOpen(const LLSD& data)
// See LLToolTipMgr::createToolTip
if (data.has("pos"))
{
- LLUI::positionViewNearMouse(this, data["pos"]["x"].asInteger(), data["pos"]["y"].asInteger());
+ LLUI::getInstance()->positionViewNearMouse(this, data["pos"]["x"].asInteger(), data["pos"]["y"].asInteger());
}
else
{
- LLUI::positionViewNearMouse(this);
+ LLUI::getInstance()->positionViewNearMouse(this);
}
}
diff --git a/indra/newview/llinspecttoast.cpp b/indra/newview/llinspecttoast.cpp
index 47560341e7..d0034eff13 100644
--- a/indra/newview/llinspecttoast.cpp
+++ b/indra/newview/llinspecttoast.cpp
@@ -110,7 +110,7 @@ void LLInspectToast::onOpen(const LLSD& notification_id)
panel_rect = panel->getRect();
reshape(panel_rect.getWidth(), panel_rect.getHeight());
- LLUI::positionViewNearMouse(this);
+ LLUI::getInstance()->positionViewNearMouse(this);
}
// virtual
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index a50a66a8ce..349ba6183b 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -107,6 +107,7 @@ bool move_task_inventory_callback(const LLSD& notification, const LLSD& response
bool confirm_attachment_rez(const LLSD& notification, const LLSD& response);
void teleport_via_landmark(const LLUUID& asset_id);
static BOOL can_move_to_outfit(LLInventoryItem* inv_item, BOOL move_is_into_current_outfit);
+static bool can_move_to_my_outfits(LLInventoryModel* model, LLInventoryCategory* inv_cat, U32 wear_limit);
static BOOL can_move_to_landmarks(LLInventoryItem* inv_item);
static bool check_category(LLInventoryModel* model,
const LLUUID& cat_id,
@@ -2269,7 +2270,7 @@ public:
// Can be destroyed (or moved to trash)
BOOL LLFolderBridge::isItemRemovable() const
{
- if (!get_is_category_removable(getInventoryModel(), mUUID))
+ if (!get_is_category_removable(getInventoryModel(), mUUID) || isMarketplaceListingsFolder())
{
return FALSE;
}
@@ -2285,11 +2286,6 @@ BOOL LLFolderBridge::isItemRemovable() const
return FALSE;
}
}
-
- if (isMarketplaceListingsFolder() && LLMarketplaceData::instance().getActivationState(mUUID))
- {
- return FALSE;
- }
return TRUE;
}
@@ -2511,9 +2507,28 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
is_movable = FALSE;
// tooltip?
}
+
+ U32 max_items_to_wear = gSavedSettings.getU32("WearFolderLimit");
if (is_movable && move_is_into_outfit)
{
- if((mUUID == my_outifts_id) || (getCategory() && getCategory()->getPreferredType() == LLFolderType::FT_NONE))
+ if (mUUID == my_outifts_id)
+ {
+ if (source != LLToolDragAndDrop::SOURCE_AGENT || move_is_from_marketplacelistings)
+ {
+ tooltip_msg = LLTrans::getString("TooltipOutfitNotInInventory");
+ is_movable = false;
+ }
+ else if (can_move_to_my_outfits(model, inv_cat, max_items_to_wear))
+ {
+ is_movable = true;
+ }
+ else
+ {
+ tooltip_msg = LLTrans::getString("TooltipCantCreateOutfit");
+ is_movable = false;
+ }
+ }
+ else if(getCategory() && getCategory()->getPreferredType() == LLFolderType::FT_NONE)
{
is_movable = ((inv_cat->getPreferredType() == LLFolderType::FT_NONE) || (inv_cat->getPreferredType() == LLFolderType::FT_OUTFIT));
}
@@ -2558,7 +2573,6 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
}
}
}
- U32 max_items_to_wear = gSavedSettings.getU32("WearFolderLimit");
if (is_movable
&& move_is_into_current_outfit
&& descendent_items.size() > max_items_to_wear)
@@ -2713,8 +2727,14 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
}
}
+ if (mUUID == my_outifts_id)
+ {
+ // Category can contains objects,
+ // create a new folder and populate it with links to original objects
+ dropToMyOutfits(inv_cat);
+ }
// if target is current outfit folder we use link
- if (move_is_into_current_outfit &&
+ else if (move_is_into_current_outfit &&
(inv_cat->getPreferredType() == LLFolderType::FT_NONE ||
inv_cat->getPreferredType() == LLFolderType::FT_OUTFIT))
{
@@ -3724,12 +3744,40 @@ void LLFolderBridge::perform_pasteFromClipboard()
return;
}
}
- if (move_is_into_current_outfit || move_is_into_outfit)
+ if (move_is_into_outfit)
+ {
+ if (!move_is_into_my_outfits && item && can_move_to_outfit(item, move_is_into_current_outfit))
+ {
+ dropToOutfit(item, move_is_into_current_outfit);
+ }
+ else if (move_is_into_my_outfits && LLAssetType::AT_CATEGORY == obj->getType())
+ {
+ LLInventoryCategory* cat = model->getCategory(item_id);
+ U32 max_items_to_wear = gSavedSettings.getU32("WearFolderLimit");
+ if (cat && can_move_to_my_outfits(model, cat, max_items_to_wear))
+ {
+ dropToMyOutfits(cat);
+ }
+ else
+ {
+ LLNotificationsUtil::add("MyOutfitsPasteFailed");
+ }
+ }
+ else
+ {
+ LLNotificationsUtil::add("MyOutfitsPasteFailed");
+ }
+ }
+ else if (move_is_into_current_outfit)
{
if (item && can_move_to_outfit(item, move_is_into_current_outfit))
{
dropToOutfit(item, move_is_into_current_outfit);
}
+ else
+ {
+ LLNotificationsUtil::add("MyOutfitsPasteFailed");
+ }
}
else if (move_is_into_favorites)
{
@@ -4675,6 +4723,46 @@ static BOOL can_move_to_outfit(LLInventoryItem* inv_item, BOOL move_is_into_curr
return TRUE;
}
+// Returns true if folder's content can be moved to Current Outfit or any outfit folder.
+static bool can_move_to_my_outfits(LLInventoryModel* model, LLInventoryCategory* inv_cat, U32 wear_limit)
+{
+ LLInventoryModel::cat_array_t *cats;
+ LLInventoryModel::item_array_t *items;
+ model->getDirectDescendentsOf(inv_cat->getUUID(), cats, items);
+
+ if (items->size() > wear_limit)
+ {
+ return false;
+ }
+
+ if (items->size() == 0)
+ {
+ // Nothing to move(create)
+ return false;
+ }
+
+ if (cats->size() > 0)
+ {
+ // We do not allow subfolders in outfits of "My Outfits" yet
+ return false;
+ }
+
+ LLInventoryModel::item_array_t::iterator iter = items->begin();
+ LLInventoryModel::item_array_t::iterator end = items->end();
+
+ while (iter != end)
+ {
+ LLViewerInventoryItem *item = *iter;
+ if (!can_move_to_outfit(item, false))
+ {
+ return false;
+ }
+ iter++;
+ }
+
+ return true;
+}
+
// Returns TRUE if item is a landmark or a link to a landmark
// and can be moved to Favorites or Landmarks folder.
static BOOL can_move_to_landmarks(LLInventoryItem* inv_item)
@@ -4743,6 +4831,56 @@ void LLFolderBridge::dropToOutfit(LLInventoryItem* inv_item, BOOL move_is_into_c
}
}
+void LLFolderBridge::dropToMyOutfits(LLInventoryCategory* inv_cat)
+{
+ // make a folder in the My Outfits directory.
+ const LLUUID dest_id = getInventoryModel()->findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS);
+
+ // Note: creation will take time, so passing folder id to callback is slightly unreliable,
+ // but so is collecting and passing descendants' ids
+ inventory_func_type func = boost::bind(&LLFolderBridge::outfitFolderCreatedCallback, this, inv_cat->getUUID(), _1);
+ gInventory.createNewCategory(dest_id,
+ LLFolderType::FT_OUTFIT,
+ inv_cat->getName(),
+ func);
+}
+
+void LLFolderBridge::outfitFolderCreatedCallback(LLUUID cat_source_id, LLUUID cat_dest_id)
+{
+ LLInventoryModel::cat_array_t* categories;
+ LLInventoryModel::item_array_t* items;
+ getInventoryModel()->getDirectDescendentsOf(cat_source_id, categories, items);
+
+ LLInventoryObject::const_object_list_t link_array;
+
+
+ LLInventoryModel::item_array_t::iterator iter = items->begin();
+ LLInventoryModel::item_array_t::iterator end = items->end();
+ while (iter!=end)
+ {
+ const LLViewerInventoryItem* item = (*iter);
+ // By this point everything is supposed to be filtered,
+ // but there was a delay to create folder so something could have changed
+ LLInventoryType::EType inv_type = item->getInventoryType();
+ if ((inv_type == LLInventoryType::IT_WEARABLE) ||
+ (inv_type == LLInventoryType::IT_GESTURE) ||
+ (inv_type == LLInventoryType::IT_ATTACHMENT) ||
+ (inv_type == LLInventoryType::IT_OBJECT) ||
+ (inv_type == LLInventoryType::IT_SNAPSHOT) ||
+ (inv_type == LLInventoryType::IT_TEXTURE))
+ {
+ link_array.push_back(LLConstPointer<LLInventoryObject>(item));
+ }
+ iter++;
+ }
+
+ if (!link_array.empty())
+ {
+ LLPointer<LLInventoryCallback> cb = NULL;
+ link_inventory_array(cat_dest_id, link_array, cb);
+ }
+}
+
// Callback for drop item if DAMA required...
void LLFolderBridge::callback_dropItemIntoFolder(const LLSD& notification, const LLSD& response, LLInventoryItem* inv_item)
{
diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h
index f4df566fa6..0823cf8b52 100644
--- a/indra/newview/llinventorybridge.h
+++ b/indra/newview/llinventorybridge.h
@@ -359,6 +359,7 @@ protected:
void dropToFavorites(LLInventoryItem* inv_item);
void dropToOutfit(LLInventoryItem* inv_item, BOOL move_is_into_current_outfit);
+ void dropToMyOutfits(LLInventoryCategory* inv_cat);
//--------------------------------------------------------------------
// Messy hacks for handling folder options
@@ -368,6 +369,7 @@ public:
static void staticFolderOptionsMenu();
protected:
+ void outfitFolderCreatedCallback(LLUUID cat_source_id, LLUUID cat_dest_id);
void callback_pasteFromClipboard(const LLSD& notification, const LLSD& response);
void perform_pasteFromClipboard();
void gatherMessage(std::string& message, S32 depth, LLError::ELevel log_level);
diff --git a/indra/newview/lllocalbitmaps.cpp b/indra/newview/lllocalbitmaps.cpp
index 0243e2183e..b8bde39bd1 100644
--- a/indra/newview/lllocalbitmaps.cpp
+++ b/indra/newview/lllocalbitmaps.cpp
@@ -69,9 +69,6 @@
/*=======================================*/
/* Formal declarations, constants, etc. */
/*=======================================*/
-std::list<LLLocalBitmap*> LLLocalBitmapMgr::sBitmapList;
-LLLocalBitmapTimer LLLocalBitmapMgr::sTimer;
-bool LLLocalBitmapMgr::sNeedsRebake;
static const F32 LL_LOCAL_TIMER_HEARTBEAT = 3.0;
static const BOOL LL_LOCAL_USE_MIPMAPS = true;
@@ -131,7 +128,7 @@ LLLocalBitmap::~LLLocalBitmap()
if(LL_LOCAL_REPLACE_ON_DEL && mValid && gAgentAvatarp) // fix for STORM-1837
{
replaceIDs(mWorldID, IMG_DEFAULT);
- LLLocalBitmapMgr::doRebake();
+ LLLocalBitmapMgr::getInstance()->doRebake();
}
// delete self from gimagelist
@@ -571,7 +568,7 @@ void LLLocalBitmap::updateUserLayers(LLUUID old_id, LLUUID new_id, LLWearableTyp
gAgentAvatarp->setLocalTexture(reg_texind, gTextureList.getImage(new_id), FALSE, index);
gAgentAvatarp->wearableUpdated(type);
/* telling the manager to rebake once update cycle is fully done */
- LLLocalBitmapMgr::setNeedsRebake();
+ LLLocalBitmapMgr::getInstance()->setNeedsRebake();
}
}
@@ -905,7 +902,7 @@ bool LLLocalBitmapTimer::isRunning()
BOOL LLLocalBitmapTimer::tick()
{
- LLLocalBitmapMgr::doUpdates();
+ LLLocalBitmapMgr::getInstance()->doUpdates();
return FALSE;
}
@@ -914,17 +911,12 @@ BOOL LLLocalBitmapTimer::tick()
/*=======================================*/
LLLocalBitmapMgr::LLLocalBitmapMgr()
{
- // The class is all made of static members, should i even bother instantiating?
}
LLLocalBitmapMgr::~LLLocalBitmapMgr()
{
-}
-
-void LLLocalBitmapMgr::cleanupClass()
-{
- std::for_each(sBitmapList.begin(), sBitmapList.end(), DeletePointer());
- sBitmapList.clear();
+ std::for_each(mBitmapList.begin(), mBitmapList.end(), DeletePointer());
+ mBitmapList.clear();
}
bool LLLocalBitmapMgr::addUnit()
@@ -934,7 +926,7 @@ bool LLLocalBitmapMgr::addUnit()
LLFilePicker& picker = LLFilePicker::instance();
if (picker.getMultipleOpenFiles(LLFilePicker::FFLOAD_IMAGE))
{
- sTimer.stopTimer();
+ mTimer.stopTimer();
std::string filename = picker.getFirstFile();
while(!filename.empty())
@@ -949,7 +941,7 @@ bool LLLocalBitmapMgr::addUnit()
if (unit->getValid())
{
- sBitmapList.push_back(unit);
+ mBitmapList.push_back(unit);
add_successful = true;
}
else
@@ -968,7 +960,7 @@ bool LLLocalBitmapMgr::addUnit()
filename = picker.getNextFile();
}
- sTimer.startTimer();
+ mTimer.startTimer();
}
return add_successful;
@@ -1007,10 +999,10 @@ bool LLLocalBitmapMgr::checkTextureDimensions(std::string filename)
void LLLocalBitmapMgr::delUnit(LLUUID tracking_id)
{
- if (!sBitmapList.empty())
+ if (!mBitmapList.empty())
{
std::vector<LLLocalBitmap*> to_delete;
- for (local_list_iter iter = sBitmapList.begin(); iter != sBitmapList.end(); iter++)
+ for (local_list_iter iter = mBitmapList.begin(); iter != mBitmapList.end(); iter++)
{ /* finding which ones we want deleted and making a separate list */
LLLocalBitmap* unit = *iter;
if (unit->getTrackingID() == tracking_id)
@@ -1023,7 +1015,7 @@ void LLLocalBitmapMgr::delUnit(LLUUID tracking_id)
del_iter != to_delete.end(); del_iter++)
{ /* iterating over a temporary list, hence preserving the iterator validity while deleting. */
LLLocalBitmap* unit = *del_iter;
- sBitmapList.remove(unit);
+ mBitmapList.remove(unit);
delete unit;
unit = NULL;
}
@@ -1034,7 +1026,7 @@ LLUUID LLLocalBitmapMgr::getWorldID(LLUUID tracking_id)
{
LLUUID world_id = LLUUID::null;
- for (local_list_iter iter = sBitmapList.begin(); iter != sBitmapList.end(); iter++)
+ for (local_list_iter iter = mBitmapList.begin(); iter != mBitmapList.end(); iter++)
{
LLLocalBitmap* unit = *iter;
if (unit->getTrackingID() == tracking_id)
@@ -1050,7 +1042,7 @@ std::string LLLocalBitmapMgr::getFilename(LLUUID tracking_id)
{
std::string filename = "";
- for (local_list_iter iter = sBitmapList.begin(); iter != sBitmapList.end(); iter++)
+ for (local_list_iter iter = mBitmapList.begin(); iter != mBitmapList.end(); iter++)
{
LLLocalBitmap* unit = *iter;
if (unit->getTrackingID() == tracking_id)
@@ -1068,10 +1060,10 @@ void LLLocalBitmapMgr::feedScrollList(LLScrollListCtrl* ctrl)
{
ctrl->clearRows();
- if (!sBitmapList.empty())
+ if (!mBitmapList.empty())
{
- for (local_list_iter iter = sBitmapList.begin();
- iter != sBitmapList.end(); iter++)
+ for (local_list_iter iter = mBitmapList.begin();
+ iter != mBitmapList.end(); iter++)
{
LLSD element;
element["columns"][0]["column"] = "unit_name";
@@ -1092,29 +1084,29 @@ void LLLocalBitmapMgr::feedScrollList(LLScrollListCtrl* ctrl)
void LLLocalBitmapMgr::doUpdates()
{
// preventing theoretical overlap in cases with huge number of loaded images.
- sTimer.stopTimer();
- sNeedsRebake = false;
+ mTimer.stopTimer();
+ mNeedsRebake = false;
- for (local_list_iter iter = sBitmapList.begin(); iter != sBitmapList.end(); iter++)
+ for (local_list_iter iter = mBitmapList.begin(); iter != mBitmapList.end(); iter++)
{
(*iter)->updateSelf();
}
doRebake();
- sTimer.startTimer();
+ mTimer.startTimer();
}
void LLLocalBitmapMgr::setNeedsRebake()
{
- sNeedsRebake = true;
+ mNeedsRebake = true;
}
void LLLocalBitmapMgr::doRebake()
{ /* separated that from doUpdates to insure a rebake can be called separately during deletion */
- if (sNeedsRebake)
+ if (mNeedsRebake)
{
gAgentAvatarp->forceBakeAllTextures(LL_LOCAL_SLAM_FOR_DEBUG);
- sNeedsRebake = false;
+ mNeedsRebake = false;
}
}
diff --git a/indra/newview/lllocalbitmaps.h b/indra/newview/lllocalbitmaps.h
index ee4161fb45..f6cc1e919e 100644
--- a/indra/newview/lllocalbitmaps.h
+++ b/indra/newview/lllocalbitmaps.h
@@ -110,31 +110,28 @@ class LLLocalBitmapTimer : public LLEventTimer
};
-class LLLocalBitmapMgr
+class LLLocalBitmapMgr : public LLSingleton<LLLocalBitmapMgr>
{
- public:
- LLLocalBitmapMgr();
- ~LLLocalBitmapMgr();
-
- public:
- static void cleanupClass();
- static bool addUnit();
- static void delUnit(LLUUID tracking_id);
- static bool checkTextureDimensions(std::string filename);
-
- static LLUUID getWorldID(LLUUID tracking_id);
- static std::string getFilename(LLUUID tracking_id);
-
- static void feedScrollList(LLScrollListCtrl* ctrl);
- static void doUpdates();
- static void setNeedsRebake();
- static void doRebake();
-
- private:
- static std::list<LLLocalBitmap*> sBitmapList;
- static LLLocalBitmapTimer sTimer;
- static bool sNeedsRebake;
- typedef std::list<LLLocalBitmap*>::iterator local_list_iter;
+ LLSINGLETON(LLLocalBitmapMgr);
+ ~LLLocalBitmapMgr();
+public:
+ bool addUnit();
+ void delUnit(LLUUID tracking_id);
+ bool checkTextureDimensions(std::string filename);
+
+ LLUUID getWorldID(LLUUID tracking_id);
+ std::string getFilename(LLUUID tracking_id);
+
+ void feedScrollList(LLScrollListCtrl* ctrl);
+ void doUpdates();
+ void setNeedsRebake();
+ void doRebake();
+
+private:
+ std::list<LLLocalBitmap*> mBitmapList;
+ LLLocalBitmapTimer mTimer;
+ bool mNeedsRebake;
+ typedef std::list<LLLocalBitmap*>::iterator local_list_iter;
};
#endif
diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp
index 11bc1425f9..42b5ff3890 100644
--- a/indra/newview/lllocationinputctrl.cpp
+++ b/indra/newview/lllocationinputctrl.cpp
@@ -666,7 +666,7 @@ void LLLocationInputCtrl::onAgentParcelChange()
void LLLocationInputCtrl::onMaturityButtonClicked()
{
- LLUI::sHelpImpl->showTopic(mMaturityHelpTopic);
+ LLUI::getInstance()->mHelpImpl->showTopic(mMaturityHelpTopic);
}
void LLLocationInputCtrl::onRegionBoundaryCrossed()
diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp
index 1bdeddbcfe..453bf17b11 100644
--- a/indra/newview/lllogchat.cpp
+++ b/indra/newview/lllogchat.cpp
@@ -209,11 +209,24 @@ LLLogChatTimeScanner::LLLogChatTimeScanner()
mTimeStream.imbue(std::locale(mTimeStream.getloc(), new time_input_facet(DATE_FORMAT)));
}
-LLLogChat::save_history_signal_t * LLLogChat::sSaveHistorySignal = NULL;
+LLLogChat::LLLogChat()
+: mSaveHistorySignal(NULL) // only needed in preferences
+{
+ mHistoryThreadsMutex = new LLMutex();
+}
-std::map<LLUUID,LLLoadHistoryThread *> LLLogChat::sLoadHistoryThreads;
-std::map<LLUUID,LLDeleteHistoryThread *> LLLogChat::sDeleteHistoryThreads;
-LLMutex* LLLogChat::sHistoryThreadsMutex = NULL;
+LLLogChat::~LLLogChat()
+{
+ delete mHistoryThreadsMutex;
+ mHistoryThreadsMutex = NULL;
+
+ if (mSaveHistorySignal)
+ {
+ mSaveHistorySignal->disconnect_all_slots();
+ delete mSaveHistorySignal;
+ mSaveHistorySignal = NULL;
+ }
+}
//static
@@ -338,10 +351,7 @@ void LLLogChat::saveHistory(const std::string& filename,
file.close();
- if (NULL != sSaveHistorySignal)
- {
- (*sSaveHistorySignal)();
- }
+ LLLogChat::getInstance()->triggerHistorySignal();
}
// static
@@ -416,13 +426,12 @@ void LLLogChat::loadChatHistory(const std::string& file_name, std::list<LLSD>& m
fclose(fptr);
}
-// static
bool LLLogChat::historyThreadsFinished(LLUUID session_id)
{
LLMutexLock lock(historyThreadsMutex());
bool finished = true;
- std::map<LLUUID,LLLoadHistoryThread *>::iterator it = sLoadHistoryThreads.find(session_id);
- if (it != sLoadHistoryThreads.end())
+ std::map<LLUUID,LLLoadHistoryThread *>::iterator it = mLoadHistoryThreads.find(session_id);
+ if (it != mLoadHistoryThreads.end())
{
finished = it->second->isFinished();
}
@@ -430,95 +439,93 @@ bool LLLogChat::historyThreadsFinished(LLUUID session_id)
{
return false;
}
- std::map<LLUUID,LLDeleteHistoryThread *>::iterator dit = sDeleteHistoryThreads.find(session_id);
- if (dit != sDeleteHistoryThreads.end())
+ std::map<LLUUID,LLDeleteHistoryThread *>::iterator dit = mDeleteHistoryThreads.find(session_id);
+ if (dit != mDeleteHistoryThreads.end())
{
finished = finished && dit->second->isFinished();
}
return finished;
}
-// static
LLLoadHistoryThread* LLLogChat::getLoadHistoryThread(LLUUID session_id)
{
LLMutexLock lock(historyThreadsMutex());
- std::map<LLUUID,LLLoadHistoryThread *>::iterator it = sLoadHistoryThreads.find(session_id);
- if (it != sLoadHistoryThreads.end())
+ std::map<LLUUID,LLLoadHistoryThread *>::iterator it = mLoadHistoryThreads.find(session_id);
+ if (it != mLoadHistoryThreads.end())
{
return it->second;
}
return NULL;
}
-// static
LLDeleteHistoryThread* LLLogChat::getDeleteHistoryThread(LLUUID session_id)
{
LLMutexLock lock(historyThreadsMutex());
- std::map<LLUUID,LLDeleteHistoryThread *>::iterator it = sDeleteHistoryThreads.find(session_id);
- if (it != sDeleteHistoryThreads.end())
+ std::map<LLUUID,LLDeleteHistoryThread *>::iterator it = mDeleteHistoryThreads.find(session_id);
+ if (it != mDeleteHistoryThreads.end())
{
return it->second;
}
return NULL;
}
-// static
bool LLLogChat::addLoadHistoryThread(LLUUID& session_id, LLLoadHistoryThread* lthread)
{
LLMutexLock lock(historyThreadsMutex());
- std::map<LLUUID,LLLoadHistoryThread *>::const_iterator it = sLoadHistoryThreads.find(session_id);
- if (it != sLoadHistoryThreads.end())
+ std::map<LLUUID,LLLoadHistoryThread *>::const_iterator it = mLoadHistoryThreads.find(session_id);
+ if (it != mLoadHistoryThreads.end())
{
return false;
}
- sLoadHistoryThreads[session_id] = lthread;
+ mLoadHistoryThreads[session_id] = lthread;
return true;
}
-// static
bool LLLogChat::addDeleteHistoryThread(LLUUID& session_id, LLDeleteHistoryThread* dthread)
{
LLMutexLock lock(historyThreadsMutex());
- std::map<LLUUID,LLDeleteHistoryThread *>::const_iterator it = sDeleteHistoryThreads.find(session_id);
- if (it != sDeleteHistoryThreads.end())
+ std::map<LLUUID,LLDeleteHistoryThread *>::const_iterator it = mDeleteHistoryThreads.find(session_id);
+ if (it != mDeleteHistoryThreads.end())
{
return false;
}
- sDeleteHistoryThreads[session_id] = dthread;
+ mDeleteHistoryThreads[session_id] = dthread;
return true;
}
-// static
void LLLogChat::cleanupHistoryThreads()
{
LLMutexLock lock(historyThreadsMutex());
std::vector<LLUUID> uuids;
- std::map<LLUUID,LLLoadHistoryThread *>::iterator lit = sLoadHistoryThreads.begin();
- for (; lit != sLoadHistoryThreads.end(); lit++)
+ std::map<LLUUID,LLLoadHistoryThread *>::iterator lit = mLoadHistoryThreads.begin();
+ for (; lit != mLoadHistoryThreads.end(); lit++)
{
- if (lit->second->isFinished() && sDeleteHistoryThreads[lit->first]->isFinished())
+ if (lit->second->isFinished() && mDeleteHistoryThreads[lit->first]->isFinished())
{
delete lit->second;
- delete sDeleteHistoryThreads[lit->first];
+ delete mDeleteHistoryThreads[lit->first];
uuids.push_back(lit->first);
}
}
std::vector<LLUUID>::iterator uuid_it = uuids.begin();
for ( ;uuid_it != uuids.end(); uuid_it++)
{
- sLoadHistoryThreads.erase(*uuid_it);
- sDeleteHistoryThreads.erase(*uuid_it);
+ mLoadHistoryThreads.erase(*uuid_it);
+ mDeleteHistoryThreads.erase(*uuid_it);
}
}
-//static
LLMutex* LLLogChat::historyThreadsMutex()
{
- if (sHistoryThreadsMutex == NULL)
- {
- sHistoryThreadsMutex = new LLMutex();
- }
- return sHistoryThreadsMutex;
+ return mHistoryThreadsMutex;
+}
+
+void LLLogChat::triggerHistorySignal()
+{
+ if (NULL != mSaveHistorySignal)
+ {
+ (*mSaveHistorySignal)();
+ }
}
// static
@@ -596,15 +603,14 @@ void LLLogChat::getListOfTranscriptBackupFiles(std::vector<std::string>& list_of
findTranscriptFiles(pattern, list_of_transcriptions);
}
-//static
boost::signals2::connection LLLogChat::setSaveHistorySignal(const save_history_signal_t::slot_type& cb)
{
- if (NULL == sSaveHistorySignal)
+ if (NULL == mSaveHistorySignal)
{
- sSaveHistorySignal = new save_history_signal_t();
+ mSaveHistorySignal = new save_history_signal_t();
}
- return sSaveHistorySignal->connect(cb);
+ return mSaveHistorySignal->connect(cb);
}
//static
diff --git a/indra/newview/lllogchat.h b/indra/newview/lllogchat.h
index fcbd38a044..b71a34ae0a 100644
--- a/indra/newview/lllogchat.h
+++ b/indra/newview/lllogchat.h
@@ -79,8 +79,10 @@ public:
static void deleteHistory();
};
-class LLLogChat
+class LLLogChat : public LLSingleton<LLLogChat>
{
+ LLSINGLETON(LLLogChat);
+ ~LLLogChat();
public:
// status values for callback function
enum ELogLineType {
@@ -107,7 +109,7 @@ public:
static void loadChatHistory(const std::string& file_name, std::list<LLSD>& messages, const LLSD& load_params = LLSD());
typedef boost::signals2::signal<void ()> save_history_signal_t;
- static boost::signals2::connection setSaveHistorySignal(const save_history_signal_t::slot_type& cb);
+ boost::signals2::connection setSaveHistorySignal(const save_history_signal_t::slot_type& cb);
static bool moveTranscripts(const std::string currentDirectory,
const std::string newDirectory,
@@ -123,21 +125,23 @@ public:
static bool isAdHocTranscriptExist(std::string file_name);
static bool isTranscriptFileFound(std::string fullname);
- static bool historyThreadsFinished(LLUUID session_id);
- static LLLoadHistoryThread* getLoadHistoryThread(LLUUID session_id);
- static LLDeleteHistoryThread* getDeleteHistoryThread(LLUUID session_id);
- static bool addLoadHistoryThread(LLUUID& session_id, LLLoadHistoryThread* lthread);
- static bool addDeleteHistoryThread(LLUUID& session_id, LLDeleteHistoryThread* dthread);
- static void cleanupHistoryThreads();
+ bool historyThreadsFinished(LLUUID session_id);
+ LLLoadHistoryThread* getLoadHistoryThread(LLUUID session_id);
+ LLDeleteHistoryThread* getDeleteHistoryThread(LLUUID session_id);
+ bool addLoadHistoryThread(LLUUID& session_id, LLLoadHistoryThread* lthread);
+ bool addDeleteHistoryThread(LLUUID& session_id, LLDeleteHistoryThread* dthread);
+ void cleanupHistoryThreads();
private:
static std::string cleanFileName(std::string filename);
- static save_history_signal_t * sSaveHistorySignal;
- static std::map<LLUUID,LLLoadHistoryThread *> sLoadHistoryThreads;
- static std::map<LLUUID,LLDeleteHistoryThread *> sDeleteHistoryThreads;
- static LLMutex* sHistoryThreadsMutex;
- static LLMutex* historyThreadsMutex();
+ LLMutex* historyThreadsMutex();
+ void triggerHistorySignal();
+
+ save_history_signal_t * mSaveHistorySignal;
+ std::map<LLUUID,LLLoadHistoryThread *> mLoadHistoryThreads;
+ std::map<LLUUID,LLDeleteHistoryThread *> mDeleteHistoryThreads;
+ LLMutex* mHistoryThreadsMutex;
};
/**
diff --git a/indra/newview/llmaniptranslate.cpp b/indra/newview/llmaniptranslate.cpp
index 92a09357c8..9248c160c6 100644
--- a/indra/newview/llmaniptranslate.cpp
+++ b/indra/newview/llmaniptranslate.cpp
@@ -386,7 +386,7 @@ BOOL LLManipTranslate::handleMouseDownOnPart( S32 x, S32 y, MASK mask )
}
else if (gSavedSettings.getBOOL("SnapToMouseCursor"))
{
- LLUI::setMousePositionScreen(mouse_pos.mX, mouse_pos.mY);
+ LLUI::getInstance()->setMousePositionScreen(mouse_pos.mX, mouse_pos.mY);
x = mouse_pos.mX;
y = mouse_pos.mY;
}
diff --git a/indra/newview/llmarketplacefunctions.cpp b/indra/newview/llmarketplacefunctions.cpp
index a0e19f2d19..805c25508f 100644
--- a/indra/newview/llmarketplacefunctions.cpp
+++ b/indra/newview/llmarketplacefunctions.cpp
@@ -219,7 +219,7 @@ namespace LLMarketplaceImport
httpHeaders->append(HTTP_OUT_HEADER_CONNECTION, "Keep-Alive");
httpHeaders->append(HTTP_OUT_HEADER_COOKIE, sMarketplaceCookie);
httpHeaders->append(HTTP_OUT_HEADER_CONTENT_TYPE, HTTP_CONTENT_XML);
- httpHeaders->append(HTTP_OUT_HEADER_USER_AGENT, LLViewerMedia::getCurrentUserAgent());
+ httpHeaders->append(HTTP_OUT_HEADER_USER_AGENT, LLViewerMedia::getInstance()->getCurrentUserAgent());
LLSD result = httpAdapter->postAndSuspend(httpRequest, url, LLSD(), httpOpts, httpHeaders);
@@ -283,11 +283,11 @@ namespace LLMarketplaceImport
httpHeaders->append(HTTP_OUT_HEADER_ACCEPT, "*/*");
httpHeaders->append(HTTP_OUT_HEADER_COOKIE, sMarketplaceCookie);
httpHeaders->append(HTTP_OUT_HEADER_CONTENT_TYPE, HTTP_CONTENT_LLSD_XML);
- httpHeaders->append(HTTP_OUT_HEADER_USER_AGENT, LLViewerMedia::getCurrentUserAgent());
+ httpHeaders->append(HTTP_OUT_HEADER_USER_AGENT, LLViewerMedia::getInstance()->getCurrentUserAgent());
}
else
{
- httpHeaders = LLViewerMedia::getHttpHeaders();
+ httpHeaders = LLViewerMedia::getInstance()->getHttpHeaders();
}
LLSD result = httpAdapter->getAndSuspend(httpRequest, url, httpOpts, httpHeaders);
diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp
index 7f6955d08c..b399ab9bc4 100644
--- a/indra/newview/llmediactrl.cpp
+++ b/indra/newview/llmediactrl.cpp
@@ -691,7 +691,7 @@ bool LLMediaCtrl::ensureMediaSourceExists()
if(mMediaSource.isNull())
{
// If we don't already have a media source, try to create one.
- mMediaSource = LLViewerMedia::newMediaImpl(mMediaTextureID, mTextureWidth, mTextureHeight);
+ mMediaSource = LLViewerMedia::getInstance()->newMediaImpl(mMediaTextureID, mTextureWidth, mTextureHeight);
if ( mMediaSource )
{
mMediaSource->setUsedInUI(true);
@@ -1098,7 +1098,7 @@ void LLMediaCtrl::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
auth_request_params.substitutions = args;
auth_request_params.payload = LLSD().with("media_id", mMediaTextureID);
- auth_request_params.functor.function = boost::bind(&LLViewerMedia::onAuthSubmit, _1, _2);
+ auth_request_params.functor.function = boost::bind(&LLViewerMedia::authSubmitCallback, _1, _2);
LLNotifications::instance().add(auth_request_params);
};
break;
@@ -1144,7 +1144,7 @@ void LLMediaCtrl::onPopup(const LLSD& notification, const LLSD& response)
else
{
// Make sure the opening instance knows its window open request was denied, so it can clean things up.
- LLViewerMedia::proxyWindowClosed(notification["payload"]["uuid"]);
+ LLViewerMedia::getInstance()->proxyWindowClosed(notification["payload"]["uuid"]);
}
}
diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp
index 19f238d99a..8fc356c928 100644
--- a/indra/newview/llmoveview.cpp
+++ b/indra/newview/llmoveview.cpp
@@ -568,7 +568,7 @@ BOOL LLPanelStandStopFlying::postBuild()
mStandButton->setCommitCallback(boost::bind(&LLPanelStandStopFlying::onStandButtonClick, this));
mStandButton->setCommitCallback(boost::bind(&LLFloaterMove::enableInstance));
mStandButton->setVisible(FALSE);
- LLHints::registerHintTarget("stand_btn", mStandButton->getHandle());
+ LLHints::getInstance()->registerHintTarget("stand_btn", mStandButton->getHandle());
mStopFlyingButton = getChild<LLButton>("stop_fly_btn");
//mStopFlyingButton->setCommitCallback(boost::bind(&LLFloaterMove::setFlyingMode, FALSE));
@@ -670,7 +670,7 @@ LLPanelStandStopFlying* LLPanelStandStopFlying::getStandStopFlyingPanel()
panel->buildFromFile("panel_stand_stop_flying.xml");
panel->setVisible(FALSE);
- //LLUI::getRootView()->addChild(panel);
+ //LLUI::getInstance()->getRootView()->addChild(panel);
LL_INFOS() << "Build LLPanelStandStopFlying panel" << LL_ENDL;
diff --git a/indra/newview/llnamelistctrl.cpp b/indra/newview/llnamelistctrl.cpp
index d7c5364fba..3209d23e43 100644
--- a/indra/newview/llnamelistctrl.cpp
+++ b/indra/newview/llnamelistctrl.cpp
@@ -154,7 +154,7 @@ void LLNameListCtrl::mouseOverHighlightNthItem( S32 target_index )
bool is_mouse_over_name_cell = false;
S32 mouse_x, mouse_y;
- LLUI::getMousePositionLocal(this, &mouse_x, &mouse_y);
+ LLUI::getInstance()->getMousePositionLocal(this, &mouse_x, &mouse_y);
S32 column_index = getColumnIndexFromOffset(mouse_x);
LLScrollListItem* hit_item = hitItem(mouse_x, mouse_y);
diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp
index cfe2e6bf6a..179c64b5c5 100644
--- a/indra/newview/llnavigationbar.cpp
+++ b/indra/newview/llnavigationbar.cpp
@@ -320,7 +320,7 @@ BOOL LLNavigationBar::postBuild()
LLTeleportHistory::getInstance()->setHistoryChangedCallback(
boost::bind(&LLNavigationBar::onTeleportHistoryChanged, this));
- LLHints::registerHintTarget("nav_bar", getHandle());
+ LLHints::getInstance()->registerHintTarget("nav_bar", getHandle());
mNavigationPanel = getChild<LLLayoutPanel>("navigation_layout_panel");
mFavoritePanel = getChild<LLLayoutPanel>("favorites_layout_panel");
diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp
index 248c361ca4..fc1039b372 100644
--- a/indra/newview/llnetmap.cpp
+++ b/indra/newview/llnetmap.cpp
@@ -329,7 +329,7 @@ void LLNetMap::draw()
S32 local_mouse_x;
S32 local_mouse_y;
//localMouse(&local_mouse_x, &local_mouse_y);
- LLUI::getMousePositionLocal(this, &local_mouse_x, &local_mouse_y);
+ LLUI::getInstance()->getMousePositionLocal(this, &local_mouse_x, &local_mouse_y);
mClosestAgentToCursor.setNull();
F32 closest_dist_squared = F32_MAX; // value will be overridden in the loop
F32 min_pick_dist_squared = (mDotRadius * MIN_PICK_SCALE) * (mDotRadius * MIN_PICK_SCALE);
@@ -835,7 +835,7 @@ BOOL LLNetMap::handleMouseUp( S32 x, S32 y, MASK mask )
LLRect clip_rect = getRect();
clip_rect.stretch(-8);
clip_rect.clipPointToRect(mMouseDown.mX, mMouseDown.mY, local_x, local_y);
- LLUI::setMousePositionLocal(this, local_x, local_y);
+ LLUI::getInstance()->setMousePositionLocal(this, local_x, local_y);
// finish the pan
mPanning = false;
diff --git a/indra/newview/llnotificationhandlerutil.cpp b/indra/newview/llnotificationhandlerutil.cpp
index 6a58196760..9a3f1a853a 100644
--- a/indra/newview/llnotificationhandlerutil.cpp
+++ b/indra/newview/llnotificationhandlerutil.cpp
@@ -177,7 +177,7 @@ void LLHandlerUtil::logGroupNoticeToIMGroup(
{
// Legacy support and fallback method
// if we can't retrieve sender id from group notice system message, try to lookup it from cache
- sender_id = LLAvatarNameCache::findIdByName(sender_name);
+ sender_id = LLAvatarNameCache::getInstance()->findIdByName(sender_name);
}
logToIM(IM_SESSION_GROUP_START, group_name, sender_name, payload["message"],
diff --git a/indra/newview/llnotificationhinthandler.cpp b/indra/newview/llnotificationhinthandler.cpp
index f40369a2e0..f1226c53ff 100644
--- a/indra/newview/llnotificationhinthandler.cpp
+++ b/indra/newview/llnotificationhinthandler.cpp
@@ -40,17 +40,17 @@ LLHintHandler::LLHintHandler()
void LLHintHandler::onAdd(LLNotificationPtr p)
{
- LLHints::show(p);
+ LLHints::getInstance()->show(p);
}
void LLHintHandler::onLoad(LLNotificationPtr p)
{
- LLHints::show(p);
+ LLHints::getInstance()->show(p);
}
void LLHintHandler::onDelete(LLNotificationPtr p)
{
- LLHints::hide(p);
+ LLHints::getInstance()->hide(p);
}
bool LLHintHandler::processNotification(const LLNotificationPtr& p)
diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp
index c686aab821..5742b5ad1a 100644
--- a/indra/newview/llpanelface.cpp
+++ b/indra/newview/llpanelface.cpp
@@ -979,7 +979,7 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/)
break;
}
- if(LLViewerMedia::textureHasMedia(id))
+ if(LLViewerMedia::getInstance()->textureHasMedia(id))
{
getChildView("button align")->setEnabled(editable);
}
@@ -2517,13 +2517,13 @@ struct LLPanelFaceSetMediaFunctor : public LLSelectedTEFunctor
const LLMediaEntry* mep = tep->hasMedia() ? tep->getMediaData() : NULL;
if ( mep )
{
- pMediaImpl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID());
+ pMediaImpl = LLViewerMedia::getInstance()->getMediaImplFromTextureID(mep->getMediaID());
}
if ( pMediaImpl.isNull())
{
// If we didn't find face media for this face, check whether this face is showing parcel media.
- pMediaImpl = LLViewerMedia::getMediaImplFromTextureID(tep->getID());
+ pMediaImpl = LLViewerMedia::getInstance()->getMediaImplFromTextureID(tep->getID());
}
if ( pMediaImpl.notNull())
@@ -2691,7 +2691,7 @@ void LLPanelFace::LLSelectedTE::getTexId(LLUUID& id, bool& identical)
id = image->getID();
}
- if (!id.isNull() && LLViewerMedia::textureHasMedia(id))
+ if (!id.isNull() && LLViewerMedia::getInstance()->textureHasMedia(id))
{
if (te)
{
diff --git a/indra/newview/llpanelmediasettingsgeneral.cpp b/indra/newview/llpanelmediasettingsgeneral.cpp
index 3522189842..9730f0f16d 100644
--- a/indra/newview/llpanelmediasettingsgeneral.cpp
+++ b/indra/newview/llpanelmediasettingsgeneral.cpp
@@ -457,7 +457,7 @@ bool LLPanelMediaSettingsGeneral::navigateHomeSelectedFace(bool only_if_current_
if (!only_if_current_is_empty || (media_data->getCurrentURL().empty() && media_data->getAutoPlay()))
{
viewer_media_t media_impl =
- LLViewerMedia::getMediaImplFromTextureID(object->getTE(face)->getMediaData()->getMediaID());
+ LLViewerMedia::getInstance()->getMediaImplFromTextureID(object->getTE(face)->getMediaData()->getMediaID());
if(media_impl)
{
media_impl->navigateHome();
diff --git a/indra/newview/llpanelnearbymedia.cpp b/indra/newview/llpanelnearbymedia.cpp
index f3a2ed9408..2dca55514d 100644
--- a/indra/newview/llpanelnearbymedia.cpp
+++ b/indra/newview/llpanelnearbymedia.cpp
@@ -543,9 +543,10 @@ void LLPanelNearByMedia::refreshParcelItems()
// Only show "special parcel items" if "All" or "Within" filter
// (and if media is "enabled")
bool should_include = (choice == MEDIA_CLASS_ALL || choice == MEDIA_CLASS_WITHIN_PARCEL);
-
+ LLViewerMedia* media_inst = LLViewerMedia::getInstance();
+
// First Parcel Media: add or remove it as necessary
- if (gSavedSettings.getBOOL("AudioStreamingMedia") &&should_include && LLViewerMedia::hasParcelMedia())
+ if (gSavedSettings.getBOOL("AudioStreamingMedia") && should_include && media_inst->hasParcelMedia())
{
// Yes, there is parcel media.
if (NULL == mParcelMediaItem)
@@ -566,7 +567,7 @@ void LLPanelNearByMedia::refreshParcelItems()
if (NULL != mParcelMediaItem)
{
std::string name, url, tooltip;
- getNameAndUrlHelper(LLViewerParcelMedia::getParcelMedia(), name, url, "");
+ getNameAndUrlHelper(LLViewerParcelMedia::getInstance()->getParcelMedia(), name, url, "");
if (name.empty() || name == url)
{
tooltip = url;
@@ -575,20 +576,20 @@ void LLPanelNearByMedia::refreshParcelItems()
{
tooltip = name + " : " + url;
}
- LLViewerMediaImpl *impl = LLViewerParcelMedia::getParcelMedia();
+ LLViewerMediaImpl *impl = LLViewerParcelMedia::getInstance()->getParcelMedia();
updateListItem(mParcelMediaItem,
mParcelMediaName,
tooltip,
-2, // Proximity closer than anything else, before Parcel Audio
impl == NULL || impl->isMediaDisabled(),
- impl != NULL && !LLViewerParcelMedia::getURL().empty(),
+ impl != NULL && !LLViewerParcelMedia::getInstance()->getURL().empty(),
impl != NULL && impl->isMediaTimeBased() && impl->isMediaPlaying(),
MEDIA_CLASS_ALL,
"parcel media");
}
// Next Parcel Audio: add or remove it as necessary (don't show if disabled in prefs)
- if (should_include && LLViewerMedia::hasParcelAudio() && gSavedSettings.getBOOL("AudioStreamingMusic"))
+ if (should_include && media_inst->hasParcelAudio() && gSavedSettings.getBOOL("AudioStreamingMusic"))
{
// Yes, there is parcel audio.
if (NULL == mParcelAudioItem)
@@ -608,10 +609,10 @@ void LLPanelNearByMedia::refreshParcelItems()
// ... then update it
if (NULL != mParcelAudioItem)
{
- bool is_playing = LLViewerMedia::isParcelAudioPlaying();
+ bool is_playing = media_inst->isParcelAudioPlaying();
std::string url;
- url = LLViewerMedia::getParcelAudioURL();
+ url = media_inst->getParcelAudioURL();
updateListItem(mParcelAudioItem,
mParcelAudioName,
@@ -653,7 +654,8 @@ void LLPanelNearByMedia::refreshList()
refreshParcelItems();
// Get the canonical list from LLViewerMedia
- LLViewerMedia::impl_list impls = LLViewerMedia::getPriorityList();
+ LLViewerMedia* media_inst = LLViewerMedia::getInstance();
+ LLViewerMedia::impl_list impls = media_inst->getPriorityList();
LLViewerMedia::impl_list::iterator priority_iter;
U32 enabled_count = 0;
@@ -706,17 +708,17 @@ void LLPanelNearByMedia::refreshList()
}
mDisableAllCtrl->setEnabled((gSavedSettings.getBOOL("AudioStreamingMusic") ||
gSavedSettings.getBOOL("AudioStreamingMedia")) &&
- (LLViewerMedia::isAnyMediaShowing() ||
- LLViewerMedia::isParcelMediaPlaying() ||
- LLViewerMedia::isParcelAudioPlaying()));
+ (media_inst->isAnyMediaShowing() ||
+ media_inst->isParcelMediaPlaying() ||
+ media_inst->isParcelAudioPlaying()));
mEnableAllCtrl->setEnabled( (gSavedSettings.getBOOL("AudioStreamingMusic") ||
gSavedSettings.getBOOL("AudioStreamingMedia")) &&
(disabled_count > 0 ||
// parcel media (if we have it, and it isn't playing, enable "start")
- (LLViewerMedia::hasParcelMedia() && ! LLViewerMedia::isParcelMediaPlaying()) ||
+ (media_inst->hasParcelMedia() && ! media_inst->isParcelMediaPlaying()) ||
// parcel audio (if we have it, and it isn't playing, enable "start")
- (LLViewerMedia::hasParcelAudio() && ! LLViewerMedia::isParcelAudioPlaying())));
+ (media_inst->hasParcelAudio() && ! media_inst->isParcelAudioPlaying())));
// Iterate over the rows in the control, updating ones whose impl exists, and deleting ones whose impl has gone away.
std::vector<LLScrollListItem*> items = mMediaList->getAllData();
@@ -731,7 +733,7 @@ void LLPanelNearByMedia::refreshList()
if (row_id != PARCEL_MEDIA_LIST_ITEM_UUID &&
row_id != PARCEL_AUDIO_LIST_ITEM_UUID)
{
- LLViewerMediaImpl* impl = LLViewerMedia::getMediaImplFromTextureID(row_id);
+ LLViewerMediaImpl* impl = media_inst->getMediaImplFromTextureID(row_id);
if(impl)
{
updateListItem(item, impl);
@@ -776,26 +778,26 @@ void LLPanelNearByMedia::updateColumns()
void LLPanelNearByMedia::onClickEnableAll()
{
- LLViewerMedia::setAllMediaEnabled(true);
+ LLViewerMedia::getInstance()->setAllMediaEnabled(true);
}
void LLPanelNearByMedia::onClickDisableAll()
{
- LLViewerMedia::setAllMediaEnabled(false);
+ LLViewerMedia::getInstance()->setAllMediaEnabled(false);
}
void LLPanelNearByMedia::onClickEnableParcelMedia()
{
- if ( ! LLViewerMedia::isParcelMediaPlaying() )
+ if ( ! LLViewerMedia::getInstance()->isParcelMediaPlaying() )
{
- LLViewerParcelMedia::play(LLViewerParcelMgr::getInstance()->getAgentParcel());
+ LLViewerParcelMedia::getInstance()->play(LLViewerParcelMgr::getInstance()->getAgentParcel());
}
}
void LLPanelNearByMedia::onClickDisableParcelMedia()
{
// This actually unloads the impl, as opposed to "stop"ping the media
- LLViewerParcelMedia::stop();
+ LLViewerParcelMedia::getInstance()->stop();
}
void LLPanelNearByMedia::onCheckItem(LLUICtrl* ctrl, const LLUUID &row_id)
@@ -832,7 +834,7 @@ bool LLPanelNearByMedia::setDisabled(const LLUUID &row_id, bool disabled)
return true;
}
else {
- LLViewerMediaImpl* impl = LLViewerMedia::getMediaImplFromTextureID(row_id);
+ LLViewerMediaImpl* impl = LLViewerMedia::getInstance()->getMediaImplFromTextureID(row_id);
if(impl)
{
impl->setDisabled(disabled, true);
@@ -853,22 +855,22 @@ void LLPanelNearByMedia::onZoomMedia(void* user_data)
void LLPanelNearByMedia::onClickParcelMediaPlay()
{
- LLViewerParcelMedia::play(LLViewerParcelMgr::getInstance()->getAgentParcel());
+ LLViewerParcelMedia::getInstance()->play(LLViewerParcelMgr::getInstance()->getAgentParcel());
}
void LLPanelNearByMedia::onClickParcelMediaStop()
{
- if (LLViewerParcelMedia::getParcelMedia())
+ if (LLViewerParcelMedia::getInstance()->getParcelMedia())
{
// This stops the media playing, as opposed to unloading it like
// LLViewerParcelMedia::stop() does
- LLViewerParcelMedia::getParcelMedia()->stop();
+ LLViewerParcelMedia::getInstance()->getParcelMedia()->stop();
}
}
void LLPanelNearByMedia::onClickParcelMediaPause()
{
- LLViewerParcelMedia::pause();
+ LLViewerParcelMedia::getInstance()->pause();
}
void LLPanelNearByMedia::onClickParcelAudioPlay()
@@ -889,7 +891,7 @@ void LLPanelNearByMedia::onClickParcelAudioPlay()
}
else
{
- LLViewerAudio::getInstance()->startInternetStreamWithAutoFade(LLViewerMedia::getParcelAudioURL());
+ LLViewerAudio::getInstance()->startInternetStreamWithAutoFade(LLViewerMedia::getInstance()->getParcelAudioURL());
}
}
@@ -981,16 +983,17 @@ void LLPanelNearByMedia::onMoreLess()
void LLPanelNearByMedia::updateControls()
{
LLUUID selected_media_id = mMediaList->getValue().asUUID();
+ LLViewerMedia* media_inst = LLViewerMedia::getInstance();
if (selected_media_id == PARCEL_AUDIO_LIST_ITEM_UUID)
{
- if (!LLViewerMedia::hasParcelAudio() || !gSavedSettings.getBOOL("AudioStreamingMusic"))
+ if (!media_inst->getInstance()->hasParcelAudio() || !gSavedSettings.getBOOL("AudioStreamingMusic"))
{
// disable controls if audio streaming music is disabled from preference
showDisabledControls();
}
else {
- showTimeBasedControls(LLViewerMedia::isParcelAudioPlaying(),
+ showTimeBasedControls(media_inst->isParcelAudioPlaying(),
false, // include_zoom
false, // is_zoomed
gSavedSettings.getBOOL("MuteMusic"),
@@ -999,13 +1002,13 @@ void LLPanelNearByMedia::updateControls()
}
else if (selected_media_id == PARCEL_MEDIA_LIST_ITEM_UUID)
{
- if (!LLViewerMedia::hasParcelMedia() || !gSavedSettings.getBOOL("AudioStreamingMedia"))
+ if (!media_inst->hasParcelMedia() || !gSavedSettings.getBOOL("AudioStreamingMedia"))
{
// disable controls if audio streaming media is disabled from preference
showDisabledControls();
}
else {
- LLViewerMediaImpl* impl = LLViewerParcelMedia::getParcelMedia();
+ LLViewerMediaImpl* impl = LLViewerParcelMedia::getInstance()->getParcelMedia();
if (NULL == impl)
{
// Just means it hasn't started yet
@@ -1021,7 +1024,7 @@ void LLPanelNearByMedia::updateControls()
}
else {
// non-time-based parcel media
- showBasicControls(LLViewerMedia::isParcelMediaPlaying(),
+ showBasicControls(media_inst->isParcelMediaPlaying(),
false,
false,
impl->getVolume() == 0.0,
@@ -1030,7 +1033,7 @@ void LLPanelNearByMedia::updateControls()
}
}
else {
- LLViewerMediaImpl* impl = LLViewerMedia::getMediaImplFromTextureID(selected_media_id);
+ LLViewerMediaImpl* impl = media_inst->getMediaImplFromTextureID(selected_media_id);
if (NULL == impl || !gSavedSettings.getBOOL("AudioStreamingMedia"))
{
@@ -1116,7 +1119,7 @@ void LLPanelNearByMedia::onClickSelectedMediaPlay()
if (selected_media_id != PARCEL_AUDIO_LIST_ITEM_UUID)
{
LLViewerMediaImpl *impl = (selected_media_id == PARCEL_MEDIA_LIST_ITEM_UUID) ?
- ((LLViewerMediaImpl*)LLViewerParcelMedia::getParcelMedia()) : LLViewerMedia::getMediaImplFromTextureID(selected_media_id);
+ ((LLViewerMediaImpl*)LLViewerParcelMedia::getInstance()->getParcelMedia()) : LLViewerMedia::getInstance()->getMediaImplFromTextureID(selected_media_id);
if (NULL != impl)
{
if (impl->isMediaTimeBased() && impl->isMediaPaused())
@@ -1127,7 +1130,7 @@ void LLPanelNearByMedia::onClickSelectedMediaPlay()
}
else if (impl->isParcelMedia())
{
- LLViewerParcelMedia::play(LLViewerParcelMgr::getInstance()->getAgentParcel());
+ LLViewerParcelMedia::getInstance()->play(LLViewerParcelMgr::getInstance()->getAgentParcel());
}
}
}
@@ -1145,7 +1148,7 @@ void LLPanelNearByMedia::onClickSelectedMediaPause()
onClickParcelMediaPause();
}
else {
- LLViewerMediaImpl* impl = LLViewerMedia::getMediaImplFromTextureID(selected_media_id);
+ LLViewerMediaImpl* impl = LLViewerMedia::getInstance()->getMediaImplFromTextureID(selected_media_id);
if (NULL != impl && impl->isMediaTimeBased() && impl->isMediaPlaying())
{
impl->pause();
@@ -1162,7 +1165,7 @@ void LLPanelNearByMedia::onClickSelectedMediaMute()
}
else {
LLViewerMediaImpl* impl = (selected_media_id == PARCEL_MEDIA_LIST_ITEM_UUID) ?
- ((LLViewerMediaImpl*)LLViewerParcelMedia::getParcelMedia()) : LLViewerMedia::getMediaImplFromTextureID(selected_media_id);
+ ((LLViewerMediaImpl*)LLViewerParcelMedia::getInstance()->getParcelMedia()) : LLViewerMedia::getInstance()->getMediaImplFromTextureID(selected_media_id);
if (NULL != impl)
{
F32 volume = impl->getVolume();
@@ -1193,7 +1196,7 @@ void LLPanelNearByMedia::onCommitSelectedMediaVolume()
}
else {
LLViewerMediaImpl* impl = (selected_media_id == PARCEL_MEDIA_LIST_ITEM_UUID) ?
- ((LLViewerMediaImpl*)LLViewerParcelMedia::getParcelMedia()) : LLViewerMedia::getMediaImplFromTextureID(selected_media_id);
+ ((LLViewerMediaImpl*)LLViewerParcelMedia::getInstance()->getParcelMedia()) : LLViewerMedia::getInstance()->getMediaImplFromTextureID(selected_media_id);
if (NULL != impl)
{
impl->setVolume(mVolumeSlider->getValueF32());
diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp
index 77bc99da83..c39df3fe8b 100644
--- a/indra/newview/llpanelpicks.cpp
+++ b/indra/newview/llpanelpicks.cpp
@@ -84,7 +84,7 @@ public:
bool handle(const LLSD& params, const LLSD& query_map,
LLMediaCtrl* web)
{
- if (!LLUI::sSettingGroups["config"]->getBOOL("EnablePicks"))
+ if (!LLUI::getInstance()->mSettingGroups["config"]->getBOOL("EnablePicks"))
{
LLNotificationsUtil::add("NoPicks", LLSD(), LLSD(), std::string("SwitchToStandardSkinAndQuit"));
return true;
@@ -198,7 +198,7 @@ public:
bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
{
- if (!LLUI::sSettingGroups["config"]->getBOOL("EnableClassifieds"))
+ if (!LLUI::getInstance()->mSettingGroups["config"]->getBOOL("EnableClassifieds"))
{
LLNotificationsUtil::add("NoClassifieds", LLSD(), LLSD(), std::string("SwitchToStandardSkinAndQuit"));
return true;
diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp
index 48dd45480e..961e259947 100644
--- a/indra/newview/llpanelplaces.cpp
+++ b/indra/newview/llpanelplaces.cpp
@@ -97,7 +97,7 @@ public:
return false;
}
- if (!LLUI::sSettingGroups["config"]->getBOOL("EnablePlaceProfile"))
+ if (!LLUI::getInstance()->mSettingGroups["config"]->getBOOL("EnablePlaceProfile"))
{
LLNotificationsUtil::add("NoPlaceInfo", LLSD(), LLSD(), std::string("SwitchToStandardSkinAndQuit"));
return true;
diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp
index 5f413fc3c0..8105beae1b 100644
--- a/indra/newview/llpanelprimmediacontrols.cpp
+++ b/indra/newview/llpanelprimmediacontrols.cpp
@@ -267,7 +267,7 @@ void LLPanelPrimMediaControls::focusOnTarget()
LLViewerMediaImpl* LLPanelPrimMediaControls::getTargetMediaImpl()
{
- return LLViewerMedia::getMediaImplFromTextureID(mTargetImplID);
+ return LLViewerMedia::getInstance()->getMediaImplFromTextureID(mTargetImplID);
}
LLViewerObject* LLPanelPrimMediaControls::getTargetObject()
diff --git a/indra/newview/llpanelprofile.cpp b/indra/newview/llpanelprofile.cpp
index 8afa35efa0..5f13b223fb 100644
--- a/indra/newview/llpanelprofile.cpp
+++ b/indra/newview/llpanelprofile.cpp
@@ -110,7 +110,7 @@ public:
if (verb == "pay")
{
- if (!LLUI::sSettingGroups["config"]->getBOOL("EnableAvatarPay"))
+ if (!LLUI::getInstance()->mSettingGroups["config"]->getBOOL("EnableAvatarPay"))
{
LLNotificationsUtil::add("NoAvatarPay", LLSD(), LLSD(), std::string("SwitchToStandardSkinAndQuit"));
return true;
diff --git a/indra/newview/llpersistentnotificationstorage.cpp b/indra/newview/llpersistentnotificationstorage.cpp
index 264382ae82..f95ab9928d 100644
--- a/indra/newview/llpersistentnotificationstorage.cpp
+++ b/indra/newview/llpersistentnotificationstorage.cpp
@@ -40,6 +40,7 @@ LLPersistentNotificationStorage::LLPersistentNotificationStorage():
LLNotificationStorage("")
, mLoaded(false)
{
+ initialize();
}
LLPersistentNotificationStorage::~LLPersistentNotificationStorage()
diff --git a/indra/newview/llpersistentnotificationstorage.h b/indra/newview/llpersistentnotificationstorage.h
index 40c9923c74..1fb4487286 100644
--- a/indra/newview/llpersistentnotificationstorage.h
+++ b/indra/newview/llpersistentnotificationstorage.h
@@ -43,7 +43,7 @@ class LLSD;
// be a) serializable(implement LLNotificationResponderInterface),
// b) registered with LLResponderRegistry (found in llpersistentnotificationstorage.cpp).
-class LLPersistentNotificationStorage : public LLSingleton<LLPersistentNotificationStorage>, public LLNotificationStorage
+class LLPersistentNotificationStorage : public LLParamSingleton<LLPersistentNotificationStorage>, public LLNotificationStorage
{
LLSINGLETON(LLPersistentNotificationStorage);
~LLPersistentNotificationStorage();
@@ -53,11 +53,11 @@ public:
void saveNotifications();
void loadNotifications();
- void initialize();
-
protected:
private:
+ void initialize();
+
bool onPersistentChannelChanged(const LLSD& payload);
bool mLoaded;
};
diff --git a/indra/newview/llpopupview.cpp b/indra/newview/llpopupview.cpp
index 153f0930c2..d1a9ca229f 100644
--- a/indra/newview/llpopupview.cpp
+++ b/indra/newview/llpopupview.cpp
@@ -44,13 +44,13 @@ LLPopupView::LLPopupView(const LLPopupView::Params& p)
: LLPanel(p)
{
// register ourself as handler of UI popups
- LLUI::setPopupFuncs(boost::bind(&LLPopupView::addPopup, this, _1), boost::bind(&LLPopupView::removePopup, this, _1), boost::bind(&LLPopupView::clearPopups, this));
+ LLUI::getInstance()->setPopupFuncs(boost::bind(&LLPopupView::addPopup, this, _1), boost::bind(&LLPopupView::removePopup, this, _1), boost::bind(&LLPopupView::clearPopups, this));
}
LLPopupView::~LLPopupView()
{
// set empty callback function so we can't handle popups anymore
- LLUI::setPopupFuncs(LLUI::add_popup_t(), LLUI::remove_popup_t(), LLUI::clear_popups_t());
+ LLUI::getInstance()->setPopupFuncs(LLUI::add_popup_t(), LLUI::remove_popup_t(), LLUI::clear_popups_t());
}
void LLPopupView::draw()
diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp
index f1bb0bc27d..d177384b5a 100644
--- a/indra/newview/llpreviewscript.cpp
+++ b/indra/newview/llpreviewscript.cpp
@@ -885,7 +885,7 @@ bool LLScriptEdCore::handleSaveChangesDialog(const LLSD& notification, const LLS
void LLScriptEdCore::onBtnHelp()
{
- LLUI::sHelpImpl->showTopic(HELP_LSL_PORTAL_TOPIC);
+ LLUI::getInstance()->mHelpImpl->showTopic(HELP_LSL_PORTAL_TOPIC);
}
void LLScriptEdCore::onBtnDynamicHelp()
diff --git a/indra/newview/llprogressview.cpp b/indra/newview/llprogressview.cpp
index c17b86783d..083a913ef8 100644
--- a/indra/newview/llprogressview.cpp
+++ b/indra/newview/llprogressview.cpp
@@ -86,7 +86,7 @@ BOOL LLProgressView::postBuild()
mMediaCtrl->setVisible( false ); // hidden initially
mMediaCtrl->addObserver( this ); // watch events
- LLViewerMedia::setOnlyAudibleMediaTextureID(mMediaCtrl->getTextureID());
+ LLViewerMedia::getInstance()->setOnlyAudibleMediaTextureID(mMediaCtrl->getTextureID());
mCancelBtn = getChild<LLButton>("cancel_btn");
mCancelBtn->setClickedCallback( LLProgressView::onCancelButtonClicked, NULL );
@@ -263,7 +263,7 @@ void LLProgressView::draw()
{
mFadeToWorldTimer.stop();
- LLViewerMedia::setOnlyAudibleMediaTextureID(LLUUID::null);
+ LLViewerMedia::getInstance()->setOnlyAudibleMediaTextureID(LLUUID::null);
// Fade is complete, release focus
gFocusMgr.releaseFocusIfNeeded( this );
diff --git a/indra/newview/llsaveoutfitcombobtn.cpp b/indra/newview/llsaveoutfitcombobtn.cpp
index 32295cd96f..b1cb6d08d0 100644
--- a/indra/newview/llsaveoutfitcombobtn.cpp
+++ b/indra/newview/llsaveoutfitcombobtn.cpp
@@ -56,7 +56,7 @@ LLSaveOutfitComboBtn::LLSaveOutfitComboBtn(LLPanel* parent, bool saveAsDefaultAc
void LLSaveOutfitComboBtn::showSaveMenu()
{
S32 x, y;
- LLUI::getMousePositionLocal(mParent, &x, &y);
+ LLUI::getInstance()->getMousePositionLocal(mParent, &x, &y);
mSaveMenu->updateParent(LLMenuGL::sMenuContainer);
LLMenuGL::showPopup(mParent, mSaveMenu, x, y);
diff --git a/indra/newview/llshareavatarhandler.cpp b/indra/newview/llshareavatarhandler.cpp
index 6b4f1d3dc6..142e00c3f7 100644
--- a/indra/newview/llshareavatarhandler.cpp
+++ b/indra/newview/llshareavatarhandler.cpp
@@ -40,7 +40,7 @@ public:
bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
{
- if (!LLUI::sSettingGroups["config"]->getBOOL("EnableAvatarShare"))
+ if (!LLUI::getInstance()->mSettingGroups["config"]->getBOOL("EnableAvatarShare"))
{
LLNotificationsUtil::add("NoAvatarShare", LLSD(), LLSD(), std::string("SwitchToStandardSkinAndQuit"));
return true;
diff --git a/indra/newview/llskinningutil.cpp b/indra/newview/llskinningutil.cpp
index 0fa4c2b114..8e1f80abfc 100644
--- a/indra/newview/llskinningutil.cpp
+++ b/indra/newview/llskinningutil.cpp
@@ -83,10 +83,6 @@ void dump_avatar_and_skin_state(const std::string& reason, LLVOAvatar *avatar, c
}
}
-void LLSkinningUtil::initClass()
-{
-}
-
U32 LLSkinningUtil::getMaxJointCount()
{
U32 result = LL_MAX_JOINTS_PER_MESH_OBJECT;
diff --git a/indra/newview/llskinningutil.h b/indra/newview/llskinningutil.h
index ccc501adc0..2c77e030aa 100644
--- a/indra/newview/llskinningutil.h
+++ b/indra/newview/llskinningutil.h
@@ -34,7 +34,6 @@ class LLVolumeFace;
namespace LLSkinningUtil
{
- void initClass();
U32 getMaxJointCount();
U32 getMeshJointCount(const LLMeshSkinInfo *skin);
void scrubInvalidJoints(LLVOAvatar *avatar, LLMeshSkinInfo* skin);
diff --git a/indra/newview/llsky.cpp b/indra/newview/llsky.cpp
index 3ef89ba920..5e2442798b 100644
--- a/indra/newview/llsky.cpp
+++ b/indra/newview/llsky.cpp
@@ -119,7 +119,7 @@ void LLSky::restoreGL()
void LLSky::resetVertexBuffers()
{
- if (gSky.mVOSkyp.notNull())
+ if (gSky.mVOSkyp.notNull() && gSky.mVOGroundp.notNull())
{
gPipeline.resetVertexBuffers(gSky.mVOSkyp->mDrawable);
gPipeline.resetVertexBuffers(gSky.mVOGroundp->mDrawable);
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 0d99b35aee..c8c39ae00f 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -113,7 +113,7 @@
#include "llgroupmgr.h"
#include "llhudeffecttrail.h"
#include "llhudmanager.h"
-#include "llimagebmp.h"
+#include "llimage.h"
#include "llinventorybridge.h"
#include "llinventorymodel.h"
#include "llinventorymodelbackgroundfetch.h"
@@ -162,6 +162,7 @@
#include "llviewerparcelmgr.h"
#include "llviewerregion.h"
#include "llviewerstats.h"
+#include "llviewerstatsrecorder.h"
#include "llviewerthrottle.h"
#include "llviewerwindow.h"
#include "llvoavatar.h"
@@ -209,8 +210,8 @@
bool gAgentMovementCompleted = false;
S32 gMaxAgentGroups;
-std::string SCREEN_HOME_FILENAME = "screen_home.bmp";
-std::string SCREEN_LAST_FILENAME = "screen_last.bmp";
+const std::string SCREEN_HOME_FILENAME = "screen_home%s.png";
+const std::string SCREEN_LAST_FILENAME = "screen_last%s.png";
LLPointer<LLViewerTexture> gStartTexture;
@@ -348,6 +349,14 @@ bool idle_startup()
// to work.
gIdleCallbacks.callFunctions();
gViewerWindow->updateUI();
+
+ // There is a crash on updateClass, this is an attempt to get more information
+ if (LLMortician::graveyardCount())
+ {
+ std::stringstream log_stream;
+ LLMortician::logClass(log_stream);
+ LL_INFOS() << log_stream.str() << LL_ENDL;
+ }
LLMortician::updateClass();
const std::string delims (" ");
@@ -893,8 +902,13 @@ bool idle_startup()
LLFile::mkdir(gDirUtilp->getLindenUserDir());
// As soon as directories are ready initialize notification storages
- LLPersistentNotificationStorage::getInstance()->initialize();
- LLDoNotDisturbNotificationStorage::getInstance()->initialize();
+ if (!LLPersistentNotificationStorage::instanceExists())
+ {
+ // check existance since this part of code can be reached
+ // twice due to login failures
+ LLPersistentNotificationStorage::initParamSingleton();
+ LLDoNotDisturbNotificationStorage::initParamSingleton();
+ }
// Set PerAccountSettingsFile to the default value.
gSavedSettings.setString("PerAccountSettingsFile",
@@ -1220,14 +1234,13 @@ bool idle_startup()
//
// Initialize classes w/graphics stuff.
//
+ LLViewerStatsRecorder::instance(); // Since textures work in threads
gTextureList.doPrefetchImages();
display_startup();
LLSurface::initClasses();
display_startup();
-
- LLFace::initClass();
display_startup();
LLDrawable::initClass();
@@ -1289,9 +1302,13 @@ bool idle_startup()
LLStartUp::initExperiences();
display_startup();
+
+ // If logging should be enebled, turns it on and loads history from disk
+ // Note: does not happen on init of singleton because preferences can use
+ // this instance without logging in
+ LLConversationLog::getInstance()->initLoggingState();
+
LLStartUp::setStartupState( STATE_MULTIMEDIA_INIT );
-
- LLConversationLog::getInstance();
return FALSE;
}
@@ -2567,6 +2584,34 @@ bool callback_choose_gender(const LLSD& notification, const LLSD& response)
return false;
}
+std::string get_screen_filename(const std::string& pattern)
+{
+ if (LLGridManager::getInstance()->isInProductionGrid())
+ {
+ return llformat(pattern.c_str(), "");
+ }
+ else
+ {
+ const std::string& grid_id_str = LLGridManager::getInstance()->getGridId();
+ const std::string& grid_id_lower = utf8str_tolower(grid_id_str);
+ std::string grid = "." + grid_id_lower;
+ return llformat(pattern.c_str(), grid.c_str());
+ }
+}
+
+//static
+std::string LLStartUp::getScreenLastFilename()
+{
+ return get_screen_filename(SCREEN_LAST_FILENAME);
+}
+
+//static
+std::string LLStartUp::getScreenHomeFilename()
+{
+ return get_screen_filename(SCREEN_HOME_FILENAME);
+}
+
+//static
void LLStartUp::loadInitialOutfit( const std::string& outfit_folder_name,
const std::string& gender_name )
{
@@ -2660,19 +2705,32 @@ void init_start_screen(S32 location_id)
LL_DEBUGS("AppInit") << "Loading startup bitmap..." << LL_ENDL;
+ U8 image_codec = IMG_CODEC_PNG;
std::string temp_str = gDirUtilp->getLindenUserDir() + gDirUtilp->getDirDelimiter();
if ((S32)START_LOCATION_ID_LAST == location_id)
{
- temp_str += SCREEN_LAST_FILENAME;
+ temp_str += LLStartUp::getScreenLastFilename();
}
else
{
- temp_str += SCREEN_HOME_FILENAME;
+ std::string path = temp_str + LLStartUp::getScreenHomeFilename();
+
+ if (!gDirUtilp->fileExists(path) && LLGridManager::getInstance()->isInProductionGrid())
+ {
+ // Fallback to old file, can be removed later
+ // Home image only sets when user changes home, so it will take time for users to switch to pngs
+ temp_str += "screen_home.bmp";
+ image_codec = IMG_CODEC_BMP;
+ }
+ else
+ {
+ temp_str = path;
+ }
}
- LLPointer<LLImageBMP> start_image_bmp = new LLImageBMP;
-
+ LLPointer<LLImageFormatted> start_image_frmted = LLImageFormatted::createFromType(image_codec);
+
// Turn off start screen to get around the occasional readback
// driver bug
if(!gSavedSettings.getBOOL("UseStartScreen"))
@@ -2680,18 +2738,18 @@ void init_start_screen(S32 location_id)
LL_INFOS("AppInit") << "Bitmap load disabled" << LL_ENDL;
return;
}
- else if(!start_image_bmp->load(temp_str) )
+ else if(!start_image_frmted->load(temp_str) )
{
LL_WARNS("AppInit") << "Bitmap load failed" << LL_ENDL;
gStartTexture = NULL;
}
else
{
- gStartImageWidth = start_image_bmp->getWidth();
- gStartImageHeight = start_image_bmp->getHeight();
+ gStartImageWidth = start_image_frmted->getWidth();
+ gStartImageHeight = start_image_frmted->getHeight();
LLPointer<LLImageRaw> raw = new LLImageRaw;
- if (!start_image_bmp->decode(raw, 0.0f))
+ if (!start_image_frmted->decode(raw, 0.0f))
{
LL_WARNS("AppInit") << "Bitmap decode failed" << LL_ENDL;
gStartTexture = NULL;
@@ -2806,9 +2864,6 @@ void LLStartUp::multimediaInit()
std::string msg = LLTrans::getString("LoginInitializingMultimedia");
set_startup_status(0.42f, msg.c_str(), gAgent.mMOTD.c_str());
display_startup();
-
- // LLViewerMedia::initClass();
- LLViewerParcelMedia::initClass();
}
void LLStartUp::fontInit()
@@ -2836,9 +2891,10 @@ void LLStartUp::initNameCache()
// Start cache in not-running state until we figure out if we have
// capabilities for display name lookup
- LLAvatarNameCache::initClass(false,gSavedSettings.getBOOL("UsePeopleAPI"));
- LLAvatarNameCache::setUseDisplayNames(gSavedSettings.getBOOL("UseDisplayNames"));
- LLAvatarNameCache::setUseUsernames(gSavedSettings.getBOOL("NameTagShowUsernames"));
+ LLAvatarNameCache* cache_inst = LLAvatarNameCache::getInstance();
+ cache_inst->setUsePeopleAPI(gSavedSettings.getBOOL("UsePeopleAPI"));
+ cache_inst->setUseDisplayNames(gSavedSettings.getBOOL("UseDisplayNames"));
+ cache_inst->setUseUsernames(gSavedSettings.getBOOL("NameTagShowUsernames"));
}
@@ -2853,8 +2909,6 @@ void LLStartUp::initExperiences()
void LLStartUp::cleanupNameCache()
{
- SUBSYSTEM_CLEANUP(LLAvatarNameCache);
-
delete gCacheName;
gCacheName = NULL;
}
@@ -3543,7 +3597,7 @@ bool process_login_success_response()
if(!openid_url.empty())
{
std::string openid_token = response["openid_token"];
- LLViewerMedia::openIDSetup(openid_url, openid_token);
+ LLViewerMedia::getInstance()->openIDSetup(openid_url, openid_token);
}
gMaxAgentGroups = DEFAULT_MAX_AGENT_GROUPS;
diff --git a/indra/newview/llstartup.h b/indra/newview/llstartup.h
index d434e86f82..db37207022 100644
--- a/indra/newview/llstartup.h
+++ b/indra/newview/llstartup.h
@@ -41,10 +41,6 @@ bool idle_startup();
void release_start_screen();
bool login_alert_done(const LLSD& notification, const LLSD& response);
-// constants, variables, & enumerations
-extern std::string SCREEN_HOME_FILENAME;
-extern std::string SCREEN_LAST_FILENAME;
-
// start location constants
enum EStartLocation
{
@@ -95,6 +91,8 @@ public:
static void setStartupState( EStartupState state );
static EStartupState getStartupState() { return gStartupState; };
static std::string getStartupStateString() { return startupStateToString(gStartupState); };
+ static std::string getScreenLastFilename(); // screenshot taken on exit
+ static std::string getScreenHomeFilename(); // screenshot taken on setting Home
static void multimediaInit();
// Initialize LLViewerMedia multimedia engine.
diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp
index f3c270a97b..9eda33d3d2 100644
--- a/indra/newview/llstatusbar.cpp
+++ b/indra/newview/llstatusbar.cpp
@@ -183,7 +183,7 @@ BOOL LLStatusBar::postBuild()
mMediaToggle->setClickedCallback( &LLStatusBar::onClickMediaToggle, this );
mMediaToggle->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterNearbyMedia, this));
- LLHints::registerHintTarget("linden_balance", getChild<LLView>("balance_bg")->getHandle());
+ LLHints::getInstance()->registerHintTarget("linden_balance", getChild<LLView>("balance_bg")->getHandle());
gSavedSettings.getControl("MuteAudio")->getSignal()->connect(boost::bind(&LLStatusBar::onVolumeChanged, this, _2));
@@ -310,16 +310,18 @@ void LLStatusBar::refresh()
// update the master volume button state
bool mute_audio = LLAppViewer::instance()->getMasterSystemAudioMute();
mBtnVolume->setToggleState(mute_audio);
-
+
+ LLViewerMedia* media_inst = LLViewerMedia::getInstance();
+
// Disable media toggle if there's no media, parcel media, and no parcel audio
// (or if media is disabled)
bool button_enabled = (gSavedSettings.getBOOL("AudioStreamingMusic")||gSavedSettings.getBOOL("AudioStreamingMedia")) &&
- (LLViewerMedia::hasInWorldMedia() || LLViewerMedia::hasParcelMedia() || LLViewerMedia::hasParcelAudio());
+ (media_inst->hasInWorldMedia() || media_inst->hasParcelMedia() || media_inst->hasParcelAudio());
mMediaToggle->setEnabled(button_enabled);
// Note the "sense" of the toggle is opposite whether media is playing or not
- bool any_media_playing = (LLViewerMedia::isAnyMediaPlaying() ||
- LLViewerMedia::isParcelMediaPlaying() ||
- LLViewerMedia::isParcelAudioPlaying());
+ bool any_media_playing = (media_inst->isAnyMediaPlaying() ||
+ media_inst->isParcelMediaPlaying() ||
+ media_inst->isParcelAudioPlaying());
mMediaToggle->setValue(!any_media_playing);
}
@@ -501,8 +503,8 @@ void LLStatusBar::onMouseEnterPresets()
mPanelPresetsPulldown->setShape(pulldown_rect);
// show the master presets pull-down
- LLUI::clearPopups();
- LLUI::addPopup(mPanelPresetsPulldown);
+ LLUI::getInstance()->clearPopups();
+ LLUI::getInstance()->addPopup(mPanelPresetsPulldown);
mPanelNearByMedia->setVisible(FALSE);
mPanelVolumePulldown->setVisible(FALSE);
mPanelPresetsPulldown->setVisible(TRUE);
@@ -525,8 +527,8 @@ void LLStatusBar::onMouseEnterVolume()
// show the master volume pull-down
- LLUI::clearPopups();
- LLUI::addPopup(mPanelVolumePulldown);
+ LLUI::getInstance()->clearPopups();
+ LLUI::getInstance()->addPopup(mPanelVolumePulldown);
mPanelPresetsPulldown->setVisible(FALSE);
mPanelNearByMedia->setVisible(FALSE);
mPanelVolumePulldown->setVisible(TRUE);
@@ -548,8 +550,8 @@ void LLStatusBar::onMouseEnterNearbyMedia()
// show the master volume pull-down
mPanelNearByMedia->setShape(nearby_media_rect);
- LLUI::clearPopups();
- LLUI::addPopup(mPanelNearByMedia);
+ LLUI::getInstance()->clearPopups();
+ LLUI::getInstance()->addPopup(mPanelNearByMedia);
mPanelPresetsPulldown->setVisible(FALSE);
mPanelVolumePulldown->setVisible(FALSE);
@@ -578,7 +580,7 @@ void LLStatusBar::onClickMediaToggle(void* data)
LLStatusBar *status_bar = (LLStatusBar*)data;
// "Selected" means it was showing the "play" icon (so media was playing), and now it shows "pause", so turn off media
bool pause = status_bar->mMediaToggle->getValue();
- LLViewerMedia::setAllMediaPaused(pause);
+ LLViewerMedia::getInstance()->setAllMediaPaused(pause);
}
BOOL can_afford_transaction(S32 cost)
diff --git a/indra/newview/llsurfacepatch.cpp b/indra/newview/llsurfacepatch.cpp
index f6cf714db4..5e056944e9 100644
--- a/indra/newview/llsurfacepatch.cpp
+++ b/indra/newview/llsurfacepatch.cpp
@@ -203,7 +203,7 @@ LLVector2 LLSurfacePatch::getTexCoords(const U32 x, const U32 y) const
void LLSurfacePatch::eval(const U32 x, const U32 y, const U32 stride, LLVector3 *vertex, LLVector3 *normal,
LLVector2 *tex0, LLVector2 *tex1)
{
- if (!mSurfacep || !mSurfacep->getRegion() || !mSurfacep->getGridsPerEdge())
+ if (!mSurfacep || !mSurfacep->getRegion() || !mSurfacep->getGridsPerEdge() || !mVObjp)
{
return; // failsafe
}
diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp
index 8a2fc881a9..e2bb904eff 100644
--- a/indra/newview/lltexturectrl.cpp
+++ b/indra/newview/lltexturectrl.cpp
@@ -410,7 +410,7 @@ BOOL LLFloaterTexturePicker::postBuild()
mLocalScrollCtrl = getChild<LLScrollListCtrl>("l_name_list");
mLocalScrollCtrl->setCommitCallback(onLocalScrollCommit, this);
- LLLocalBitmapMgr::feedScrollList(mLocalScrollCtrl);
+ LLLocalBitmapMgr::getInstance()->feedScrollList(mLocalScrollCtrl);
mNoCopyTextureSelected = FALSE;
@@ -743,7 +743,7 @@ void LLFloaterTexturePicker::onBtnSelect(void* userdata)
if (self->mLocalScrollCtrl->getVisible() && !self->mLocalScrollCtrl->getAllSelected().empty())
{
LLUUID temp_id = self->mLocalScrollCtrl->getFirstSelected()->getColumn(LOCAL_TRACKING_ID_COLUMN)->getValue().asUUID();
- local_id = LLLocalBitmapMgr::getWorldID(temp_id);
+ local_id = LLLocalBitmapMgr::getInstance()->getWorldID(temp_id);
}
}
@@ -890,10 +890,10 @@ void LLFloaterTexturePicker::onModeSelect(LLUICtrl* ctrl, void *userdata)
// static
void LLFloaterTexturePicker::onBtnAdd(void* userdata)
{
- if (LLLocalBitmapMgr::addUnit() == true)
+ if (LLLocalBitmapMgr::getInstance()->addUnit() == true)
{
LLFloaterTexturePicker* self = (LLFloaterTexturePicker*) userdata;
- LLLocalBitmapMgr::feedScrollList(self->mLocalScrollCtrl);
+ LLLocalBitmapMgr::getInstance()->feedScrollList(self->mLocalScrollCtrl);
}
}
@@ -912,13 +912,13 @@ void LLFloaterTexturePicker::onBtnRemove(void* userdata)
if (list_item)
{
LLUUID tracking_id = list_item->getColumn(LOCAL_TRACKING_ID_COLUMN)->getValue().asUUID();
- LLLocalBitmapMgr::delUnit(tracking_id);
+ LLLocalBitmapMgr::getInstance()->delUnit(tracking_id);
}
}
self->getChild<LLButton>("l_rem_btn")->setEnabled(false);
self->getChild<LLButton>("l_upl_btn")->setEnabled(false);
- LLLocalBitmapMgr::feedScrollList(self->mLocalScrollCtrl);
+ LLLocalBitmapMgr::getInstance()->feedScrollList(self->mLocalScrollCtrl);
}
}
@@ -938,7 +938,7 @@ void LLFloaterTexturePicker::onBtnUpload(void* userdata)
in the future, it might be a good idea to check the vector size and if more than one units is selected - opt for multi-image upload. */
LLUUID tracking_id = (LLUUID)self->mLocalScrollCtrl->getSelectedItemLabel(LOCAL_TRACKING_ID_COLUMN);
- std::string filename = LLLocalBitmapMgr::getFilename(tracking_id);
+ std::string filename = LLLocalBitmapMgr::getInstance()->getFilename(tracking_id);
if (!filename.empty())
{
@@ -961,7 +961,7 @@ void LLFloaterTexturePicker::onLocalScrollCommit(LLUICtrl* ctrl, void* userdata)
if (has_selection)
{
LLUUID tracking_id = (LLUUID)self->mLocalScrollCtrl->getSelectedItemLabel(LOCAL_TRACKING_ID_COLUMN);
- LLUUID inworld_id = LLLocalBitmapMgr::getWorldID(tracking_id);
+ LLUUID inworld_id = LLLocalBitmapMgr::getInstance()->getWorldID(tracking_id);
if (self->mSetImageAssetIDCallback)
{
self->mSetImageAssetIDCallback(inworld_id);
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index f6cb787156..fe058024f6 100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -2409,7 +2409,11 @@ S32 LLTextureFetchWorker::callbackHttpGet(LLCore::HttpResponse * response,
mLoaded = TRUE;
setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
- LLViewerStatsRecorder::instance().log(0.2f);
+ if (LLViewerStatsRecorder::instanceExists())
+ {
+ // Do not create this instance inside thread
+ LLViewerStatsRecorder::instance().log(0.2f);
+ }
return data_size ;
}
diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp
index b9b05966bc..870e0d94f0 100644
--- a/indra/newview/lltoast.cpp
+++ b/indra/newview/lltoast.cpp
@@ -430,7 +430,7 @@ void LLToast::setVisible(BOOL show)
void LLToast::updateHoveredState()
{
S32 x, y;
- LLUI::getMousePositionScreen(&x, &y);
+ LLUI::getInstance()->getMousePositionScreen(&x, &y);
LLRect panel_rc = mWrapperPanel->calcScreenRect();
LLRect button_rc;
diff --git a/indra/newview/lltoastalertpanel.cpp b/indra/newview/lltoastalertpanel.cpp
index 495c9c1f44..941cb410fc 100644
--- a/indra/newview/lltoastalertpanel.cpp
+++ b/indra/newview/lltoastalertpanel.cpp
@@ -45,6 +45,7 @@
#include "llrootview.h"
#include "lltransientfloatermgr.h"
#include "llviewercontrol.h" // for gSavedSettings
+#include "llweb.h"
#include <boost/algorithm/string.hpp>
@@ -52,7 +53,6 @@ const S32 MAX_ALLOWED_MSG_WIDTH = 400;
const F32 DEFAULT_BUTTON_DELAY = 0.5f;
/*static*/ LLControlGroup* LLToastAlertPanel::sSettings = NULL;
-/*static*/ LLToastAlertPanel::URLLoader* LLToastAlertPanel::sURLLoader;
//-----------------------------------------------------------------------------
// Private methods
@@ -555,9 +555,16 @@ void LLToastAlertPanel::onButtonPressed( const LLSD& data, S32 button )
response[button_data->mButton->getName()] = true;
// If we declared a URL and chose the URL option, go to the url
- if (!button_data->mURL.empty() && sURLLoader != NULL)
+ if (!button_data->mURL.empty())
{
- sURLLoader->load(button_data->mURL, button_data->mURLExternal);
+ if (button_data->mURLExternal)
+ {
+ LLWeb::loadURLExternal(button_data->mURL);
+ }
+ else
+ {
+ LLWeb::loadURL(button_data->mURL);
+ }
}
mNotification->respond(response); // new notification reponse
diff --git a/indra/newview/lltoastalertpanel.h b/indra/newview/lltoastalertpanel.h
index d1be5e018e..15bf11d42c 100644
--- a/indra/newview/lltoastalertpanel.h
+++ b/indra/newview/lltoastalertpanel.h
@@ -52,20 +52,6 @@ class LLToastAlertPanel
public:
typedef bool (*display_callback_t)(S32 modal);
- class URLLoader
- {
- public:
- virtual void load(const std::string& url, bool force_open_externally = 0) = 0;
- virtual ~URLLoader()
- {
- }
- };
-
- static void setURLLoader(URLLoader* loader)
- {
- sURLLoader = loader;
- }
-
public:
// User's responsibility to call show() after creating these.
LLToastAlertPanel( LLNotificationPtr notep, bool is_modal );
@@ -94,7 +80,6 @@ private:
BOOL hasTitleBar() const;
private:
- static URLLoader* sURLLoader;
static LLControlGroup* sSettings;
struct ButtonData
diff --git a/indra/newview/lltoolfocus.cpp b/indra/newview/lltoolfocus.cpp
index 596951fdfb..07f46c5fbe 100644
--- a/indra/newview/lltoolfocus.cpp
+++ b/indra/newview/lltoolfocus.cpp
@@ -293,12 +293,12 @@ BOOL LLToolCamera::handleMouseUp(S32 x, S32 y, MASK mask)
BOOL success = LLViewerCamera::getInstance()->projectPosAgentToScreen(focus_pos, mouse_pos);
if (success)
{
- LLUI::setMousePositionScreen(mouse_pos.mX, mouse_pos.mY);
+ LLUI::getInstance()->setMousePositionScreen(mouse_pos.mX, mouse_pos.mY);
}
}
else if (mMouseSteering)
{
- LLUI::setMousePositionScreen(mMouseDownX, mMouseDownY);
+ LLUI::getInstance()->setMousePositionScreen(mMouseDownX, mMouseDownY);
}
else
{
@@ -308,7 +308,7 @@ BOOL LLToolCamera::handleMouseUp(S32 x, S32 y, MASK mask)
else
{
// not a valid zoomable object
- LLUI::setMousePositionScreen(mMouseDownX, mMouseDownY);
+ LLUI::getInstance()->setMousePositionScreen(mMouseDownX, mMouseDownY);
}
// calls releaseMouse() internally
diff --git a/indra/newview/lltoolgrab.cpp b/indra/newview/lltoolgrab.cpp
index f3e661e71a..3831f7d67d 100644
--- a/indra/newview/lltoolgrab.cpp
+++ b/indra/newview/lltoolgrab.cpp
@@ -1001,7 +1001,7 @@ void LLToolGrabBase::onMouseCaptureLost()
// ...move cursor "naturally", as if it had moved when hidden
S32 x = mGrabPick.mMousePt.mX + mAccumDeltaX;
S32 y = mGrabPick.mMousePt.mY + mAccumDeltaY;
- LLUI::setMousePositionScreen(x, y);
+ LLUI::getInstance()->setMousePositionScreen(x, y);
}
else if (mHasMoved)
{
@@ -1011,13 +1011,13 @@ void LLToolGrabBase::onMouseCaptureLost()
LLCoordGL gl_point;
if (LLViewerCamera::getInstance()->projectPosAgentToScreen(grab_point_agent, gl_point))
{
- LLUI::setMousePositionScreen(gl_point.mX, gl_point.mY);
+ LLUI::getInstance()->setMousePositionScreen(gl_point.mX, gl_point.mY);
}
}
else
{
// ...move cursor back to click position
- LLUI::setMousePositionScreen(mGrabPick.mMousePt.mX, mGrabPick.mMousePt.mY);
+ LLUI::getInstance()->setMousePositionScreen(mGrabPick.mMousePt.mX, mGrabPick.mMousePt.mY);
}
gViewerWindow->showCursor();
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index 2a87bce134..54df5198c8 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -1185,7 +1185,7 @@ BOOL LLToolPie::handleTooltipObject( LLViewerObject* hover_object, std::string l
const LLMediaEntry* mep = has_media ? tep->getMediaData() : NULL;
if (mep)
{
- viewer_media_t media_impl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID());
+ viewer_media_t media_impl = LLViewerMedia::getInstance()->getMediaImplFromTextureID(mep->getMediaID());
LLPluginClassMedia* media_plugin = NULL;
if (media_impl.notNull() && (media_impl->hasMedia()))
@@ -1255,7 +1255,7 @@ BOOL LLToolPie::handleTooltipObject( LLViewerObject* hover_object, std::string l
BOOL LLToolPie::handleToolTip(S32 local_x, S32 local_y, MASK mask)
{
- if (!LLUI::sSettingGroups["config"]->getBOOL("ShowHoverTips")) return TRUE;
+ if (!LLUI::getInstance()->mSettingGroups["config"]->getBOOL("ShowHoverTips")) return TRUE;
if (!mHoverPick.isValid()) return TRUE;
LLViewerObject* hover_object = mHoverPick.getObject();
@@ -1360,7 +1360,7 @@ void LLToolPie::playCurrentMedia(const LLPickInfo& info)
LLPluginClassMedia* media_plugin = NULL;
- viewer_media_t media_impl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID());
+ viewer_media_t media_impl = LLViewerMedia::getInstance()->getMediaImplFromTextureID(mep->getMediaID());
if(media_impl.notNull() && media_impl->hasMedia())
{
@@ -1412,7 +1412,7 @@ void LLToolPie::VisitHomePage(const LLPickInfo& info)
LLPluginClassMedia* media_plugin = NULL;
- viewer_media_t media_impl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID());
+ viewer_media_t media_impl = LLViewerMedia::getInstance()->getMediaImplFromTextureID(mep->getMediaID());
if(media_impl.notNull() && media_impl->hasMedia())
{
@@ -1512,19 +1512,19 @@ static void handle_click_action_play()
LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
if (!parcel) return;
- LLViewerMediaImpl::EMediaStatus status = LLViewerParcelMedia::getStatus();
+ LLViewerMediaImpl::EMediaStatus status = LLViewerParcelMedia::getInstance()->getStatus();
switch(status)
{
case LLViewerMediaImpl::MEDIA_PLAYING:
- LLViewerParcelMedia::pause();
+ LLViewerParcelMedia::getInstance()->pause();
break;
case LLViewerMediaImpl::MEDIA_PAUSED:
- LLViewerParcelMedia::start();
+ LLViewerParcelMedia::getInstance()->start();
break;
default:
- LLViewerParcelMedia::play(parcel);
+ LLViewerParcelMedia::getInstance()->play(parcel);
break;
}
}
@@ -1555,7 +1555,7 @@ bool LLToolPie::handleMediaClick(const LLPickInfo& pick)
if (!mep)
return false;
- viewer_media_t media_impl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID());
+ viewer_media_t media_impl = LLViewerMedia::getInstance()->getMediaImplFromTextureID(mep->getMediaID());
if (gSavedSettings.getBOOL("MediaOnAPrimUI"))
{
@@ -1609,7 +1609,7 @@ bool LLToolPie::handleMediaDblClick(const LLPickInfo& pick)
if (!mep)
return false;
- viewer_media_t media_impl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID());
+ viewer_media_t media_impl = LLViewerMedia::getInstance()->getMediaImplFromTextureID(mep->getMediaID());
if (gSavedSettings.getBOOL("MediaOnAPrimUI"))
{
@@ -1664,7 +1664,7 @@ bool LLToolPie::handleMediaHover(const LLPickInfo& pick)
if (mep
&& gSavedSettings.getBOOL("MediaOnAPrimUI"))
{
- viewer_media_t media_impl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID());
+ viewer_media_t media_impl = LLViewerMedia::getInstance()->getMediaImplFromTextureID(mep->getMediaID());
if(media_impl.notNull())
{
@@ -1702,7 +1702,7 @@ bool LLToolPie::handleMediaMouseUp()
if(mMediaMouseCaptureID.notNull())
{
// Face media needs to know the mouse went up.
- viewer_media_t media_impl = LLViewerMedia::getMediaImplFromTextureID(mMediaMouseCaptureID);
+ viewer_media_t media_impl = LLViewerMedia::getInstance()->getMediaImplFromTextureID(mMediaMouseCaptureID);
if(media_impl)
{
// This will send a mouseUp event to the plugin using the last known mouse coordinate (from a mouseDown or mouseMove), which is what we want.
@@ -1731,7 +1731,7 @@ static void handle_click_action_open_media(LLPointer<LLViewerObject> objectp)
if( face < 0 || face >= objectp->getNumTEs() ) return;
// is media playing on this face?
- if (LLViewerMedia::getMediaImplFromTextureID(objectp->getTE(face)->getID()) != NULL)
+ if (LLViewerMedia::getInstance()->getMediaImplFromTextureID(objectp->getTE(face)->getID()) != NULL)
{
handle_click_action_play();
return;
@@ -1761,7 +1761,7 @@ static ECursorType cursor_from_parcel_media(U8 click_action)
open_cursor = UI_CURSOR_TOOLMEDIAOPEN;
- LLViewerMediaImpl::EMediaStatus status = LLViewerParcelMedia::getStatus();
+ LLViewerMediaImpl::EMediaStatus status = LLViewerParcelMedia::getInstance()->getStatus();
switch(status)
{
case LLViewerMediaImpl::MEDIA_PLAYING:
diff --git a/indra/newview/lluilistener.cpp b/indra/newview/lluilistener.cpp
index 6b2cd71d40..956f5cf187 100644
--- a/indra/newview/lluilistener.cpp
+++ b/indra/newview/lluilistener.cpp
@@ -84,8 +84,8 @@ void LLUIListener::getValue(const LLSD&event) const
{
LLSD reply = LLSD::emptyMap();
- const LLView* root = LLUI::getRootView();
- const LLView* view = LLUI::resolvePath(root, event["path"].asString());
+ const LLView* root = LLUI::getInstance()->getRootView();
+ const LLView* view = LLUI::getInstance()->resolvePath(root, event["path"].asString());
const LLUICtrl* ctrl(dynamic_cast<const LLUICtrl*>(view));
if (ctrl)
diff --git a/indra/newview/llurldispatcher.cpp b/indra/newview/llurldispatcher.cpp
index da31e4f542..a1670351f4 100644
--- a/indra/newview/llurldispatcher.cpp
+++ b/indra/newview/llurldispatcher.cpp
@@ -188,7 +188,7 @@ bool LLURLDispatcherImpl::dispatchRegion(const LLSLURL& slurl, const std::string
LLWorldMapMessage::getInstance()->sendNamedRegionRequest(slurl.getRegion(),
LLURLDispatcherImpl::regionNameCallback,
slurl.getSLURLString(),
- LLUI::sSettingGroups["config"]->getBOOL("SLURLTeleportDirectly")); // don't teleport
+ LLUI::getInstance()->mSettingGroups["config"]->getBOOL("SLURLTeleportDirectly")); // don't teleport
return true;
}
diff --git a/indra/newview/llurllineeditorctrl.cpp b/indra/newview/llurllineeditorctrl.cpp
index 8a61114852..2b7e598a59 100644
--- a/indra/newview/llurllineeditorctrl.cpp
+++ b/indra/newview/llurllineeditorctrl.cpp
@@ -66,7 +66,7 @@ void LLURLLineEditor::cut()
if( need_to_rollback )
{
rollback.doRollback( this );
- LLUI::reportBadKeystroke();
+ LLUI::getInstance()->reportBadKeystroke();
}
else
if( mKeystrokeCallback )
diff --git a/indra/newview/llurlwhitelist.cpp b/indra/newview/llurlwhitelist.cpp
index 3a7285974e..b4d38f5d1e 100644
--- a/indra/newview/llurlwhitelist.cpp
+++ b/indra/newview/llurlwhitelist.cpp
@@ -31,8 +31,6 @@
#include <iostream>
#include <fstream>
-LLUrlWhiteList* LLUrlWhiteList::sInstance = 0;
-
///////////////////////////////////////////////////////////////////////////////
//
LLUrlWhiteList::LLUrlWhiteList () :
@@ -50,29 +48,6 @@ LLUrlWhiteList::~LLUrlWhiteList ()
}
///////////////////////////////////////////////////////////////////////////////
-
-//static
-void LLUrlWhiteList::initClass ()
-{
- if ( ! sInstance )
- {
- sInstance = new LLUrlWhiteList ();
- }
-}
-
-//static
-void LLUrlWhiteList::cleanupClass ()
-{
- delete sInstance;
- sInstance = NULL;
-}
-
-LLUrlWhiteList* LLUrlWhiteList::getInstance ()
-{
- return sInstance;
-}
-
-///////////////////////////////////////////////////////////////////////////////
//
bool LLUrlWhiteList::load ()
{
diff --git a/indra/newview/llurlwhitelist.h b/indra/newview/llurlwhitelist.h
index b0969051a7..c2511b08fd 100644
--- a/indra/newview/llurlwhitelist.h
+++ b/indra/newview/llurlwhitelist.h
@@ -30,15 +30,11 @@
#include <list>
-class LLUrlWhiteList
+class LLUrlWhiteList : public LLSingleton<LLUrlWhiteList>
{
+ LLSINGLETON(LLUrlWhiteList);
+ ~LLUrlWhiteList();
public:
- virtual ~LLUrlWhiteList ();
-
- static void initClass();
- static void cleanupClass();
- static LLUrlWhiteList* getInstance ();
-
bool load ();
bool save ();
@@ -51,9 +47,6 @@ class LLUrlWhiteList
bool getNext ( std::string& valueOut );
private:
- LLUrlWhiteList ();
- static LLUrlWhiteList* sInstance;
-
typedef std::vector < std::string > string_list_t ;
bool mLoaded;
diff --git a/indra/newview/llvieweraudio.cpp b/indra/newview/llvieweraudio.cpp
index 7ce9d858dd..cb20801756 100644
--- a/indra/newview/llvieweraudio.cpp
+++ b/indra/newview/llvieweraudio.cpp
@@ -463,24 +463,25 @@ void audio_update_volume(bool force_update)
F32 media_volume = gSavedSettings.getF32("AudioLevelMedia");
BOOL media_muted = gSavedSettings.getBOOL("MuteMedia");
media_volume = mute_volume * master_volume * media_volume;
- LLViewerMedia::setVolume( media_muted ? 0.0f : media_volume );
+ LLViewerMedia::getInstance()->setVolume( media_muted ? 0.0f : media_volume );
- // Voice
- if (LLVoiceClient::getInstance())
+ // Voice, this is parametric singleton, it gets initialized when ready
+ if (LLVoiceClient::instanceExists())
{
F32 voice_volume = gSavedSettings.getF32("AudioLevelVoice");
voice_volume = mute_volume * master_volume * voice_volume;
BOOL voice_mute = gSavedSettings.getBOOL("MuteVoice");
- LLVoiceClient::getInstance()->setVoiceVolume(voice_mute ? 0.f : voice_volume);
- LLVoiceClient::getInstance()->setMicGain(voice_mute ? 0.f : gSavedSettings.getF32("AudioLevelMic"));
+ LLVoiceClient *voice_inst = LLVoiceClient::getInstance();
+ voice_inst->setVoiceVolume(voice_mute ? 0.f : voice_volume);
+ voice_inst->setMicGain(voice_mute ? 0.f : gSavedSettings.getF32("AudioLevelMic"));
if (!gViewerWindow->getActive() && (gSavedSettings.getBOOL("MuteWhenMinimized")))
{
- LLVoiceClient::getInstance()->setMuteMic(true);
+ voice_inst->setMuteMic(true);
}
else
{
- LLVoiceClient::getInstance()->setMuteMic(false);
+ voice_inst->setMuteMic(false);
}
}
}
diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp
index e2554bc9bc..d8526e63ca 100644
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -42,7 +42,7 @@
#include "llfeaturemanager.h"
//#include "llfirstuse.h"
#include "llhudmanager.h"
-#include "llimagebmp.h"
+#include "llimagepng.h"
#include "llmemory.h"
#include "llselectmgr.h"
#include "llsky.h"
@@ -1508,9 +1508,10 @@ void render_ui_2d()
if (gSavedSettings.getBOOL("RenderUIBuffer"))
{
- if (LLUI::sDirty)
+ LLUI* ui_inst = LLUI::getInstance();
+ if (ui_inst->mDirty)
{
- LLUI::sDirty = FALSE;
+ ui_inst->mDirty = FALSE;
LLRect t_rect;
gPipeline.mUIScreen.bindTarget();
@@ -1518,25 +1519,25 @@ void render_ui_2d()
{
static const S32 pad = 8;
- LLUI::sDirtyRect.mLeft -= pad;
- LLUI::sDirtyRect.mRight += pad;
- LLUI::sDirtyRect.mBottom -= pad;
- LLUI::sDirtyRect.mTop += pad;
+ ui_inst->mDirtyRect.mLeft -= pad;
+ ui_inst->mDirtyRect.mRight += pad;
+ ui_inst->mDirtyRect.mBottom -= pad;
+ ui_inst->mDirtyRect.mTop += pad;
LLGLEnable scissor(GL_SCISSOR_TEST);
- static LLRect last_rect = LLUI::sDirtyRect;
+ static LLRect last_rect = ui_inst->mDirtyRect;
//union with last rect to avoid mouse poop
- last_rect.unionWith(LLUI::sDirtyRect);
+ last_rect.unionWith(ui_inst->mDirtyRect);
- t_rect = LLUI::sDirtyRect;
- LLUI::sDirtyRect = last_rect;
+ t_rect = ui_inst->mDirtyRect;
+ ui_inst->mDirtyRect = last_rect;
last_rect = t_rect;
- last_rect.mLeft = LLRect::tCoordType(last_rect.mLeft / LLUI::getScaleFactor().mV[0]);
- last_rect.mRight = LLRect::tCoordType(last_rect.mRight / LLUI::getScaleFactor().mV[0]);
- last_rect.mTop = LLRect::tCoordType(last_rect.mTop / LLUI::getScaleFactor().mV[1]);
- last_rect.mBottom = LLRect::tCoordType(last_rect.mBottom / LLUI::getScaleFactor().mV[1]);
+ last_rect.mLeft = LLRect::tCoordType(last_rect.mLeft / ui_inst->getScaleFactor().mV[0]);
+ last_rect.mRight = LLRect::tCoordType(last_rect.mRight / ui_inst->getScaleFactor().mV[0]);
+ last_rect.mTop = LLRect::tCoordType(last_rect.mTop / ui_inst->getScaleFactor().mV[1]);
+ last_rect.mBottom = LLRect::tCoordType(last_rect.mBottom / ui_inst->getScaleFactor().mV[1]);
LLRect clip_rect(last_rect);
@@ -1548,7 +1549,7 @@ void render_ui_2d()
gPipeline.mUIScreen.flush();
gGL.setColorMask(true, false);
- LLUI::sDirtyRect = t_rect;
+ ui_inst->mDirtyRect = t_rect;
}
LLGLDisable cull(GL_CULL_FACE);
@@ -1588,17 +1589,17 @@ void render_disconnected_background()
LL_INFOS() << "Loading last bitmap..." << LL_ENDL;
std::string temp_str;
- temp_str = gDirUtilp->getLindenUserDir() + gDirUtilp->getDirDelimiter() + SCREEN_LAST_FILENAME;
+ temp_str = gDirUtilp->getLindenUserDir() + gDirUtilp->getDirDelimiter() + LLStartUp::getScreenLastFilename();
- LLPointer<LLImageBMP> image_bmp = new LLImageBMP;
- if( !image_bmp->load(temp_str) )
+ LLPointer<LLImagePNG> image_png = new LLImagePNG;
+ if( !image_png->load(temp_str) )
{
//LL_INFOS() << "Bitmap load failed" << LL_ENDL;
return;
}
LLPointer<LLImageRaw> raw = new LLImageRaw;
- if (!image_bmp->decode(raw, 0.0f))
+ if (!image_png->decode(raw, 0.0f))
{
LL_INFOS() << "Bitmap decode failed" << LL_ENDL;
gDisconnectedImagep = NULL;
@@ -1606,7 +1607,7 @@ void render_disconnected_background()
}
U8 *rawp = raw->getData();
- S32 npixels = (S32)image_bmp->getWidth()*(S32)image_bmp->getHeight();
+ S32 npixels = (S32)image_png->getWidth()*(S32)image_png->getHeight();
for (S32 i = 0; i < npixels; i++)
{
S32 sum = 0;
diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp
index 61857d6fb1..9d7da115ac 100644
--- a/indra/newview/llviewerinventory.cpp
+++ b/indra/newview/llviewerinventory.cpp
@@ -238,7 +238,7 @@ public:
return false;
}
- if (!LLUI::sSettingGroups["config"]->getBOOL("EnableInventory"))
+ if (!LLUI::getInstance()->mSettingGroups["config"]->getBOOL("EnableInventory"))
{
LLNotificationsUtil::add("NoInventory", LLSD(), LLSD(), std::string("SwitchToStandardSkinAndQuit"));
return true;
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index a27a083a2a..6cfc22a4e5 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -77,12 +77,6 @@
#include <boost/bind.hpp> // for SkinFolder listener
#include <boost/signals2.hpp>
-/*static*/ const char* LLViewerMedia::AUTO_PLAY_MEDIA_SETTING = "ParcelMediaAutoPlayEnable";
-/*static*/ const char* LLViewerMedia::SHOW_MEDIA_ON_OTHERS_SETTING = "MediaShowOnOthers";
-/*static*/ const char* LLViewerMedia::SHOW_MEDIA_WITHIN_PARCEL_SETTING = "MediaShowWithinParcel";
-/*static*/ const char* LLViewerMedia::SHOW_MEDIA_OUTSIDE_PARCEL_SETTING = "MediaShowOutsideParcel";
-
-
class LLMediaFilePicker : public LLFilePickerThread // deletes itself when done
{
public:
@@ -191,9 +185,6 @@ LLViewerMediaObserver::~LLViewerMediaObserver()
}
-LLURL LLViewerMedia::sOpenIDURL;
-std::string LLViewerMedia::sOpenIDCookie;
-LLPluginClassMedia* LLViewerMedia::sSpareBrowserMediaSource = NULL;
static LLViewerMedia::impl_list sViewerMediaImplList;
static LLViewerMedia::impl_id_map sViewerMediaTextureIDMap;
static LLTimer sMediaCreateTimer;
@@ -203,8 +194,6 @@ static bool sForceUpdate = false;
static LLUUID sOnlyAudibleTextureID = LLUUID::null;
static F64 sLowestLoadableImplInterest = 0.0f;
static bool sAnyMediaShowing = false;
-static bool sAnyMediaPlaying = false;
-static boost::signals2::connection sTeleportFinishConnection;
//////////////////////////////////////////////////////////////////////////////////////////
static void add_media_impl(LLViewerMediaImpl* media)
@@ -230,7 +219,7 @@ static void remove_media_impl(LLViewerMediaImpl* media)
class LLViewerMediaMuteListObserver : public LLMuteListObserver
{
- /* virtual */ void onChange() { LLViewerMedia::muteListChanged();}
+ /* virtual */ void onChange() { LLViewerMedia::getInstance()->muteListChanged();}
};
static LLViewerMediaMuteListObserver sViewerMediaMuteListObserver;
@@ -239,9 +228,40 @@ static bool sViewerMediaMuteListObserverInitialized = false;
//////////////////////////////////////////////////////////////////////////////////////////
// LLViewerMedia
-
//////////////////////////////////////////////////////////////////////////////////////////
+
+/*static*/ const char* LLViewerMedia::AUTO_PLAY_MEDIA_SETTING = "ParcelMediaAutoPlayEnable";
+/*static*/ const char* LLViewerMedia::SHOW_MEDIA_ON_OTHERS_SETTING = "MediaShowOnOthers";
+/*static*/ const char* LLViewerMedia::SHOW_MEDIA_WITHIN_PARCEL_SETTING = "MediaShowWithinParcel";
+/*static*/ const char* LLViewerMedia::SHOW_MEDIA_OUTSIDE_PARCEL_SETTING = "MediaShowOutsideParcel";
+
+LLViewerMedia::LLViewerMedia():
+mAnyMediaShowing(false),
+mAnyMediaPlaying(false),
+mSpareBrowserMediaSource(NULL)
+{
+}
+
+LLViewerMedia::~LLViewerMedia()
+{
+ gIdleCallbacks.deleteFunction(LLViewerMedia::onIdle, NULL);
+ mTeleportFinishConnection.disconnect();
+ if (mSpareBrowserMediaSource != NULL)
+ {
+ delete mSpareBrowserMediaSource;
+ mSpareBrowserMediaSource = NULL;
+ }
+}
+
// static
+void LLViewerMedia::initSingleton()
+{
+ gIdleCallbacks.addFunction(LLViewerMedia::onIdle, NULL);
+ mTeleportFinishConnection = LLViewerParcelMgr::getInstance()->
+ setTeleportFinishedCallback(boost::bind(&LLViewerMedia::onTeleportFinished, this));
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////
viewer_media_t LLViewerMedia::newMediaImpl(
const LLUUID& texture_id,
S32 media_width,
@@ -368,7 +388,6 @@ viewer_media_t LLViewerMedia::updateMediaImpl(LLMediaEntry* media_entry, const s
}
//////////////////////////////////////////////////////////////////////////////////////////
-// static
LLViewerMediaImpl* LLViewerMedia::getMediaImplFromTextureID(const LLUUID& texture_id)
{
LLViewerMediaImpl* result = NULL;
@@ -384,7 +403,6 @@ LLViewerMediaImpl* LLViewerMedia::getMediaImplFromTextureID(const LLUUID& textur
}
//////////////////////////////////////////////////////////////////////////////////////////
-// static
std::string LLViewerMedia::getCurrentUserAgent()
{
// Don't use user-visible string to avoid
@@ -411,7 +429,6 @@ std::string LLViewerMedia::getCurrentUserAgent()
}
//////////////////////////////////////////////////////////////////////////////////////////
-// static
void LLViewerMedia::updateBrowserUserAgent()
{
std::string user_agent = getCurrentUserAgent();
@@ -431,7 +448,6 @@ void LLViewerMedia::updateBrowserUserAgent()
}
//////////////////////////////////////////////////////////////////////////////////////////
-// static
bool LLViewerMedia::handleSkinCurrentChanged(const LLSD& /*newvalue*/)
{
// gSavedSettings is already updated when this function is called.
@@ -440,7 +456,6 @@ bool LLViewerMedia::handleSkinCurrentChanged(const LLSD& /*newvalue*/)
}
//////////////////////////////////////////////////////////////////////////////////////////
-// static
bool LLViewerMedia::textureHasMedia(const LLUUID& texture_id)
{
impl_list::iterator iter = sViewerMediaImplList.begin();
@@ -458,7 +473,6 @@ bool LLViewerMedia::textureHasMedia(const LLUUID& texture_id)
}
//////////////////////////////////////////////////////////////////////////////////////////
-// static
void LLViewerMedia::setVolume(F32 volume)
{
if(volume != sGlobalVolume || sForceUpdate)
@@ -478,14 +492,12 @@ void LLViewerMedia::setVolume(F32 volume)
}
//////////////////////////////////////////////////////////////////////////////////////////
-// static
F32 LLViewerMedia::getVolume()
{
return sGlobalVolume;
}
//////////////////////////////////////////////////////////////////////////////////////////
-// static
void LLViewerMedia::muteListChanged()
{
// When the mute list changes, we need to check mute status on all impls.
@@ -500,7 +512,6 @@ void LLViewerMedia::muteListChanged()
}
//////////////////////////////////////////////////////////////////////////////////////////
-// static
bool LLViewerMedia::isInterestingEnough(const LLVOVolume *object, const F64 &object_interest)
{
bool result = false;
@@ -535,6 +546,7 @@ LLViewerMedia::impl_list &LLViewerMedia::getPriorityList()
return sViewerMediaImplList;
}
+// static
// This is the predicate function used to sort sViewerMediaImplList by priority.
bool LLViewerMedia::priorityComparitor(const LLViewerMediaImpl* i1, const LLViewerMediaImpl* i2)
{
@@ -629,7 +641,12 @@ static LLTrace::BlockTimerStatHandle FTM_MEDIA_MISC("Misc");
//////////////////////////////////////////////////////////////////////////////////////////
-// static
+void LLViewerMedia::onIdle(void *dummy_arg)
+{
+ LLViewerMedia::getInstance()->updateMedia(dummy_arg);
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////
void LLViewerMedia::updateMedia(void *dummy_arg)
{
LL_RECORD_BLOCK_TIME(FTM_MEDIA_UPDATE);
@@ -642,8 +659,8 @@ void LLViewerMedia::updateMedia(void *dummy_arg)
// removing it for now.
//createSpareBrowserMediaSource();
- sAnyMediaShowing = false;
- sAnyMediaPlaying = false;
+ mAnyMediaShowing = false;
+ mAnyMediaPlaying = false;
impl_list::iterator iter = sViewerMediaImplList.begin();
impl_list::iterator end = sViewerMediaImplList.end();
@@ -659,10 +676,10 @@ void LLViewerMedia::updateMedia(void *dummy_arg)
}
// Let the spare media source actually launch
- if(sSpareBrowserMediaSource)
+ if(mSpareBrowserMediaSource)
{
LL_RECORD_BLOCK_TIME(FTM_MEDIA_SPARE_IDLE);
- sSpareBrowserMediaSource->idle();
+ mSpareBrowserMediaSource->idle();
}
{
@@ -854,7 +871,7 @@ void LLViewerMedia::updateMedia(void *dummy_arg)
if (!pimpl->getUsedInUI() && pimpl->hasMedia() && (pimpl->isMediaPlaying() || !pimpl->isMediaTimeBased()))
{
// consider visible non-timebased media as playing
- sAnyMediaPlaying = true;
+ mAnyMediaPlaying = true;
}
}
@@ -899,21 +916,18 @@ void LLViewerMedia::updateMedia(void *dummy_arg)
}
//////////////////////////////////////////////////////////////////////////////////////////
-// static
bool LLViewerMedia::isAnyMediaShowing()
{
- return sAnyMediaShowing;
+ return mAnyMediaShowing;
}
//////////////////////////////////////////////////////////////////////////////////////////
-// static
bool LLViewerMedia::isAnyMediaPlaying()
{
- return sAnyMediaPlaying;
+ return mAnyMediaPlaying;
}
//////////////////////////////////////////////////////////////////////////////////////////
-// static
void LLViewerMedia::setAllMediaEnabled(bool val)
{
// Set "tentative" autoplay first. We need to do this here or else
@@ -938,7 +952,7 @@ void LLViewerMedia::setAllMediaEnabled(bool val)
{
if (!LLViewerMedia::isParcelMediaPlaying() && LLViewerMedia::hasParcelMedia())
{
- LLViewerParcelMedia::play(LLViewerParcelMgr::getInstance()->getAgentParcel());
+ LLViewerParcelMedia::getInstance()->play(LLViewerParcelMgr::getInstance()->getAgentParcel());
}
static LLCachedControl<bool> audio_streaming_music(gSavedSettings, "AudioStreamingMusic", true);
@@ -960,7 +974,7 @@ void LLViewerMedia::setAllMediaEnabled(bool val)
}
else {
// This actually unloads the impl, as opposed to "stop"ping the media
- LLViewerParcelMedia::stop();
+ LLViewerParcelMedia::getInstance()->stop();
if (gAudiop)
{
LLViewerAudio::getInstance()->stopInternetStreamWithAutoFade();
@@ -969,7 +983,6 @@ void LLViewerMedia::setAllMediaEnabled(bool val)
}
//////////////////////////////////////////////////////////////////////////////////////////
-// static
void LLViewerMedia::setAllMediaPaused(bool val)
{
// Set "tentative" autoplay first. We need to do this here or else
@@ -1010,7 +1023,7 @@ void LLViewerMedia::setAllMediaPaused(bool val)
{
if (!LLViewerMedia::isParcelMediaPlaying() && LLViewerMedia::hasParcelMedia())
{
- LLViewerParcelMedia::play(LLViewerParcelMgr::getInstance()->getAgentParcel());
+ LLViewerParcelMedia::getInstance()->play(LLViewerParcelMgr::getInstance()->getAgentParcel());
}
static LLCachedControl<bool> audio_streaming_music(gSavedSettings, "AudioStreamingMusic", true);
@@ -1032,7 +1045,7 @@ void LLViewerMedia::setAllMediaPaused(bool val)
}
else {
// This actually unloads the impl, as opposed to "stop"ping the media
- LLViewerParcelMedia::stop();
+ LLViewerParcelMedia::getInstance()->stop();
if (gAudiop)
{
LLViewerAudio::getInstance()->stopInternetStreamWithAutoFade();
@@ -1041,19 +1054,25 @@ void LLViewerMedia::setAllMediaPaused(bool val)
}
//////////////////////////////////////////////////////////////////////////////////////////
-// static
bool LLViewerMedia::isParcelMediaPlaying()
{
- return (LLViewerMedia::hasParcelMedia() && LLViewerParcelMedia::getParcelMedia() && LLViewerParcelMedia::getParcelMedia()->hasMedia());
+ viewer_media_t media = LLViewerParcelMedia::getInstance()->getParcelMedia();
+ return (LLViewerMedia::hasParcelMedia() && media && media->hasMedia());
}
/////////////////////////////////////////////////////////////////////////////////////////
-// static
bool LLViewerMedia::isParcelAudioPlaying()
{
return (LLViewerMedia::hasParcelAudio() && gAudiop && LLAudioEngine::AUDIO_PLAYING == gAudiop->isInternetStreamPlaying());
}
+/////////////////////////////////////////////////////////////////////////////////////////
+// static
+void LLViewerMedia::authSubmitCallback(const LLSD& notification, const LLSD& response)
+{
+ LLViewerMedia::getInstance()->onAuthSubmit(notification, response);
+}
+
void LLViewerMedia::onAuthSubmit(const LLSD& notification, const LLSD& response)
{
LLViewerMediaImpl *impl = LLViewerMedia::getMediaImplFromTextureID(notification["payload"]["media_id"]);
@@ -1075,7 +1094,6 @@ void LLViewerMedia::onAuthSubmit(const LLSD& notification, const LLSD& response)
}
/////////////////////////////////////////////////////////////////////////////////////////
-// static
void LLViewerMedia::clearAllCookies()
{
// Clear all cookies for all plugins
@@ -1092,7 +1110,6 @@ void LLViewerMedia::clearAllCookies()
}
/////////////////////////////////////////////////////////////////////////////////////////
-// static
void LLViewerMedia::clearAllCaches()
{
// Clear all plugins' caches
@@ -1106,7 +1123,6 @@ void LLViewerMedia::clearAllCaches()
}
/////////////////////////////////////////////////////////////////////////////////////////
-// static
void LLViewerMedia::setCookiesEnabled(bool enabled)
{
// Set the "cookies enabled" flag for all loaded plugins
@@ -1123,7 +1139,6 @@ void LLViewerMedia::setCookiesEnabled(bool enabled)
}
/////////////////////////////////////////////////////////////////////////////////////////
-// static
void LLViewerMedia::setProxyConfig(bool enable, const std::string &host, int port)
{
// Set the proxy config for all loaded plugins
@@ -1140,10 +1155,6 @@ void LLViewerMedia::setProxyConfig(bool enable, const std::string &host, int por
}
/////////////////////////////////////////////////////////////////////////////////////////
-// static
-/////////////////////////////////////////////////////////////////////////////////////////
-//// static
-
LLSD LLViewerMedia::getHeaders()
{
LLSD headers = LLSD::emptyMap();
@@ -1151,14 +1162,13 @@ LLSD LLViewerMedia::getHeaders()
// *TODO: Should this be 'application/llsd+xml' ?
// *TODO: Should this even be set at all? This header is only not overridden in 'GET' methods.
headers[HTTP_OUT_HEADER_CONTENT_TYPE] = HTTP_CONTENT_XML;
- headers[HTTP_OUT_HEADER_COOKIE] = sOpenIDCookie;
+ headers[HTTP_OUT_HEADER_COOKIE] = mOpenIDCookie;
headers[HTTP_OUT_HEADER_USER_AGENT] = getCurrentUserAgent();
return headers;
}
/////////////////////////////////////////////////////////////////////////////////////////
- // static
bool LLViewerMedia::parseRawCookie(const std::string raw_cookie, std::string& name, std::string& value, std::string& path, bool& httponly, bool& secure)
{
std::size_t name_pos = raw_cookie.find_first_of("=");
@@ -1181,13 +1191,14 @@ bool LLViewerMedia::parseRawCookie(const std::string raw_cookie, std::string& na
return false;
}
+/////////////////////////////////////////////////////////////////////////////////////////
LLCore::HttpHeaders::ptr_t LLViewerMedia::getHttpHeaders()
{
LLCore::HttpHeaders::ptr_t headers(new LLCore::HttpHeaders);
headers->append(HTTP_OUT_HEADER_ACCEPT, "*/*");
headers->append(HTTP_OUT_HEADER_CONTENT_TYPE, HTTP_CONTENT_XML);
- headers->append(HTTP_OUT_HEADER_COOKIE, sOpenIDCookie);
+ headers->append(HTTP_OUT_HEADER_COOKIE, mOpenIDCookie);
headers->append(HTTP_OUT_HEADER_USER_AGENT, getCurrentUserAgent());
return headers;
@@ -1195,10 +1206,9 @@ LLCore::HttpHeaders::ptr_t LLViewerMedia::getHttpHeaders()
/////////////////////////////////////////////////////////////////////////////////////////
-// static
void LLViewerMedia::setOpenIDCookie(const std::string& url)
{
- if(!sOpenIDCookie.empty())
+ if(!mOpenIDCookie.empty())
{
std::string profileUrl = getProfileURL("");
@@ -1207,7 +1217,7 @@ void LLViewerMedia::setOpenIDCookie(const std::string& url)
}
}
-/*static*/
+//static
void LLViewerMedia::getOpenIDCookieCoro(std::string url)
{
LLCore::HttpRequest::policy_t httpPolicy(LLCore::HttpRequest::DEFAULT_POLICY_ID);
@@ -1229,7 +1239,7 @@ void LLViewerMedia::getOpenIDCookieCoro(std::string url)
// The LLURL can give me the 'authority', which is of the form: [username[:password]@]hostname[:port]
// We want just the hostname for the cookie code, but LLURL doesn't seem to have a way to extract that.
// We therefore do it here.
- std::string authority = sOpenIDURL.mAuthority;
+ std::string authority = getInstance()->mOpenIDURL.mAuthority;
std::string::size_type hostStart = authority.find('@');
if (hostStart == std::string::npos)
{ // no username/password
@@ -1246,7 +1256,8 @@ void LLViewerMedia::getOpenIDCookieCoro(std::string url)
{ // no port
hostEnd = authority.size();
}
-
+
+ LLViewerMedia* inst = getInstance();
if (url.length())
{
LLMediaCtrl* media_instance = LLFloaterReg::getInstance("destinations")->getChild<LLMediaCtrl>("destination_guide_contents");
@@ -1258,8 +1269,8 @@ void LLViewerMedia::getOpenIDCookieCoro(std::string url)
std::string cookie_path = "";
bool httponly = true;
bool secure = true;
- if (parseRawCookie(sOpenIDCookie, cookie_name, cookie_value, cookie_path, httponly, secure) &&
- media_instance->getMediaPlugin())
+ if (inst->parseRawCookie(inst->mOpenIDCookie, cookie_name, cookie_value, cookie_path, httponly, secure) &&
+ media_instance->getMediaPlugin())
{
// MAINT-5711 - inexplicably, the CEF setCookie function will no longer set the cookie if the
// url and domain are not the same. This used to be my.sl.com and id.sl.com respectively and worked.
@@ -1268,7 +1279,7 @@ void LLViewerMedia::getOpenIDCookieCoro(std::string url)
// (Feels like there must be a less dirty way to construct a URL from component LLURL parts)
// MAINT-6392 - Rider: Do not change, however, the original URI requested, since it is used further
// down.
- std::string cefUrl(std::string(sOpenIDURL.mURI) + "://" + std::string(sOpenIDURL.mAuthority));
+ std::string cefUrl(std::string(inst->mOpenIDURL.mURI) + "://" + std::string(inst->mOpenIDURL.mAuthority));
media_instance->getMediaPlugin()->setCookie(cefUrl, cookie_name, cookie_value, cookie_host, cookie_path, httponly, secure);
}
@@ -1281,11 +1292,11 @@ void LLViewerMedia::getOpenIDCookieCoro(std::string url)
// Do a web profile get so we can store the cookie
httpHeaders->append(HTTP_OUT_HEADER_ACCEPT, "*/*");
- httpHeaders->append(HTTP_OUT_HEADER_COOKIE, sOpenIDCookie);
- httpHeaders->append(HTTP_OUT_HEADER_USER_AGENT, getCurrentUserAgent());
+ httpHeaders->append(HTTP_OUT_HEADER_COOKIE, inst->mOpenIDCookie);
+ httpHeaders->append(HTTP_OUT_HEADER_USER_AGENT, inst->getCurrentUserAgent());
LL_DEBUGS("MediaAuth") << "Requesting " << url << LL_ENDL;
- LL_DEBUGS("MediaAuth") << "sOpenIDCookie = [" << sOpenIDCookie << "]" << LL_ENDL;
+ LL_DEBUGS("MediaAuth") << "sOpenIDCookie = [" << inst->mOpenIDCookie << "]" << LL_ENDL;
LLSD result = httpAdapter->getRawAndSuspend(httpRequest, url, httpOpts, httpHeaders);
@@ -1314,7 +1325,6 @@ void LLViewerMedia::getOpenIDCookieCoro(std::string url)
}
/////////////////////////////////////////////////////////////////////////////////////////
-// static
void LLViewerMedia::openIDSetup(const std::string &openidUrl, const std::string &openidToken)
{
LL_DEBUGS("MediaAuth") << "url = \"" << openidUrl << "\", token = \"" << openidToken << "\"" << LL_ENDL;
@@ -1323,7 +1333,6 @@ void LLViewerMedia::openIDSetup(const std::string &openidUrl, const std::string
boost::bind(&LLViewerMedia::openIDSetupCoro, openidUrl, openidToken));
}
-/*static*/
void LLViewerMedia::openIDSetupCoro(std::string openidUrl, std::string openidToken)
{
LLCore::HttpRequest::policy_t httpPolicy(LLCore::HttpRequest::DEFAULT_POLICY_ID);
@@ -1338,10 +1347,10 @@ void LLViewerMedia::openIDSetupCoro(std::string openidUrl, std::string openidTok
// post the token to the url
// the responder will need to extract the cookie(s).
// Save the OpenID URL for later -- we may need the host when adding the cookie.
- sOpenIDURL.init(openidUrl.c_str());
+ getInstance()->mOpenIDURL.init(openidUrl.c_str());
// We shouldn't ever do this twice, but just in case this code gets repurposed later, clear existing cookies.
- sOpenIDCookie.clear();
+ getInstance()->mOpenIDCookie.clear();
httpHeaders->append(HTTP_OUT_HEADER_ACCEPT, "*/*");
httpHeaders->append(HTTP_OUT_HEADER_CONTENT_TYPE, "application/x-www-form-urlencoded");
@@ -1373,24 +1382,22 @@ void LLViewerMedia::openIDSetupCoro(std::string openidUrl, std::string openidTok
const std::string& cookie = resultHeaders[HTTP_IN_HEADER_SET_COOKIE].asString();
// *TODO: What about bad status codes? Does this destroy previous cookies?
- LLViewerMedia::openIDCookieResponse(openidUrl, cookie);
+ LLViewerMedia::getInstance()->openIDCookieResponse(openidUrl, cookie);
LL_DEBUGS("MediaAuth") << "OpenID cookie set." << LL_ENDL;
}
/////////////////////////////////////////////////////////////////////////////////////////
-// static
void LLViewerMedia::openIDCookieResponse(const std::string& url, const std::string &cookie)
{
LL_DEBUGS("MediaAuth") << "Cookie received: \"" << cookie << "\"" << LL_ENDL;
- sOpenIDCookie += cookie;
+ mOpenIDCookie += cookie;
setOpenIDCookie(url);
}
/////////////////////////////////////////////////////////////////////////////////////////
-// static
void LLViewerMedia::proxyWindowOpened(const std::string &target, const std::string &uuid)
{
if(uuid.empty())
@@ -1406,7 +1413,6 @@ void LLViewerMedia::proxyWindowOpened(const std::string &target, const std::stri
}
/////////////////////////////////////////////////////////////////////////////////////////
-// static
void LLViewerMedia::proxyWindowClosed(const std::string &uuid)
{
if(uuid.empty())
@@ -1422,28 +1428,26 @@ void LLViewerMedia::proxyWindowClosed(const std::string &uuid)
}
/////////////////////////////////////////////////////////////////////////////////////////
-// static
void LLViewerMedia::createSpareBrowserMediaSource()
{
// If we don't have a spare browser media source, create one.
// However, if PluginAttachDebuggerToPlugins is set then don't spawn a spare
// SLPlugin process in order to not be confused by an unrelated gdb terminal
// popping up at the moment we start a media plugin.
- if (!sSpareBrowserMediaSource && !gSavedSettings.getBOOL("PluginAttachDebuggerToPlugins"))
+ if (!mSpareBrowserMediaSource && !gSavedSettings.getBOOL("PluginAttachDebuggerToPlugins"))
{
// The null owner will keep the browser plugin from fully initializing
// (specifically, it keeps LLPluginClassMedia from negotiating a size change,
// which keeps MediaPluginWebkit::initBrowserWindow from doing anything until we have some necessary data, like the background color)
- sSpareBrowserMediaSource = LLViewerMediaImpl::newSourceFromMediaType(HTTP_CONTENT_TEXT_HTML, NULL, 0, 0, 1.0);
+ mSpareBrowserMediaSource = LLViewerMediaImpl::newSourceFromMediaType(HTTP_CONTENT_TEXT_HTML, NULL, 0, 0, 1.0);
}
}
/////////////////////////////////////////////////////////////////////////////////////////
-// static
LLPluginClassMedia* LLViewerMedia::getSpareBrowserMediaSource()
{
- LLPluginClassMedia* result = sSpareBrowserMediaSource;
- sSpareBrowserMediaSource = NULL;
+ LLPluginClassMedia* result = mSpareBrowserMediaSource;
+ mSpareBrowserMediaSource = NULL;
return result;
};
@@ -1465,50 +1469,24 @@ bool LLViewerMedia::hasInWorldMedia()
}
//////////////////////////////////////////////////////////////////////////////////////////
-// static
bool LLViewerMedia::hasParcelMedia()
{
- return !LLViewerParcelMedia::getURL().empty();
+ return !LLViewerParcelMedia::getInstance()->getURL().empty();
}
//////////////////////////////////////////////////////////////////////////////////////////
-// static
bool LLViewerMedia::hasParcelAudio()
{
return !LLViewerMedia::getParcelAudioURL().empty();
}
//////////////////////////////////////////////////////////////////////////////////////////
-// static
std::string LLViewerMedia::getParcelAudioURL()
{
return LLViewerParcelMgr::getInstance()->getAgentParcel()->getMusicURL();
}
//////////////////////////////////////////////////////////////////////////////////////////
-// static
-void LLViewerMedia::initClass()
-{
- gIdleCallbacks.addFunction(LLViewerMedia::updateMedia, NULL);
- sTeleportFinishConnection = LLViewerParcelMgr::getInstance()->
- setTeleportFinishedCallback(boost::bind(&LLViewerMedia::onTeleportFinished));
-}
-
-//////////////////////////////////////////////////////////////////////////////////////////
-// static
-void LLViewerMedia::cleanupClass()
-{
- gIdleCallbacks.deleteFunction(LLViewerMedia::updateMedia, NULL);
- sTeleportFinishConnection.disconnect();
- if (sSpareBrowserMediaSource != NULL)
- {
- delete sSpareBrowserMediaSource;
- sSpareBrowserMediaSource = NULL;
- }
-}
-
-//////////////////////////////////////////////////////////////////////////////////////////
-// static
void LLViewerMedia::onTeleportFinished()
{
// On teleport, clear this setting (i.e. set it to true)
@@ -1517,9 +1495,7 @@ void LLViewerMedia::onTeleportFinished()
LLViewerMediaImpl::sMimeTypesFailed.clear();
}
-
//////////////////////////////////////////////////////////////////////////////////////////
-// static
void LLViewerMedia::setOnlyAudibleMediaTextureID(const LLUUID& texture_id)
{
sOnlyAudibleTextureID = texture_id;
@@ -1711,7 +1687,7 @@ LLPluginClassMedia* LLViewerMediaImpl::newSourceFromMediaType(std::string media_
if ((plugin_basename == "media_plugin_cef") &&
!gSavedSettings.getBOOL("PluginAttachDebuggerToPlugins") && !clean_browser)
{
- media_source = LLViewerMedia::getSpareBrowserMediaSource();
+ media_source = LLViewerMedia::getInstance()->getSpareBrowserMediaSource();
if(media_source)
{
media_source->setOwner(owner);
@@ -1787,7 +1763,7 @@ LLPluginClassMedia* LLViewerMediaImpl::newSourceFromMediaType(std::string media_
media_source->enableMediaPluginDebugging( media_plugin_debugging_enabled || clean_browser);
// need to set agent string here before instance created
- media_source->setBrowserUserAgent(LLViewerMedia::getCurrentUserAgent());
+ media_source->setBrowserUserAgent(LLViewerMedia::getInstance()->getCurrentUserAgent());
media_source->setTarget(target);
@@ -1858,7 +1834,7 @@ bool LLViewerMediaImpl::initializePlugin(const std::string& media_type)
media_source->setDisableTimeout(gSavedSettings.getBOOL("DebugPluginDisableTimeout"));
media_source->setLoop(mMediaLoop);
media_source->setAutoScale(mMediaAutoScale);
- media_source->setBrowserUserAgent(LLViewerMedia::getCurrentUserAgent());
+ media_source->setBrowserUserAgent(LLViewerMedia::getInstance()->getCurrentUserAgent());
media_source->focus(mHasFocus);
media_source->setBackgroundColor(mBackgroundColor);
@@ -2091,7 +2067,7 @@ void LLViewerMediaImpl::updateVolume()
if(mMediaSource)
{
// always scale the volume by the global media volume
- F32 volume = mRequestedVolume * LLViewerMedia::getVolume();
+ F32 volume = mRequestedVolume * LLViewerMedia::getInstance()->getVolume();
if (mProximityCamera > 0)
{
@@ -3365,7 +3341,7 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla
auth_request_params.substitutions = args;
auth_request_params.payload = LLSD().with("media_id", mTextureId);
- auth_request_params.functor.function = boost::bind(&LLViewerMedia::onAuthSubmit, _1, _2);
+ auth_request_params.functor.function = boost::bind(&LLViewerMedia::authSubmitCallback, _1, _2);
LLNotifications::instance().add(auth_request_params);
};
break;
diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h
index e2e758befb..014f9048f0 100644
--- a/indra/newview/llviewermedia.h
+++ b/indra/newview/llviewermedia.h
@@ -70,11 +70,14 @@ private:
class LLViewerMediaImpl;
-class LLViewerMedia
+class LLViewerMedia: public LLSingleton<LLViewerMedia>
{
+ LLSINGLETON(LLViewerMedia);
+ ~LLViewerMedia();
+ void initSingleton();
LOG_CLASS(LLViewerMedia);
+
public:
-
// String to get/set media autoplay in gSavedSettings
static const char* AUTO_PLAY_MEDIA_SETTING;
static const char* SHOW_MEDIA_ON_OTHERS_SETTING;
@@ -88,91 +91,93 @@ public:
// Special case early init for just web browser component
// so we can show login screen. See .cpp file for details. JC
- static viewer_media_t newMediaImpl(const LLUUID& texture_id,
+ viewer_media_t newMediaImpl(const LLUUID& texture_id,
S32 media_width = 0,
S32 media_height = 0,
U8 media_auto_scale = false,
U8 media_loop = false);
- static viewer_media_t updateMediaImpl(LLMediaEntry* media_entry, const std::string& previous_url, bool update_from_self);
- static LLViewerMediaImpl* getMediaImplFromTextureID(const LLUUID& texture_id);
- static std::string getCurrentUserAgent();
- static void updateBrowserUserAgent();
- static bool handleSkinCurrentChanged(const LLSD& /*newvalue*/);
- static bool textureHasMedia(const LLUUID& texture_id);
- static void setVolume(F32 volume);
+ viewer_media_t updateMediaImpl(LLMediaEntry* media_entry, const std::string& previous_url, bool update_from_self);
+ LLViewerMediaImpl* getMediaImplFromTextureID(const LLUUID& texture_id);
+ std::string getCurrentUserAgent();
+ void updateBrowserUserAgent();
+ bool handleSkinCurrentChanged(const LLSD& /*newvalue*/);
+ bool textureHasMedia(const LLUUID& texture_id);
+ void setVolume(F32 volume);
// Is any media currently "showing"? Includes Parcel Media. Does not include media in the UI.
- static bool isAnyMediaShowing();
+ bool isAnyMediaShowing();
// Shows if any media is playing, counts visible non time based media as playing. Does not include media in the UI.
- static bool isAnyMediaPlaying();
+ bool isAnyMediaPlaying();
// Set all media enabled or disabled, depending on val. Does not include media in the UI.
- static void setAllMediaEnabled(bool val);
+ void setAllMediaEnabled(bool val);
// Set all media paused(stopped for non time based) or playing, depending on val. Does not include media in the UI.
- static void setAllMediaPaused(bool val);
+ void setAllMediaPaused(bool val);
- static void updateMedia(void* dummy_arg = NULL);
-
- static void initClass();
- static void cleanupClass();
-
- static F32 getVolume();
- static void muteListChanged();
- static bool isInterestingEnough(const LLVOVolume* object, const F64 &object_interest);
+ static void onIdle(void* dummy_arg = NULL); // updateMedia wrapper
+ void updateMedia(void* dummy_arg = NULL);
+
+ F32 getVolume();
+ void muteListChanged();
+ bool isInterestingEnough(const LLVOVolume* object, const F64 &object_interest);
// Returns the priority-sorted list of all media impls.
- static impl_list &getPriorityList();
+ impl_list &getPriorityList();
// This is the comparitor used to sort the list.
static bool priorityComparitor(const LLViewerMediaImpl* i1, const LLViewerMediaImpl* i2);
// These are just helper functions for the convenience of others working with media
- static bool hasInWorldMedia();
- static std::string getParcelAudioURL();
- static bool hasParcelMedia();
- static bool hasParcelAudio();
- static bool isParcelMediaPlaying();
- static bool isParcelAudioPlaying();
-
- static void onAuthSubmit(const LLSD& notification, const LLSD& response);
+ bool hasInWorldMedia();
+ std::string getParcelAudioURL();
+ bool hasParcelMedia();
+ bool hasParcelAudio();
+ bool isParcelMediaPlaying();
+ bool isParcelAudioPlaying();
+
+ static void authSubmitCallback(const LLSD& notification, const LLSD& response);
// Clear all cookies for all plugins
- static void clearAllCookies();
+ void clearAllCookies();
// Clear all plugins' caches
- static void clearAllCaches();
+ void clearAllCaches();
// Set the "cookies enabled" flag for all loaded plugins
- static void setCookiesEnabled(bool enabled);
+ void setCookiesEnabled(bool enabled);
// Set the proxy config for all loaded plugins
- static void setProxyConfig(bool enable, const std::string &host, int port);
+ void setProxyConfig(bool enable, const std::string &host, int port);
- static void openIDSetup(const std::string &openid_url, const std::string &openid_token);
- static void openIDCookieResponse(const std::string& url, const std::string &cookie);
+ void openIDSetup(const std::string &openid_url, const std::string &openid_token);
+ void openIDCookieResponse(const std::string& url, const std::string &cookie);
- static void proxyWindowOpened(const std::string &target, const std::string &uuid);
- static void proxyWindowClosed(const std::string &uuid);
+ void proxyWindowOpened(const std::string &target, const std::string &uuid);
+ void proxyWindowClosed(const std::string &uuid);
- static void createSpareBrowserMediaSource();
- static LLPluginClassMedia* getSpareBrowserMediaSource();
+ void createSpareBrowserMediaSource();
+ LLPluginClassMedia* getSpareBrowserMediaSource();
- static void setOnlyAudibleMediaTextureID(const LLUUID& texture_id);
+ void setOnlyAudibleMediaTextureID(const LLUUID& texture_id);
- static LLSD getHeaders();
- static LLCore::HttpHeaders::ptr_t getHttpHeaders();
+ LLSD getHeaders();
+ LLCore::HttpHeaders::ptr_t getHttpHeaders();
private:
- static bool parseRawCookie(const std::string raw_cookie, std::string& name, std::string& value, std::string& path, bool& httponly, bool& secure);
- static void setOpenIDCookie(const std::string& url);
- static void onTeleportFinished();
-
- static void openIDSetupCoro(std::string openidUrl, std::string openidToken);
- static void getOpenIDCookieCoro(std::string url);
-
- static LLURL sOpenIDURL;
- static std::string sOpenIDCookie;
- static LLPluginClassMedia* sSpareBrowserMediaSource;
+ void onAuthSubmit(const LLSD& notification, const LLSD& response);
+ bool parseRawCookie(const std::string raw_cookie, std::string& name, std::string& value, std::string& path, bool& httponly, bool& secure);
+ void setOpenIDCookie(const std::string& url);
+ void onTeleportFinished();
+
+ static void openIDSetupCoro(std::string openidUrl, std::string openidToken);
+ static void getOpenIDCookieCoro(std::string url);
+
+ bool mAnyMediaShowing;
+ bool mAnyMediaPlaying;
+ LLURL mOpenIDURL;
+ std::string mOpenIDCookie;
+ LLPluginClassMedia* mSpareBrowserMediaSource;
+ boost::signals2::connection mTeleportFinishConnection;
};
// Implementation functions not exported into header file
diff --git a/indra/newview/llviewermediafocus.cpp b/indra/newview/llviewermediafocus.cpp
index 59165c1d71..f4a64a8e55 100644
--- a/indra/newview/llviewermediafocus.cpp
+++ b/indra/newview/llviewermediafocus.cpp
@@ -339,12 +339,12 @@ BOOL LLViewerMediaFocus::handleKey(KEY key, MASK mask, BOOL called_from_parent)
clearFocus();
}
- if ( KEY_F1 == key && LLUI::sHelpImpl && mMediaControls.get())
+ if ( KEY_F1 == key && LLUI::getInstance()->mHelpImpl && mMediaControls.get())
{
std::string help_topic;
if (mMediaControls.get()->findHelpTopic(help_topic))
{
- LLUI::sHelpImpl->showTopic(help_topic);
+ LLUI::getInstance()->mHelpImpl->showTopic(help_topic);
}
}
}
@@ -537,7 +537,7 @@ bool LLViewerMediaFocus::isHoveringOverFace(LLPointer<LLViewerObject> objectp, S
LLViewerMediaImpl* LLViewerMediaFocus::getFocusedMediaImpl()
{
- return LLViewerMedia::getMediaImplFromTextureID(mFocusedImplID);
+ return LLViewerMedia::getInstance()->getMediaImplFromTextureID(mFocusedImplID);
}
LLViewerObject* LLViewerMediaFocus::getFocusedObject()
@@ -547,7 +547,7 @@ LLViewerObject* LLViewerMediaFocus::getFocusedObject()
LLViewerMediaImpl* LLViewerMediaFocus::getHoverMediaImpl()
{
- return LLViewerMedia::getMediaImplFromTextureID(mHoverImplID);
+ return LLViewerMedia::getInstance()->getMediaImplFromTextureID(mHoverImplID);
}
LLViewerObject* LLViewerMediaFocus::getHoverObject()
@@ -557,7 +557,7 @@ LLViewerObject* LLViewerMediaFocus::getHoverObject()
void LLViewerMediaFocus::focusZoomOnMedia(LLUUID media_id)
{
- LLViewerMediaImpl* impl = LLViewerMedia::getMediaImplFromTextureID(media_id);
+ LLViewerMediaImpl* impl = LLViewerMedia::getInstance()->getMediaImplFromTextureID(media_id);
if(impl)
{
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 52b2c631fa..dc82719109 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -6278,7 +6278,7 @@ void dump_inventory(void*)
void handle_dump_followcam(void*)
{
- LLFollowCamMgr::dump();
+ LLFollowCamMgr::getInstance()->dump();
}
void handle_viewer_enable_message_log(void*)
@@ -8656,7 +8656,6 @@ class LLWorldPostProcess : public view_listener_t
void handle_flush_name_caches()
{
- SUBSYSTEM_CLEANUP(LLAvatarNameCache);
if (gCacheName) gCacheName->clear();
}
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index c8f75c79c4..b0ad81614a 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -4271,7 +4271,7 @@ void process_clear_follow_cam_properties(LLMessageSystem *mesgsys, void **user_d
mesgsys->getUUIDFast(_PREHASH_ObjectData, _PREHASH_ObjectID, source_id);
- LLFollowCamMgr::removeFollowCamParams(source_id);
+ LLFollowCamMgr::getInstance()->removeFollowCamParams(source_id);
}
void process_set_follow_cam_properties(LLMessageSystem *mesgsys, void **user_data)
@@ -4303,7 +4303,7 @@ void process_set_follow_cam_properties(LLMessageSystem *mesgsys, void **user_dat
switch(type)
{
case FOLLOWCAM_PITCH:
- LLFollowCamMgr::setPitch(source_id, value);
+ LLFollowCamMgr::getInstance()->setPitch(source_id, value);
break;
case FOLLOWCAM_FOCUS_OFFSET_X:
focus_offset.mV[VX] = value;
@@ -4318,29 +4318,29 @@ void process_set_follow_cam_properties(LLMessageSystem *mesgsys, void **user_dat
settingFocusOffset = true;
break;
case FOLLOWCAM_POSITION_LAG:
- LLFollowCamMgr::setPositionLag(source_id, value);
+ LLFollowCamMgr::getInstance()->setPositionLag(source_id, value);
break;
case FOLLOWCAM_FOCUS_LAG:
- LLFollowCamMgr::setFocusLag(source_id, value);
+ LLFollowCamMgr::getInstance()->setFocusLag(source_id, value);
break;
case FOLLOWCAM_DISTANCE:
- LLFollowCamMgr::setDistance(source_id, value);
+ LLFollowCamMgr::getInstance()->setDistance(source_id, value);
break;
case FOLLOWCAM_BEHINDNESS_ANGLE:
- LLFollowCamMgr::setBehindnessAngle(source_id, value);
+ LLFollowCamMgr::getInstance()->setBehindnessAngle(source_id, value);
break;
case FOLLOWCAM_BEHINDNESS_LAG:
- LLFollowCamMgr::setBehindnessLag(source_id, value);
+ LLFollowCamMgr::getInstance()->setBehindnessLag(source_id, value);
break;
case FOLLOWCAM_POSITION_THRESHOLD:
- LLFollowCamMgr::setPositionThreshold(source_id, value);
+ LLFollowCamMgr::getInstance()->setPositionThreshold(source_id, value);
break;
case FOLLOWCAM_FOCUS_THRESHOLD:
- LLFollowCamMgr::setFocusThreshold(source_id, value);
+ LLFollowCamMgr::getInstance()->setFocusThreshold(source_id, value);
break;
case FOLLOWCAM_ACTIVE:
//if 1, set using followcam,.
- LLFollowCamMgr::setCameraActive(source_id, value != 0.f);
+ LLFollowCamMgr::getInstance()->setCameraActive(source_id, value != 0.f);
break;
case FOLLOWCAM_POSITION_X:
settingPosition = true;
@@ -4367,10 +4367,10 @@ void process_set_follow_cam_properties(LLMessageSystem *mesgsys, void **user_dat
focus.mV[ 2 ] = value;
break;
case FOLLOWCAM_POSITION_LOCKED:
- LLFollowCamMgr::setPositionLocked(source_id, value != 0.f);
+ LLFollowCamMgr::getInstance()->setPositionLocked(source_id, value != 0.f);
break;
case FOLLOWCAM_FOCUS_LOCKED:
- LLFollowCamMgr::setFocusLocked(source_id, value != 0.f);
+ LLFollowCamMgr::getInstance()->setFocusLocked(source_id, value != 0.f);
break;
default:
@@ -4380,15 +4380,15 @@ void process_set_follow_cam_properties(LLMessageSystem *mesgsys, void **user_dat
if ( settingPosition )
{
- LLFollowCamMgr::setPosition(source_id, position);
+ LLFollowCamMgr::getInstance()->setPosition(source_id, position);
}
if ( settingFocus )
{
- LLFollowCamMgr::setFocus(source_id, focus);
+ LLFollowCamMgr::getInstance()->setFocus(source_id, focus);
}
if ( settingFocusOffset )
{
- LLFollowCamMgr::setFocusOffset(source_id, focus_offset);
+ LLFollowCamMgr::getInstance()->setFocusOffset(source_id, focus_offset);
}
}
//end Ventrella
@@ -5107,8 +5107,8 @@ bool attempt_standard_notification(LLMessageSystem* msgsystem)
// save the home location image to disk
std::string snap_filename = gDirUtilp->getLindenUserDir();
snap_filename += gDirUtilp->getDirDelimiter();
- snap_filename += SCREEN_HOME_FILENAME;
- gViewerWindow->saveSnapshot(snap_filename, gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw(), FALSE, FALSE);
+ snap_filename += LLStartUp::getScreenHomeFilename();
+ gViewerWindow->saveSnapshot(snap_filename, gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw(), FALSE, FALSE, LLSnapshotModel::SNAPSHOT_TYPE_COLOR, LLSnapshotModel::SNAPSHOT_FORMAT_PNG);
}
if (notificationID == "RegionRestartMinutes" ||
@@ -5190,8 +5190,8 @@ static void process_special_alert_messages(const std::string & message)
// save the home location image to disk
std::string snap_filename = gDirUtilp->getLindenUserDir();
snap_filename += gDirUtilp->getDirDelimiter();
- snap_filename += SCREEN_HOME_FILENAME;
- gViewerWindow->saveSnapshot(snap_filename, gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw(), FALSE, FALSE);
+ snap_filename += LLStartUp::getScreenHomeFilename();
+ gViewerWindow->saveSnapshot(snap_filename, gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw(), FALSE, FALSE, LLSnapshotModel::SNAPSHOT_TYPE_COLOR, LLSnapshotModel::SNAPSHOT_FORMAT_PNG);
}
}
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index 1353a27982..c7a77d4d2a 100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -482,7 +482,7 @@ void LLViewerObject::markDead()
if (flagCameraSource())
{
- LLFollowCamMgr::removeFollowCamParams(mID);
+ LLFollowCamMgr::getInstance()->removeFollowCamParams(mID);
}
sNumZombieObjects++;
diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp
index 932759c86d..2bf04dc204 100644
--- a/indra/newview/llviewerobjectlist.cpp
+++ b/indra/newview/llviewerobjectlist.cpp
@@ -1383,7 +1383,11 @@ BOOL LLViewerObjectList::killObject(LLViewerObject *objectp)
if (objectp)
{
- objectp->markDead(); // does the right thing if object already dead
+ // We are going to cleanup a lot of smart pointers to this object, they might be last,
+ // and object being NULLed while inside it's own function won't be pretty
+ // so create a pointer to make sure object will stay alive untill markDead() finishes
+ LLPointer<LLViewerObject> sp(objectp);
+ sp->markDead(); // does the right thing if object already dead
return TRUE;
}
diff --git a/indra/newview/llviewerparcelmedia.cpp b/indra/newview/llviewerparcelmedia.cpp
index d31fc0d606..b1b5275f82 100644
--- a/indra/newview/llviewerparcelmedia.cpp
+++ b/indra/newview/llviewerparcelmedia.cpp
@@ -45,31 +45,22 @@
#include "llviewertexture.h"
#include "llcorehttputil.h"
-// Static Variables
-S32 LLViewerParcelMedia::sMediaParcelLocalID = 0;
-LLUUID LLViewerParcelMedia::sMediaRegionID;
-viewer_media_t LLViewerParcelMedia::sMediaImpl;
-
-
-// static
-void LLViewerParcelMedia::initClass()
+LLViewerParcelMedia::LLViewerParcelMedia():
+mMediaParcelLocalID(0)
{
LLMessageSystem* msg = gMessageSystem;
- msg->setHandlerFunc("ParcelMediaCommandMessage", processParcelMediaCommandMessage );
- msg->setHandlerFunc("ParcelMediaUpdate", processParcelMediaUpdate );
- LLViewerParcelMediaAutoPlay::initClass();
+ msg->setHandlerFunc("ParcelMediaCommandMessage", parcelMediaCommandMessageHandler );
+ msg->setHandlerFunc("ParcelMediaUpdate", parcelMediaUpdateHandler );
}
-//static
-void LLViewerParcelMedia::cleanupClass()
+LLViewerParcelMedia::~LLViewerParcelMedia()
{
// This needs to be destroyed before global destructor time.
- sMediaImpl = NULL;
+ mMediaImpl = NULL;
}
//////////////////////////////////////////////////////////////////////////////////////////
-// static
void LLViewerParcelMedia::update(LLParcel* parcel)
{
if (/*LLViewerMedia::hasMedia()*/ true)
@@ -79,7 +70,7 @@ void LLViewerParcelMedia::update(LLParcel* parcel)
{
if(!gAgent.getRegion())
{
- sMediaRegionID = LLUUID() ;
+ mMediaRegionID = LLUUID() ;
stop() ;
LL_DEBUGS("Media") << "no agent region, bailing out." << LL_ENDL;
return ;
@@ -89,11 +80,11 @@ void LLViewerParcelMedia::update(LLParcel* parcel)
S32 parcelid = parcel->getLocalID();
LLUUID regionid = gAgent.getRegion()->getRegionID();
- if (parcelid != sMediaParcelLocalID || regionid != sMediaRegionID)
+ if (parcelid != mMediaParcelLocalID || regionid != mMediaRegionID)
{
LL_DEBUGS("Media") << "New parcel, parcel id = " << parcelid << ", region id = " << regionid << LL_ENDL;
- sMediaParcelLocalID = parcelid;
- sMediaRegionID = regionid;
+ mMediaParcelLocalID = parcelid;
+ mMediaRegionID = regionid;
}
std::string mediaUrl = std::string ( parcel->getMediaURL () );
@@ -108,19 +99,19 @@ void LLViewerParcelMedia::update(LLParcel* parcel)
LLStringUtil::trim(mediaUrl);
// If no parcel media is playing, nothing left to do
- if(sMediaImpl.isNull())
+ if(mMediaImpl.isNull())
{
return;
}
// Media is playing...has something changed?
- else if (( sMediaImpl->getMediaURL() != mediaUrl )
- || ( sMediaImpl->getMediaTextureID() != parcel->getMediaID() )
- || ( sMediaImpl->getMimeType() != parcel->getMediaType() ))
+ else if (( mMediaImpl->getMediaURL() != mediaUrl )
+ || ( mMediaImpl->getMediaTextureID() != parcel->getMediaID() )
+ || ( mMediaImpl->getMimeType() != parcel->getMediaType() ))
{
// Only play if the media types are the same.
- if(sMediaImpl->getMimeType() == parcel->getMediaType())
+ if(mMediaImpl->getMimeType() == parcel->getMediaType())
{
play(parcel);
}
@@ -176,30 +167,30 @@ void LLViewerParcelMedia::play(LLParcel* parcel)
S32 media_width = parcel->getMediaWidth();
S32 media_height = parcel->getMediaHeight();
- if(sMediaImpl)
+ if(mMediaImpl)
{
// If the url and mime type are the same, call play again
- if(sMediaImpl->getMediaURL() == media_url
- && sMediaImpl->getMimeType() == mime_type
- && sMediaImpl->getMediaTextureID() == placeholder_texture_id)
+ if(mMediaImpl->getMediaURL() == media_url
+ && mMediaImpl->getMimeType() == mime_type
+ && mMediaImpl->getMediaTextureID() == placeholder_texture_id)
{
LL_DEBUGS("Media") << "playing with existing url " << media_url << LL_ENDL;
- sMediaImpl->play();
+ mMediaImpl->play();
}
// Else if the texture id's are the same, navigate and rediscover type
// MBW -- This causes other state from the previous parcel (texture size, autoscale, and looping) to get re-used incorrectly.
// It's also not really necessary -- just creating a new instance is fine.
-// else if(sMediaImpl->getMediaTextureID() == placeholder_texture_id)
+// else if(mMediaImpl->getMediaTextureID() == placeholder_texture_id)
// {
-// sMediaImpl->navigateTo(media_url, mime_type, true);
+// mMediaImpl->navigateTo(media_url, mime_type, true);
// }
else
{
// Since the texture id is different, we need to generate a new impl
// Delete the old one first so they don't fight over the texture.
- sMediaImpl = NULL;
+ mMediaImpl = NULL;
// A new impl will be created below.
}
@@ -208,19 +199,19 @@ void LLViewerParcelMedia::play(LLParcel* parcel)
// Don't ever try to play if the media type is set to "none/none"
if(stricmp(mime_type.c_str(), LLMIMETypes::getDefaultMimeType().c_str()) != 0)
{
- if(!sMediaImpl)
+ if(!mMediaImpl)
{
LL_DEBUGS("Media") << "new media impl with mime type " << mime_type << ", url " << media_url << LL_ENDL;
// There is no media impl, make a new one
- sMediaImpl = LLViewerMedia::newMediaImpl(
+ mMediaImpl = LLViewerMedia::getInstance()->newMediaImpl(
placeholder_texture_id,
media_width,
media_height,
media_auto_scale,
media_loop);
- sMediaImpl->setIsParcelMedia(true);
- sMediaImpl->navigateTo(media_url, mime_type, true);
+ mMediaImpl->setIsParcelMedia(true);
+ mMediaImpl->navigateTo(media_url, mime_type, true);
}
//LLFirstUse::useMedia();
@@ -232,7 +223,7 @@ void LLViewerParcelMedia::play(LLParcel* parcel)
// static
void LLViewerParcelMedia::stop()
{
- if(sMediaImpl.isNull())
+ if(mMediaImpl.isNull())
{
return;
}
@@ -241,27 +232,27 @@ void LLViewerParcelMedia::stop()
LLViewerMediaFocus::getInstance()->clearFocus();
// This will unload & kill the media instance.
- sMediaImpl = NULL;
+ mMediaImpl = NULL;
}
// static
void LLViewerParcelMedia::pause()
{
- if(sMediaImpl.isNull())
+ if(mMediaImpl.isNull())
{
return;
}
- sMediaImpl->pause();
+ mMediaImpl->pause();
}
// static
void LLViewerParcelMedia::start()
{
- if(sMediaImpl.isNull())
+ if(mMediaImpl.isNull())
{
return;
}
- sMediaImpl->start();
+ mMediaImpl->start();
//LLFirstUse::useMedia();
@@ -271,17 +262,17 @@ void LLViewerParcelMedia::start()
// static
void LLViewerParcelMedia::seek(F32 time)
{
- if(sMediaImpl.isNull())
+ if(mMediaImpl.isNull())
{
return;
}
- sMediaImpl->seek(time);
+ mMediaImpl->seek(time);
}
// static
void LLViewerParcelMedia::focus(bool focus)
{
- sMediaImpl->focus(focus);
+ mMediaImpl->focus(focus);
}
// static
@@ -289,9 +280,9 @@ LLPluginClassMediaOwner::EMediaStatus LLViewerParcelMedia::getStatus()
{
LLPluginClassMediaOwner::EMediaStatus result = LLPluginClassMediaOwner::MEDIA_NONE;
- if(sMediaImpl.notNull() && sMediaImpl->hasMedia())
+ if(mMediaImpl.notNull() && mMediaImpl->hasMedia())
{
- result = sMediaImpl->getMediaPlugin()->getStatus();
+ result = mMediaImpl->getMediaPlugin()->getStatus();
}
return result;
@@ -300,15 +291,15 @@ LLPluginClassMediaOwner::EMediaStatus LLViewerParcelMedia::getStatus()
// static
std::string LLViewerParcelMedia::getMimeType()
{
- return sMediaImpl.notNull() ? sMediaImpl->getMimeType() : LLMIMETypes::getDefaultMimeType();
+ return mMediaImpl.notNull() ? mMediaImpl->getMimeType() : LLMIMETypes::getDefaultMimeType();
}
//static
std::string LLViewerParcelMedia::getURL()
{
std::string url;
- if(sMediaImpl.notNull())
- url = sMediaImpl->getMediaURL();
+ if(mMediaImpl.notNull())
+ url = mMediaImpl->getMediaURL();
if(stricmp(LLViewerParcelMgr::getInstance()->getAgentParcel()->getMediaType().c_str(), LLMIMETypes::getDefaultMimeType().c_str()) != 0)
{
@@ -325,19 +316,24 @@ std::string LLViewerParcelMedia::getURL()
//static
std::string LLViewerParcelMedia::getName()
{
- if(sMediaImpl.notNull())
- return sMediaImpl->getName();
+ if(mMediaImpl.notNull())
+ return mMediaImpl->getName();
return "";
}
viewer_media_t LLViewerParcelMedia::getParcelMedia()
{
- return sMediaImpl;
+ return mMediaImpl;
}
//////////////////////////////////////////////////////////////////////////////////////////
// static
-void LLViewerParcelMedia::processParcelMediaCommandMessage( LLMessageSystem *msg, void ** )
+void LLViewerParcelMedia::parcelMediaCommandMessageHandler(LLMessageSystem *msg, void **)
+{
+ getInstance()->processParcelMediaCommandMessage(msg);
+}
+
+void LLViewerParcelMedia::processParcelMediaCommandMessage( LLMessageSystem *msg)
{
// extract the agent id
// LLUUID agent_id;
@@ -392,7 +388,7 @@ void LLViewerParcelMedia::processParcelMediaCommandMessage( LLMessageSystem *msg
if (flags & (1<<PARCEL_MEDIA_COMMAND_TIME))
{
- if(sMediaImpl.isNull())
+ if(mMediaImpl.isNull())
{
LLParcel *parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
play(parcel);
@@ -403,7 +399,12 @@ void LLViewerParcelMedia::processParcelMediaCommandMessage( LLMessageSystem *msg
//////////////////////////////////////////////////////////////////////////////////////////
// static
-void LLViewerParcelMedia::processParcelMediaUpdate( LLMessageSystem *msg, void ** )
+void LLViewerParcelMedia::parcelMediaUpdateHandler(LLMessageSystem *msg, void **)
+{
+ getInstance()->processParcelMediaUpdate(msg);
+}
+
+void LLViewerParcelMedia::processParcelMediaUpdate( LLMessageSystem *msg)
{
LLUUID media_id;
std::string media_url;
diff --git a/indra/newview/llviewerparcelmedia.h b/indra/newview/llviewerparcelmedia.h
index 534f65b419..779a65bdf8 100644
--- a/indra/newview/llviewerparcelmedia.h
+++ b/indra/newview/llviewerparcelmedia.h
@@ -37,50 +37,53 @@ class LLViewerParcelMediaNavigationObserver;
// This class understands land parcels, network traffic, LSL media
// transport commands, and talks to the LLViewerMedia class to actually
// do playback. It allows us to remove code from LLViewerParcelMgr.
-class LLViewerParcelMedia : public LLViewerMediaObserver
+class LLViewerParcelMedia : public LLViewerMediaObserver, public LLSingleton<LLViewerParcelMedia>
{
+ LLSINGLETON(LLViewerParcelMedia);
+ ~LLViewerParcelMedia();
LOG_CLASS(LLViewerParcelMedia);
- public:
- static void initClass();
- static void cleanupClass();
-
- static void update(LLParcel* parcel);
- // called when the agent's parcel has a new URL, or the agent has
- // walked on to a new parcel with media
-
- static void play(LLParcel* parcel);
- // user clicked play button in media transport controls
-
- static void stop();
- // user clicked stop button in media transport controls
-
- static void pause();
- static void start();
- // restart after pause - no need for all the setup
-
- static void focus(bool focus);
-
- static void seek(F32 time);
- // jump to timecode time
-
- static LLPluginClassMediaOwner::EMediaStatus getStatus();
- static std::string getMimeType();
- static std::string getURL();
- static std::string getName();
- static viewer_media_t getParcelMedia();
-
- static void processParcelMediaCommandMessage( LLMessageSystem *msg, void ** );
- static void processParcelMediaUpdate( LLMessageSystem *msg, void ** );
- static void sendMediaNavigateMessage(const std::string& url);
-
- // inherited from LLViewerMediaObserver
- virtual void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event);
-
- public:
- static S32 sMediaParcelLocalID;
- static LLUUID sMediaRegionID;
- // HACK: this will change with Media on a Prim
- static viewer_media_t sMediaImpl;
+public:
+ void update(LLParcel* parcel);
+ // called when the agent's parcel has a new URL, or the agent has
+ // walked on to a new parcel with media
+
+ void play(LLParcel* parcel);
+ // user clicked play button in media transport controls
+
+ void stop();
+ // user clicked stop button in media transport controls
+
+ void pause();
+ void start();
+ // restart after pause - no need for all the setup
+
+ void focus(bool focus);
+
+ void seek(F32 time);
+ // jump to timecode time
+
+ LLPluginClassMediaOwner::EMediaStatus getStatus();
+ std::string getMimeType();
+ std::string getURL();
+ std::string getName();
+ viewer_media_t getParcelMedia();
+ bool hasParcelMedia() { return mMediaImpl.notNull(); }
+
+ static void parcelMediaCommandMessageHandler( LLMessageSystem *msg, void ** );
+ static void parcelMediaUpdateHandler( LLMessageSystem *msg, void ** );
+ void sendMediaNavigateMessage(const std::string& url);
+
+ // inherited from LLViewerMediaObserver
+ virtual void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event);
+
+private:
+ void processParcelMediaCommandMessage(LLMessageSystem *msg);
+ void processParcelMediaUpdate(LLMessageSystem *msg);
+
+ S32 mMediaParcelLocalID;
+ LLUUID mMediaRegionID;
+ // HACK: this will change with Media on a Prim
+ viewer_media_t mMediaImpl;
};
diff --git a/indra/newview/llviewerparcelmediaautoplay.cpp b/indra/newview/llviewerparcelmediaautoplay.cpp
index 57ee583eae..b5a76ccba2 100644
--- a/indra/newview/llviewerparcelmediaautoplay.cpp
+++ b/indra/newview/llviewerparcelmediaautoplay.cpp
@@ -51,29 +51,10 @@ LLViewerParcelMediaAutoPlay::LLViewerParcelMediaAutoPlay() :
{
}
-static LLViewerParcelMediaAutoPlay *sAutoPlay = NULL;
-
-// static
-void LLViewerParcelMediaAutoPlay::initClass()
-{
- if (!sAutoPlay)
- sAutoPlay = new LLViewerParcelMediaAutoPlay;
-}
-
-// static
-void LLViewerParcelMediaAutoPlay::cleanupClass()
-{
- if (sAutoPlay)
- delete sAutoPlay;
-}
-
// static
void LLViewerParcelMediaAutoPlay::playStarted()
{
- if (sAutoPlay)
- {
- sAutoPlay->mPlayed = TRUE;
- }
+ LLSingleton<LLViewerParcelMediaAutoPlay>::getInstance()->mPlayed = TRUE;
}
BOOL LLViewerParcelMediaAutoPlay::tick()
@@ -122,7 +103,7 @@ BOOL LLViewerParcelMediaAutoPlay::tick()
(mTimeInParcel > AUTOPLAY_TIME) && // and if we've been here for so many seconds
(!this_media_url.empty()) && // and if the parcel has media
(stricmp(this_media_type.c_str(), LLMIMETypes::getDefaultMimeType().c_str()) != 0) &&
- (LLViewerParcelMedia::sMediaImpl.isNull())) // and if the media is not already playing
+ (!LLViewerParcelMedia::getInstance()->hasParcelMedia())) // and if the media is not already playing
{
if (this_media_texture_id.notNull()) // and if the media texture is good
{
@@ -144,7 +125,7 @@ BOOL LLViewerParcelMediaAutoPlay::tick()
if (gSavedSettings.getBOOL("ParcelMediaAutoPlayEnable"))
{
// and last but not least, only play when autoplay is enabled
- LLViewerParcelMedia::play(this_parcel);
+ LLViewerParcelMedia::getInstance()->play(this_parcel);
}
}
diff --git a/indra/newview/llviewerparcelmediaautoplay.h b/indra/newview/llviewerparcelmediaautoplay.h
index a052362829..33565307f2 100644
--- a/indra/newview/llviewerparcelmediaautoplay.h
+++ b/indra/newview/llviewerparcelmediaautoplay.h
@@ -31,13 +31,11 @@
#include "lluuid.h"
// timer to automatically play media
-class LLViewerParcelMediaAutoPlay : LLEventTimer
+class LLViewerParcelMediaAutoPlay : LLEventTimer, public LLSingleton<LLViewerParcelMediaAutoPlay>
{
- public:
- LLViewerParcelMediaAutoPlay();
+ LLSINGLETON(LLViewerParcelMediaAutoPlay);
+public:
virtual BOOL tick();
- static void initClass();
- static void cleanupClass();
static void playStarted();
private:
diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp
index 416d5d8e2e..6cc88d0c0b 100644
--- a/indra/newview/llviewerparcelmgr.cpp
+++ b/indra/newview/llviewerparcelmgr.cpp
@@ -1822,7 +1822,7 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
else
{
// Check for video
- LLViewerParcelMedia::update(parcel);
+ LLViewerParcelMedia::getInstance()->update(parcel);
// Then check for music
if (gAudiop)
diff --git a/indra/newview/llviewertexteditor.cpp b/indra/newview/llviewertexteditor.cpp
index 7d2d6e25c7..0e181bf53d 100644
--- a/indra/newview/llviewertexteditor.cpp
+++ b/indra/newview/llviewertexteditor.cpp
@@ -239,7 +239,7 @@ public:
/*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask)
{
- LLUI::getWindow()->setCursor(UI_CURSOR_HAND);
+ LLUI::getInstance()->getWindow()->setCursor(UI_CURSOR_HAND);
return TRUE;
}
virtual BOOL handleToolTip(S32 x, S32 y, MASK mask )
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index a81b3aaef9..305f891a86 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -3459,7 +3459,7 @@ void LLViewerMediaTexture::setMediaImpl()
{
if(!mMediaImplp)
{
- mMediaImplp = LLViewerMedia::getMediaImplFromTextureID(mID);
+ mMediaImplp = LLViewerMedia::getInstance()->getMediaImplFromTextureID(mID);
}
}
@@ -3680,9 +3680,9 @@ void LLViewerMediaTexture::removeFace(U32 ch, LLFace* facep)
}
}
- if(te && te->getID().notNull()) //should have a texture
+ if(te && te->getID().notNull()) //should have a texture but none found
{
- LL_ERRS() << "mTextureList texture reference number is corrupted." << LL_ENDL;
+ LL_ERRS() << "mTextureList texture reference number is corrupted. Texture id: " << te->getID() << " List size: " << (U32)mTextureList.size() << LL_ENDL;
}
}
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 4c6a3dd33d..61f4ee463d 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -122,7 +122,7 @@
#include "llhudmanager.h"
#include "llhudobject.h"
#include "llhudview.h"
-#include "llimagebmp.h"
+#include "llimage.h"
#include "llimagej2c.h"
#include "llimageworker.h"
#include "llkeyboard.h"
@@ -960,7 +960,7 @@ BOOL LLViewerWindow::handleAnyMouseClick(LLWindow *window, LLCoordGL pos, MASK
mWindow->releaseMouse();
// Indicate mouse was active
- LLUI::resetMouseIdleTimer();
+ LLUI::getInstance()->resetMouseIdleTimer();
// Don't let the user move the mouse out of the window until mouse up.
if( LLToolMgr::getInstance()->getCurrentTool()->clipMouseWhenDown() )
@@ -1295,7 +1295,7 @@ void LLViewerWindow::handleMouseMove(LLWindow *window, LLCoordGL pos, MASK mask
if (mouse_point != mCurrentMousePoint)
{
- LLUI::resetMouseIdleTimer();
+ LLUI::getInstance()->resetMouseIdleTimer();
}
saveLastMouse(mouse_point);
@@ -1796,8 +1796,6 @@ LLViewerWindow::LLViewerWindow(const Params& p)
//
LL_DEBUGS("Window") << "Loading feature tables." << LL_ENDL;
- LLFeatureManager::getInstance()->init();
-
// Initialize OpenGL Renderer
if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderVBOEnable") ||
!gGLManager.mHasVertexBufferObject)
@@ -1852,7 +1850,7 @@ LLViewerWindow::LLViewerWindow(const Params& p)
rvp.mouse_opaque(false);
rvp.follows.flags(FOLLOWS_NONE);
mRootView = LLUICtrlFactory::create<LLRootView>(rvp);
- LLUI::setRootView(mRootView);
+ LLUI::getInstance()->setRootView(mRootView);
// Make avatar head look forward at start
mCurrentMousePoint.mX = getWindowWidthScaled() / 2;
@@ -2410,7 +2408,7 @@ void LLViewerWindow::setNormalControlsVisible( BOOL visible )
gStatusBar->setEnabled( visible );
}
- LLNavigationBar* navbarp = LLUI::getRootView()->findChild<LLNavigationBar>("navigation_bar");
+ LLNavigationBar* navbarp = LLUI::getInstance()->getRootView()->findChild<LLNavigationBar>("navigation_bar");
if (navbarp)
{
// when it's time to show navigation bar we need to ensure that the user wants to see it
@@ -2520,7 +2518,7 @@ void LLViewerWindow::draw()
if (!gSavedSettings.getBOOL("RenderUIBuffer"))
{
- LLUI::sDirtyRect = getWindowRectScaled();
+ LLUI::getInstance()->mDirtyRect = getWindowRectScaled();
}
// HACK for timecode debugging
@@ -2920,7 +2918,7 @@ BOOL LLViewerWindow::handleUnicodeChar(llwchar uni_char, MASK mask)
void LLViewerWindow::handleScrollWheel(S32 clicks)
{
- LLUI::resetMouseIdleTimer();
+ LLUI::getInstance()->resetMouseIdleTimer();
LLMouseHandler* mouse_captor = gFocusMgr.getMouseCapture();
if( mouse_captor )
@@ -2999,7 +2997,7 @@ void LLViewerWindow::moveCursorToCenter()
S32 x = getWorldViewWidthScaled() / 2;
S32 y = getWorldViewHeightScaled() / 2;
- LLUI::setMousePositionScreen(x, y);
+ LLUI::getInstance()->setMousePositionScreen(x, y);
//on a forced move, all deltas get zeroed out to prevent jumping
mCurrentMousePoint.set(x,y);
@@ -4487,32 +4485,46 @@ void LLViewerWindow::movieSize(S32 new_width, S32 new_height)
}
}
-BOOL LLViewerWindow::saveSnapshot(const std::string& filepath, S32 image_width, S32 image_height, BOOL show_ui, BOOL do_rebuild, LLSnapshotModel::ESnapshotLayerType type)
+BOOL LLViewerWindow::saveSnapshot(const std::string& filepath, S32 image_width, S32 image_height, BOOL show_ui, BOOL do_rebuild, LLSnapshotModel::ESnapshotLayerType type, LLSnapshotModel::ESnapshotFormat format)
{
- LL_INFOS() << "Saving snapshot to: " << filepath << LL_ENDL;
+ LL_INFOS() << "Saving snapshot to: " << filepath << LL_ENDL;
- LLPointer<LLImageRaw> raw = new LLImageRaw;
- BOOL success = rawSnapshot(raw, image_width, image_height, TRUE, FALSE, show_ui, do_rebuild);
+ LLPointer<LLImageRaw> raw = new LLImageRaw;
+ BOOL success = rawSnapshot(raw, image_width, image_height, TRUE, FALSE, show_ui, do_rebuild);
- if (success)
- {
- LLPointer<LLImageBMP> bmp_image = new LLImageBMP;
- success = bmp_image->encode(raw, 0.0f);
- if( success )
- {
- success = bmp_image->save(filepath);
- }
- else
- {
- LL_WARNS() << "Unable to encode bmp snapshot" << LL_ENDL;
- }
- }
- else
- {
- LL_WARNS() << "Unable to capture raw snapshot" << LL_ENDL;
- }
+ if (success)
+ {
+ U8 image_codec = IMG_CODEC_BMP;
+ switch (format)
+ {
+ case LLSnapshotModel::SNAPSHOT_FORMAT_PNG:
+ image_codec = IMG_CODEC_PNG;
+ break;
+ case LLSnapshotModel::SNAPSHOT_FORMAT_JPEG:
+ image_codec = IMG_CODEC_JPEG;
+ break;
+ default:
+ image_codec = IMG_CODEC_BMP;
+ break;
+ }
- return success;
+ LLPointer<LLImageFormatted> formated_image = LLImageFormatted::createFromType(image_codec);
+ success = formated_image->encode(raw, 0.0f);
+ if (success)
+ {
+ success = formated_image->save(filepath);
+ }
+ else
+ {
+ LL_WARNS() << "Unable to encode snapshot of format " << format << LL_ENDL;
+ }
+ }
+ else
+ {
+ LL_WARNS() << "Unable to capture raw snapshot" << LL_ENDL;
+ }
+
+ return success;
}
diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h
index d41a606f11..071a3632dd 100644
--- a/indra/newview/llviewerwindow.h
+++ b/indra/newview/llviewerwindow.h
@@ -347,7 +347,7 @@ public:
// snapshot functionality.
// perhaps some of this should move to llfloatershapshot? -MG
- BOOL saveSnapshot(const std::string& filename, S32 image_width, S32 image_height, BOOL show_ui = TRUE, BOOL do_rebuild = FALSE, LLSnapshotModel::ESnapshotLayerType type = LLSnapshotModel::SNAPSHOT_TYPE_COLOR);
+ BOOL saveSnapshot(const std::string& filename, S32 image_width, S32 image_height, BOOL show_ui = TRUE, BOOL do_rebuild = FALSE, LLSnapshotModel::ESnapshotLayerType type = LLSnapshotModel::SNAPSHOT_TYPE_COLOR, LLSnapshotModel::ESnapshotFormat format = LLSnapshotModel::SNAPSHOT_FORMAT_BMP);
BOOL rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_height, BOOL keep_window_aspect = TRUE, BOOL is_texture = FALSE,
BOOL show_ui = TRUE, BOOL do_rebuild = FALSE, LLSnapshotModel::ESnapshotLayerType type = LLSnapshotModel::SNAPSHOT_TYPE_COLOR, S32 max_size = MAX_SNAPSHOT_IMAGE_SIZE);
BOOL thumbnailSnapshot(LLImageRaw *raw, S32 preview_width, S32 preview_height, BOOL show_ui, BOOL do_rebuild, LLSnapshotModel::ESnapshotLayerType type);
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 5584efeb7b..ca1216b89d 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -7363,7 +7363,7 @@ void LLVOAvatar::getOffObject()
if (sit_object)
{
stopMotionFromSource(sit_object->getID());
- LLFollowCamMgr::setCameraActive(sit_object->getID(), FALSE);
+ LLFollowCamMgr::getInstance()->setCameraActive(sit_object->getID(), FALSE);
LLViewerObject::const_child_list_t& child_list = sit_object->getChildren();
for (LLViewerObject::child_list_t::const_iterator iter = child_list.begin();
@@ -7372,7 +7372,7 @@ void LLVOAvatar::getOffObject()
LLViewerObject* child_objectp = *iter;
stopMotionFromSource(child_objectp->getID());
- LLFollowCamMgr::setCameraActive(child_objectp->getID(), FALSE);
+ LLFollowCamMgr::getInstance()->setCameraActive(child_objectp->getID(), FALSE);
}
}
@@ -10467,6 +10467,11 @@ void LLVOAvatar::calcMutedAVColor()
new_color = LLColor4::grey4;
change_msg = " blocked: color is grey4";
}
+ else if (!isTooComplex())
+ {
+ new_color = LLColor4::white;
+ change_msg = " simple imposter ";
+ }
else if ( mMutedAVColor == LLColor4::white || mMutedAVColor == LLColor4::grey3 || mMutedAVColor == LLColor4::grey4 )
{
// select a color based on the first byte of the agents uuid so any muted agent is always the same color
diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp
index dcaade55a6..63ace4fe52 100644
--- a/indra/newview/llvoavatarself.cpp
+++ b/indra/newview/llvoavatarself.cpp
@@ -1208,7 +1208,7 @@ BOOL LLVOAvatarSelf::detachObject(LLViewerObject *viewer_object)
// the simulator should automatically handle permission revocation
stopMotionFromSource(attachment_id);
- LLFollowCamMgr::setCameraActive(viewer_object->getID(), FALSE);
+ LLFollowCamMgr::getInstance()->setCameraActive(viewer_object->getID(), FALSE);
LLViewerObject::const_child_list_t& child_list = viewer_object->getChildren();
for (LLViewerObject::child_list_t::const_iterator iter = child_list.begin();
@@ -1220,7 +1220,7 @@ BOOL LLVOAvatarSelf::detachObject(LLViewerObject *viewer_object)
// permissions revocation
stopMotionFromSource(child_objectp->getID());
- LLFollowCamMgr::setCameraActive(child_objectp->getID(), FALSE);
+ LLFollowCamMgr::getInstance()->setCameraActive(child_objectp->getID(), FALSE);
}
// Make sure the inventory is in sync with the avatar.
diff --git a/indra/newview/llvocache.cpp b/indra/newview/llvocache.cpp
index fb28d9bdb5..07660ca6ac 100644
--- a/indra/newview/llvocache.cpp
+++ b/indra/newview/llvocache.cpp
@@ -1045,9 +1045,9 @@ const char* object_cache_dirname = "objectcache";
const char* header_filename = "object.cache";
-LLVOCache::LLVOCache():
+LLVOCache::LLVOCache(bool read_only) :
mInitialized(false),
- mReadOnly(true),
+ mReadOnly(read_only),
mNumEntries(0),
mCacheSize(1)
{
diff --git a/indra/newview/llvocache.h b/indra/newview/llvocache.h
index 594d38249b..6c95541c11 100644
--- a/indra/newview/llvocache.h
+++ b/indra/newview/llvocache.h
@@ -221,9 +221,9 @@ private:
//
//Note: LLVOCache is not thread-safe
//
-class LLVOCache : public LLSingleton<LLVOCache>
+class LLVOCache : public LLParamSingleton<LLVOCache>
{
- LLSINGLETON(LLVOCache);
+ LLSINGLETON(LLVOCache, bool read_only);
~LLVOCache() ;
private:
@@ -259,15 +259,14 @@ private:
typedef std::map<U64, HeaderEntryInfo*> handle_entry_map_t;
public:
- void initCache(ELLPath location, U32 size, U32 cache_version) ;
+ // We need this init to be separate from constructor, since we might construct cache, purge it, then init.
+ void initCache(ELLPath location, U32 size, U32 cache_version);
void removeCache(ELLPath location, bool started = false) ;
void readFromCache(U64 handle, const LLUUID& id, LLVOCacheEntry::vocache_entry_map_t& cache_entry_map) ;
void writeToCache(U64 handle, const LLUUID& id, const LLVOCacheEntry::vocache_entry_map_t& cache_entry_map, BOOL dirty_cache, bool removal_enabled);
void removeEntry(U64 handle) ;
- void setReadOnly(bool read_only) {mReadOnly = read_only;}
-
U32 getCacheEntries() { return mNumEntries; }
U32 getCacheEntriesMax() { return mCacheSize; }
diff --git a/indra/newview/llvoicecallhandler.cpp b/indra/newview/llvoicecallhandler.cpp
index 2050dab689..1e993d1384 100644
--- a/indra/newview/llvoicecallhandler.cpp
+++ b/indra/newview/llvoicecallhandler.cpp
@@ -40,7 +40,7 @@ public:
bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
{
- if (!LLUI::sSettingGroups["config"]->getBOOL("EnableVoiceCall"))
+ if (!LLUI::getInstance()->mSettingGroups["config"]->getBOOL("EnableVoiceCall"))
{
LLNotificationsUtil::add("NoVoiceCall", LLSD(), LLSD(), std::string("SwitchToStandardSkinAndQuit"));
return true;
diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp
index 5c107cc10b..d8c8cb0461 100644
--- a/indra/newview/llvoiceclient.cpp
+++ b/indra/newview/llvoiceclient.cpp
@@ -116,7 +116,7 @@ std::string LLVoiceClientStatusObserver::status2string(LLVoiceClientStatusObserv
///////////////////////////////////////////////////////////////////////////////////////////////
-LLVoiceClient::LLVoiceClient()
+LLVoiceClient::LLVoiceClient(LLPumpIO *pump)
:
mVoiceModule(NULL),
m_servicePump(NULL),
@@ -133,6 +133,7 @@ LLVoiceClient::LLVoiceClient()
mDisableMic(false)
{
updateSettings();
+ init(pump);
}
//---------------------------------------------------
diff --git a/indra/newview/llvoiceclient.h b/indra/newview/llvoiceclient.h
index 758e9cecd7..f95b853c31 100644
--- a/indra/newview/llvoiceclient.h
+++ b/indra/newview/llvoiceclient.h
@@ -310,9 +310,9 @@ public:
};
-class LLVoiceClient: public LLSingleton<LLVoiceClient>
+class LLVoiceClient: public LLParamSingleton<LLVoiceClient>
{
- LLSINGLETON(LLVoiceClient);
+ LLSINGLETON(LLVoiceClient, LLPumpIO *pump);
LOG_CLASS(LLVoiceClient);
~LLVoiceClient();
@@ -320,7 +320,6 @@ public:
typedef boost::signals2::signal<void(void)> micro_changed_signal_t;
micro_changed_signal_t mMicroChangedSignal;
- void init(LLPumpIO *pump); // Call this once at application startup (creates connector)
void terminate(); // Call this to clean up during shutdown
const LLVoiceVersionInfo getVersion();
@@ -472,6 +471,8 @@ public:
// Returns NULL if voice effects are not supported, or not enabled.
LLVoiceEffectInterface* getVoiceEffectInterface() const;
//@}
+private:
+ void init(LLPumpIO *pump);
protected:
LLVoiceModuleInterface* mVoiceModule;
diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp
index e10ba77e16..739f7bd47c 100644
--- a/indra/newview/llvoicevivox.cpp
+++ b/indra/newview/llvoicevivox.cpp
@@ -824,6 +824,20 @@ bool LLVivoxVoiceClient::startAndLaunchDaemon()
params.args.add("-lf");
params.args.add(log_folder);
+ // set log file basename and .log
+ params.args.add("-lp");
+ params.args.add("SLVoice");
+ params.args.add("-ls");
+ params.args.add(".log");
+
+ // rotate any existing log
+ std::string new_log = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "SLVoice.log");
+ std::string old_log = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "SLVoice.old");
+ if (gDirUtilp->fileExists(new_log))
+ {
+ LLFile::rename(new_log, old_log);
+ }
+
std::string shutdown_timeout = gSavedSettings.getString("VivoxShutdownTimeout");
if (!shutdown_timeout.empty())
{
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 33a9c771ea..0a1efd564f 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -189,7 +189,7 @@ public:
virtual bool isInterestingEnough() const
{
- return LLViewerMedia::isInterestingEnough(mObject, getMediaInterest());
+ return LLViewerMedia::getInstance()->isInterestingEnough(mObject, getMediaInterest());
}
virtual std::string getCapabilityUrl(const std::string &name) const
@@ -2705,7 +2705,7 @@ void LLVOVolume::syncMediaData(S32 texture_index, const LLSD &media_data, bool m
LLUUID updating_agent = LLTextureEntry::getAgentIDFromMediaVersionString(getMediaURL());
update_from_self = (updating_agent == gAgent.getID());
}
- viewer_media_t media_impl = LLViewerMedia::updateMediaImpl(mep, previous_url, update_from_self);
+ viewer_media_t media_impl = LLViewerMedia::getInstance()->updateMediaImpl(mep, previous_url, update_from_self);
addMediaImpl(media_impl, texture_index) ;
}
diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp
index 61ec02957e..a34c5826ed 100644
--- a/indra/newview/llweb.cpp
+++ b/indra/newview/llweb.cpp
@@ -39,7 +39,6 @@
#include "lllogininstance.h"
#include "llparcel.h"
#include "llsd.h"
-#include "lltoastalertpanel.h"
#include "llui.h"
#include "lluri.h"
#include "llversioninfo.h"
@@ -57,32 +56,6 @@
bool on_load_url_external_response(const LLSD& notification, const LLSD& response, bool async );
-class URLLoader : public LLToastAlertPanel::URLLoader
-{
- virtual void load(const std::string& url , bool force_open_externally)
- {
- if (force_open_externally)
- {
- LLWeb::loadURLExternal(url);
- }
- else
- {
- LLWeb::loadURL(url);
- }
- }
-};
-static URLLoader sAlertURLLoader;
-
-
-// static
-void LLWeb::initClass()
-{
- LLToastAlertPanel::setURLLoader(&sAlertURLLoader);
-}
-
-
-
-
// static
void LLWeb::loadURL(const std::string& url, const std::string& target, const std::string& uuid)
{
@@ -121,7 +94,7 @@ void LLWeb::loadURLExternal(const std::string& url, const std::string& uuid)
void LLWeb::loadURLExternal(const std::string& url, bool async, const std::string& uuid)
{
// Act like the proxy window was closed, since we won't be able to track targeted windows in the external browser.
- LLViewerMedia::proxyWindowClosed(uuid);
+ LLViewerMedia::getInstance()->proxyWindowClosed(uuid);
if(gSavedSettings.getBOOL("DisableExternalBrowser"))
{
diff --git a/indra/newview/llweb.h b/indra/newview/llweb.h
index 7149ce9baf..0426f00f27 100644
--- a/indra/newview/llweb.h
+++ b/indra/newview/llweb.h
@@ -46,8 +46,6 @@ public:
BROWSER_INT_LL_EXT_OTHERS = 1,
BROWSER_INTERNAL_ONLY = 2
};
-
- static void initClass();
/// Load the given url in the operating system's web browser, async if we want to return immediately
/// before browser has spawned
diff --git a/indra/newview/llwebprofile.cpp b/indra/newview/llwebprofile.cpp
index 8dcef2c7cd..569f479a16 100644
--- a/indra/newview/llwebprofile.cpp
+++ b/indra/newview/llwebprofile.cpp
@@ -83,7 +83,7 @@ void LLWebProfile::setAuthCookie(const std::string& cookie)
LLCore::HttpHeaders::ptr_t LLWebProfile::buildDefaultHeaders()
{
LLCore::HttpHeaders::ptr_t httpHeaders(new LLCore::HttpHeaders);
- LLSD headers = LLViewerMedia::getHeaders();
+ LLSD headers = LLViewerMedia::getInstance()->getHeaders();
for (LLSD::map_iterator it = headers.beginMap(); it != headers.endMap(); ++it)
{
diff --git a/indra/newview/llwindowlistener.cpp b/indra/newview/llwindowlistener.cpp
index 5367262bb6..9e4297baaf 100644
--- a/indra/newview/llwindowlistener.cpp
+++ b/indra/newview/llwindowlistener.cpp
@@ -69,7 +69,7 @@ LLWindowListener::LLWindowListener(LLViewerWindow *window, const KeyboardGetter&
std::string buttonExplain =
"(button values \"LEFT\", \"MIDDLE\", \"RIGHT\")\n";
std::string paramsExplain =
- "[\"path\"] is as for LLUI::resolvePath(), described in\n"
+ "[\"path\"] is as for LLUI::getInstance()->resolvePath(), described in\n"
"http://bitbucket.org/lindenlab/viewer-release/src/tip/indra/llui/llui.h\n"
"If you omit [\"path\"], you must specify both [\"x\"] and [\"y\"].\n"
"If you specify [\"path\"] without both [\"x\"] and [\"y\"], will synthesize (x, y)\n"
@@ -209,7 +209,7 @@ void LLWindowListener::getInfo(LLSD const & evt)
if (evt.has("path"))
{
std::string path(evt["path"]);
- LLView * target_view = LLUI::resolvePath(LLUI::getRootView(), path);
+ LLView * target_view = LLUI::getInstance()->resolvePath(LLUI::getInstance()->getRootView(), path);
if (target_view != 0)
{
response.setResponse(target_view->getInfo());
@@ -230,7 +230,7 @@ void LLWindowListener::getInfo(LLSD const & evt)
void LLWindowListener::getPaths(LLSD const & request)
{
Response response(LLSD(), request);
- LLView *root(LLUI::getRootView()), *base(NULL);
+ LLView *root(LLUI::getInstance()->getRootView()), *base(NULL);
// Capturing request["under"] as string means we conflate the case in
// which there is no ["under"] key with the case in which its value is the
// empty string. That seems to make sense to me.
@@ -243,7 +243,7 @@ void LLWindowListener::getPaths(LLSD const & request)
}
else
{
- base = LLUI::resolvePath(root, under);
+ base = LLUI::getInstance()->resolvePath(root, under);
if (! base)
{
return response.error(STRINGIZE(request["op"].asString() << " request "
@@ -268,7 +268,7 @@ void LLWindowListener::keyDown(LLSD const & evt)
if (evt.has("path"))
{
std::string path(evt["path"]);
- LLView * target_view = LLUI::resolvePath(LLUI::getRootView(), path);
+ LLView * target_view = LLUI::getInstance()->resolvePath(LLUI::getInstance()->getRootView(), path);
if (target_view == 0)
{
response.error(STRINGIZE(evt["op"].asString() << " request "
@@ -303,7 +303,7 @@ void LLWindowListener::keyUp(LLSD const & evt)
if (evt.has("path"))
{
std::string path(evt["path"]);
- LLView * target_view = LLUI::resolvePath(LLUI::getRootView(), path);
+ LLView * target_view = LLUI::getInstance()->resolvePath(LLUI::getInstance()->getRootView(), path);
if (target_view == 0 )
{
response.error(STRINGIZE(evt["op"].asString() << " request "
@@ -407,8 +407,8 @@ static void mouseEvent(const MouseFunc& func, const LLSD& request)
}
else // ! path.empty()
{
- LLView* root = LLUI::getRootView();
- LLView* target = LLUI::resolvePath(root, path);
+ LLView* root = LLUI::getInstance()->getRootView();
+ LLView* target = LLUI::getInstance()->resolvePath(root, path);
if (! target)
{
return response.error(STRINGIZE(request["op"].asString() << " request "
diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp
index cee47a591e..89f5eb86b3 100644
--- a/indra/newview/llworld.cpp
+++ b/indra/newview/llworld.cpp
@@ -916,10 +916,10 @@ void LLWorld::updateWaterObjects()
}
}
- for (std::list<LLVOWater*>::iterator iter = mHoleWaterObjects.begin();
+ for (std::list<LLPointer<LLVOWater> >::iterator iter = mHoleWaterObjects.begin();
iter != mHoleWaterObjects.end(); ++ iter)
{
- LLVOWater* waterp = *iter;
+ LLVOWater* waterp = (*iter).get();
gObjectList.killObject(waterp);
}
mHoleWaterObjects.clear();
diff --git a/indra/newview/llworld.h b/indra/newview/llworld.h
index c9ac241d5a..993fbfb2cc 100644
--- a/indra/newview/llworld.h
+++ b/indra/newview/llworld.h
@@ -199,7 +199,7 @@ private:
// Data for "Fake" objects
//
- std::list<LLVOWater*> mHoleWaterObjects;
+ std::list<LLPointer<LLVOWater> > mHoleWaterObjects;
LLPointer<LLVOWater> mEdgeWaterObjects[8];
LLPointer<LLViewerTexture> mDefaultWaterTexturep;
diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp
index 86249badaa..9bc3a2a33b 100644
--- a/indra/newview/llworldmapview.cpp
+++ b/indra/newview/llworldmapview.cpp
@@ -1622,7 +1622,7 @@ BOOL LLWorldMapView::handleMouseUp( S32 x, S32 y, MASK mask )
LLRect clip_rect = getRect();
clip_rect.stretch(-8);
clip_rect.clipPointToRect(mMouseDownX, mMouseDownY, local_x, local_y);
- LLUI::setMousePositionLocal(this, local_x, local_y);
+ LLUI::getInstance()->setMousePositionLocal(this, local_x, local_y);
// finish the pan
mPanning = FALSE;
diff --git a/indra/newview/skins/default/xui/de/floater_about_land.xml b/indra/newview/skins/default/xui/de/floater_about_land.xml
index 2bff6d3e2f..4dd64cba2a 100644
--- a/indra/newview/skins/default/xui/de/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/de/floater_about_land.xml
@@ -9,6 +9,12 @@
<floater.string name="maturity_icon_adult">
&quot;Parcel_R_Dark&quot;
</floater.string>
+ <floater.string name="Hours">
+ [HOURS] Stunden
+ </floater.string>
+ <floater.string name="Hour">
+ Std.
+ </floater.string>
<floater.string name="Minutes">
[MINUTES] Min.
</floater.string>
@@ -21,7 +27,10 @@
<floater.string name="Remaining">
Restzeit
</floater.string>
- <tab_container name="landtab" tab_min_width="40">
+ <floater.string name="Always">
+ Immer
+ </floater.string>
+ <tab_container name="landtab" tab_min_width="40" width="489">
<panel label="ALLGEMEIN" name="land_general_panel">
<panel.string name="new users only">
Nur neue Benutzer
@@ -319,18 +328,18 @@ Nur große Parzellen können in der Suche aufgeführt werden.
<text name="allow_label2">
Bauen:
</text>
- <check_box label="Jeder" name="edit objects check"/>
- <check_box label="Gruppe" name="edit group objects check"/>
+ <check_box label="Jeder" name="edit objects check" tool_tip="Wenn aktiviert, können Einwohner auf Ihrem Land Objekte erstellen und rezzen."/>
+ <check_box label="Gruppe" name="edit group objects check" tool_tip="Wenn aktiviert, können Parzellengruppen-Mitglieder auf Ihrem Land Objekte erstellen und rezzen."/>
<text name="allow_label3">
Objekteintritt:
</text>
- <check_box label="Jeder" name="all object entry check"/>
- <check_box label="Gruppe" name="group object entry check"/>
+ <check_box label="Jeder" name="all object entry check" tool_tip="Wenn aktiviert, können Einwohner bestehende Objekte von anderen Parzellen auf diese Parzelle verschieben."/>
+ <check_box label="Gruppe" name="group object entry check" tool_tip="Wenn aktiviert, können Parzellengruppen-Mitglieder bestehende Objekte von anderen Parzellen auf diese Parzelle verschieben."/>
<text name="allow_label4">
Skripts ausführen:
</text>
- <check_box label="Jeder" name="check other scripts"/>
- <check_box label="Gruppe" name="check group scripts"/>
+ <check_box label="Jeder" name="check other scripts" tool_tip="Wenn aktiviert, können Einwohner auf Ihrer Parzelle Skripte inklusive Anhängen ausführen."/>
+ <check_box label="Gruppe" name="check group scripts" tool_tip="Wenn aktiviert, können Parzellengruppen-Mitglieder auf Ihrer Parzelle Skripte inklusive Anhängen ausführen."/>
<check_box label="Sicher (kein Schaden)" name="check safe" tool_tip="Falls aktiviert, wird Land auf Option „Sicher“ eingestellt, Kampfschäden sind deaktiviert. Ansonsten sind Kampfschäden aktiviert."/>
<check_box label="Kein Stoßen" name="PushRestrictCheck" tool_tip="Verhindert Stoßen durch Skripte. Durch Aktivieren dieser Option verhindern Sie störendes Verhalten auf Ihrem Land."/>
<check_box label="Ort in Suche anzeigen (30 L$/Woche)" name="ShowDirectoryCheck" tool_tip="Diese Parzelle in Suchergebnissen anzeigen."/>
@@ -354,8 +363,8 @@ Nur große Parzellen können in der Suche aufgeführt werden.
Foto:
</text>
<texture_picker label="" name="snapshot_ctrl" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
- <text name="allow_label5">
- Avatare in anderen Parzellen können Avatare in dieser Parzelle sehen und mit ihnen chatten
+ <text name="allow_see_label">
+ Avatare in anderen Parzellen können Avatare in dieser Parzelle sehen und mit ihnen chatten.
</text>
<check_box label="Avatare sehen" name="SeeAvatarsCheck" tool_tip="Gestattet sowohl Avataren auf anderen Parzellen, Avatare auf dieser Parzelle zu sehen und mit ihnen zu chatten, als auch Ihnen, diese Avatare auf anderen Parzellen zu sehen und mit ihnen zu chatten."/>
<text name="landing_point">
@@ -457,9 +466,12 @@ Nur große Parzellen können in der Suche aufgeführt werden.
</panel>
<panel name="Banned_layout_panel">
<text label="Verbannen" name="BanCheck">
- Immer verbannt ([COUNT], max. [MAX])
+ Verbannt ([COUNT], max. [MAX])
</text>
- <name_list name="BannedList" tool_tip="([LISTED] aufgeführt, [MAX] max)"/>
+ <name_list name="BannedList" tool_tip="([LISTED] aufgeführt, [MAX] max)">
+ <columns label="Name" name="name"/>
+ <columns label="Dauer" name="duration"/>
+ </name_list>
<button label="Hinzufügen" name="add_banned"/>
<button label="Entfernen" label_selected="Entfernen" name="remove_banned"/>
</panel>
diff --git a/indra/newview/skins/default/xui/de/floater_ban_duration.xml b/indra/newview/skins/default/xui/de/floater_ban_duration.xml
new file mode 100644
index 0000000000..19e55f5527
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_ban_duration.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="ban_duration" title="Verbannungsdauer">
+ <text name="duration_textbox">
+ Verbannungsdauer:
+ </text>
+ <radio_group name="ban_duration_radio">
+ <radio_item label="Immer" name="always_radio">
+ Immer
+ </radio_item>
+ <radio_item label="Temporär" name="temporary_radio">
+ Temporär
+ </radio_item>
+ </radio_group>
+ <text name="hours_textbox">
+ Stunden.
+ </text>
+ <button label="OK" name="ok_btn"/>
+ <button label="Abbrechen" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_gesture.xml b/indra/newview/skins/default/xui/de/floater_gesture.xml
index 7b35da8d5c..0a82535040 100644
--- a/indra/newview/skins/default/xui/de/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/de/floater_gesture.xml
@@ -21,7 +21,7 @@
<button name="activate_btn" tool_tip="Ausgewählte Geste aktivieren/deaktivieren"/>
<button name="del_btn" tool_tip="Diese Geste löschen"/>
</panel>
- <button label="Bearbeiten" name="edit_btn"/>
- <button label="Abspielen" name="play_btn"/>
+ <button label="Bearbeiten" name="edit_btn" tool_tip="Fenster zum Bearbeiten der ausgewählten Geste öffnen."/>
+ <button label="Abspielen" name="play_btn" tool_tip="Ausgewählte Geste inworld ausführen."/>
<button label="Stopp" name="stop_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/de/floater_preferences_graphics_advanced.xml
index 1361366bd5..41e8dc5ef4 100644
--- a/indra/newview/skins/default/xui/de/floater_preferences_graphics_advanced.xml
+++ b/indra/newview/skins/default/xui/de/floater_preferences_graphics_advanced.xml
@@ -43,6 +43,7 @@
<check_box label="Anisotropische Filterung (langsamer, wenn aktiviert)" name="ani"/>
<check_box initial_value="true" label="OpenGL Vertex-Buffer-Objekte aktivieren" name="vbo" tool_tip="Wenn Sie über moderne Grafikhardware verfügen, können Sie durch Aktivieren dieser Option die Geschwindigkeit verbessern. Bei alter Hardware sind die VBO oft schlecht implementiert, was zu Abstürzen führen kann, wenn diese Option aktiviert ist."/>
<check_box initial_value="true" label="Texturkomprimierung aktivieren (Neustart erforderlich)" name="texture compression" tool_tip="Komprimiert Texturen im Videospeicher, damit höher auflösende Texturen geladen werden können (leichte Beeinträchtigung der Farbqualität)."/>
+ <check_box initial_value="true" label="Unterstützung für HiDPI-Displays aktivieren (Neustart erforderlich)" name="use HiDPI" tool_tip="OpenGL für hochauflösende Darstellung aktivieren."/>
<text name="antialiasing label">
Antialiasing:
</text>
diff --git a/indra/newview/skins/default/xui/de/floater_preview_notecard.xml b/indra/newview/skins/default/xui/de/floater_preview_notecard.xml
index 14e666fd22..21419d8e10 100644
--- a/indra/newview/skins/default/xui/de/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/de/floater_preview_notecard.xml
@@ -15,6 +15,7 @@
<text_editor name="Notecard Editor">
Wird geladen...
</text_editor>
+ <button label="Bearbeiten..." label_selected="Bearbeiten" name="Edit"/>
<button label="Speichern" label_selected="Speichern" name="Save"/>
<button label="Löschen" label_selected="Löschen" name="Delete"/>
</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_report_abuse.xml b/indra/newview/skins/default/xui/de/floater_report_abuse.xml
index 6999679b3f..154256b53e 100644
--- a/indra/newview/skins/default/xui/de/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/de/floater_report_abuse.xml
@@ -77,7 +77,7 @@ Objekt:
<combo_box.item label="Land &gt; Unbefugte Nutzung &gt; Objekte oder Texturen" name="Land__Encroachment__Objects_textures"/>
<combo_box.item label="Land &gt; Unbefugte Nutzung &gt; Partikel" name="Land__Encroachment__Particles"/>
<combo_box.item label="Land &gt; Unbefugte Nutzung &gt; Bäume/Pflanzen" name="Land__Encroachment__Trees_plants"/>
- <combo_box.item label="Verstoß gegen die Spielerichtlinie" name="Wagering_gambling"/>
+ <combo_box.item label="Verstoß gegen die Geschicklichkeits-Spielerichtlinie" name="Wagering_gambling"/>
<combo_box.item label="Sonstige" name="Other"/>
</combo_box>
<text name="abuser_name_title">
diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml
index 17ed6a5385..feb1ae23a5 100644
--- a/indra/newview/skins/default/xui/de/notifications.xml
+++ b/indra/newview/skins/default/xui/de/notifications.xml
@@ -1607,7 +1607,7 @@ Ersetzen Sie die Textur [TEXTURE_NUM] mit einer Bilddatei von maximal 512x512 un
[AGENT] wurden zur [LIST_TYPE]-Liste von [ESTATE] hinzugefügt.
</notification>
<notification name="AgentWasRemovedFromList">
- [AGENT] wurden von der [LIST_TYPE]-Liste von [ESTATE] entfernt.
+ [AGENT] wurde von der [LIST_TYPE]-Liste von [ESTATE] entfernt.
</notification>
<notification name="AgentsWereRemovedFromList">
[AGENT] wurden von der [LIST_TYPE]-Liste von [ESTATE] entfernt.
diff --git a/indra/newview/skins/default/xui/de/panel_group_general.xml b/indra/newview/skins/default/xui/de/panel_group_general.xml
index 9d4301de73..9fec5a242d 100644
--- a/indra/newview/skins/default/xui/de/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/de/panel_group_general.xml
@@ -46,7 +46,7 @@ Bewegen Sie die Maus über die Optionen, um weitere Informationen anzuzeigen.
<check_box label="Jeder kann beitreten" name="open_enrollement" tool_tip="Festlegen, ob der Gruppenbeitritt ohne Einladung zulässig ist."/>
<check_box label="Kosten für Beitritt" name="check_enrollment_fee" tool_tip="Festlegen, ob Neumitglieder eine Beitrittsgebühr zahlen müssen"/>
<spinner label="L$" name="spin_enrollment_fee" tool_tip="Wenn Beitrittsgebühr aktiviert ist, müssen neue Mitglieder diesen Betrag zahlen."/>
- <combo_box name="group_mature_check" tool_tip="Legt fest, ob Ihre Gruppeninformation moderate Inhalte enthält">
+ <combo_box name="group_mature_check" tool_tip="Inhaltseinstufungen kennzeichnen die in einer Gruppe zulässigen Inhalte und Verhaltensweisen">
<combo_item name="select_mature">
- Inhaltseinstufung auswählen -
</combo_item>
diff --git a/indra/newview/skins/default/xui/de/panel_region_access.xml b/indra/newview/skins/default/xui/de/panel_region_access.xml
index 4ebc4867fb..d2448bea7e 100644
--- a/indra/newview/skins/default/xui/de/panel_region_access.xml
+++ b/indra/newview/skins/default/xui/de/panel_region_access.xml
@@ -14,6 +14,7 @@
<panel label="ZULÄSSIG" name="allowed_panel">
<panel label="top_panel" name="allowed_search_panel">
<filter_editor label="Zulässige Agenten suchen" name="allowed_search_input"/>
+ <button label="Kopieren" name="copy_allowed_list_btn"/>
</panel>
<text name="allow_resident_label">
Immer zugelassen:
@@ -26,7 +27,8 @@
</panel>
<panel label="ZULÄSSIGE GRUPPEN" name="allowed_groups_panel">
<panel label="top_panel" name="allowed_group_search_panel">
- <filter_editor label="Zulässige Gruppen Suchen" name="allowed_group_search_input"/>
+ <filter_editor label="Zulässige Gruppen suchen" name="allowed_group_search_input"/>
+ <button label="Kopieren" name="copy_allowed_group_list_btn"/>
</panel>
<text name="allow_group_label">
Immer zugelassene Gruppen:
@@ -40,6 +42,7 @@
<panel label="VERBANNT" name="banned_panel">
<panel label="top_panel" name="banned_search_panel">
<filter_editor label="Verbannte Agenten suchen" name="banned_search_input"/>
+ <button label="Kopieren" name="copy_banned_list_btn"/>
</panel>
<text name="ban_resident_label">
Immer verbannt:
diff --git a/indra/newview/skins/default/xui/de/panel_region_estate.xml b/indra/newview/skins/default/xui/de/panel_region_estate.xml
index b713dd58d0..f6a5ed22f9 100644
--- a/indra/newview/skins/default/xui/de/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/de/panel_region_estate.xml
@@ -16,7 +16,7 @@
(unbekannt)
</text>
<radio_group name="externally_visible_radio">
- <radio_item label="Nur Einwohner und Gruppen zulassen, die im Reiter &quot;Zugang&quot; aufgelistet sind." name="estate_restricted_access"/>
+ <radio_item label="Nur Einwohner und Gruppen zulassen, die im Reiter &quot;Zugang&quot; aufgelistet sind" name="estate_restricted_access"/>
<radio_item label="Alle Besucher zugelassen" name="estate_public_access"/>
</radio_group>
<check_box label="Muss 18+ sein" name="limit_age_verified" tool_tip="Nur Einwohner, die mindestens 18 Jahre alt sind, können diesen Grundbesitz betreten. Weitere Informationen finden Sie unter [SUPPORT_SITE]."/>
diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml
index 95eb88614b..0fa4ec9aff 100644
--- a/indra/newview/skins/default/xui/de/strings.xml
+++ b/indra/newview/skins/default/xui/de/strings.xml
@@ -75,6 +75,9 @@ Erweitertes Beleuchtungsmodell: [GPU_SHADERS]
Texturspeicher: [TEXTURE_MEMORY] MB
Erstellungszeit VFS (Cache): [VFS_TIME]
</string>
+ <string name="AboutOSXHiDPI">
+ HiDPI-Anzeigemodus: [HIDPI]
+ </string>
<string name="AboutLibs">
J2C-Decoderversion: [J2C_VERSION]
Audiotreiberversion: [AUDIO_DRIVER_VERSION]
@@ -1477,6 +1480,15 @@ besuchen Sie bitte http://secondlife.com/support
<string name="MarketplaceURL_LearnMore">
https://marketplace.[MARKETPLACE_DOMAIN_NAME]/learn_more
</string>
+ <string name="InventoryPlayAnimationTooltip">
+ Fenster mit Spieloptionen öffnen.
+ </string>
+ <string name="InventoryPlayGestureTooltip">
+ Ausgewählte Geste inworld ausführen.
+ </string>
+ <string name="InventoryPlaySoundTooltip">
+ Fenster mit Spieloptionen öffnen.
+ </string>
<string name="InventoryOutboxNotMerchantTitle">
Jeder kann Artikel im Marktplatz verkaufen.
</string>
@@ -5398,9 +5410,6 @@ Setzen Sie den Editorpfad in Anführungszeichen
<string name="Command_Destinations_Label">
Ziele
</string>
- <string name="Command_Facebook_Label">
- Facebook
- </string>
<string name="Command_Flickr_Label">
Flickr
</string>
@@ -5494,9 +5503,6 @@ Setzen Sie den Editorpfad in Anführungszeichen
<string name="Command_Destinations_Tooltip">
Ziele von Interesse
</string>
- <string name="Command_Facebook_Tooltip">
- Auf Facebook posten
- </string>
<string name="Command_Flickr_Tooltip">
Auf Flickr hochladen
</string>
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 053c041849..f72767cceb 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -326,6 +326,16 @@ Initialization with the Marketplace failed because of a system or network error.
name="okbutton"
yestext="OK"/>
</notification>
+
+ <notification
+ icon="OutboxStatus_Error"
+ name="MyOutfitsPasteFailed"
+ type="alertmodal">
+ One or more items can't be used inside "My outfits"
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
<notification
icon="OutboxStatus_Error"
@@ -1775,13 +1785,6 @@ Visit [_URL] for more information?
<notification
icon="alertmodal.tga"
- name="RunLauncher"
- type="alertmodal">
- Please do not directly run the viewer executable. Update any existing shortcuts to run SL_Launcher instead.
- </notification>
-
- <notification
- icon="alertmodal.tga"
name="OldGPUDriver"
type="alertmodal">
There is likely a newer driver for your graphics chip. Updating graphics drivers can substantially improve performance.
@@ -2393,6 +2396,7 @@ Your search terms were too short so no search was performed.
icon="alertmodal.tga"
name="CouldNotTeleportReason"
type="alertmodal">
+ <unique/>
Teleport failed.
[REASON]
<tag>fail</tag>
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index c386cb9457..9eedc45aa9 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -263,6 +263,8 @@ Please try logging in again in a minute.</string>
<string name="TooltipOutboxDragActive">You can't move a listed listing</string>
<string name="TooltipOutboxCannotMoveRoot">You can't move the marketplace listings root folder</string>
<string name="TooltipOutboxMixedStock">All items in a stock folder must have the same type and permission</string>
+ <string name="TooltipOutfitNotInInventory">You can only put items or outfits from your personal inventory into "My outfits"</string>
+ <string name="TooltipCantCreateOutfit">One or more items can't be used inside "My outfits"</string>
<string name="TooltipDragOntoOwnChild">You can't move a folder into its child</string>
<string name="TooltipDragOntoSelf">You can't move a folder into itself</string>
diff --git a/indra/newview/skins/default/xui/es/floater_about_land.xml b/indra/newview/skins/default/xui/es/floater_about_land.xml
index b5da302762..998d2a8863 100644
--- a/indra/newview/skins/default/xui/es/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/es/floater_about_land.xml
@@ -9,6 +9,12 @@
<floater.string name="maturity_icon_adult">
&quot;Parcel_R_Dark&quot;
</floater.string>
+ <floater.string name="Hours">
+ [HOURS] hrs.
+ </floater.string>
+ <floater.string name="Hour">
+ hr.
+ </floater.string>
<floater.string name="Minutes">
[MINUTES] min.
</floater.string>
@@ -21,6 +27,9 @@
<floater.string name="Remaining">
restantes
</floater.string>
+ <floater.string name="Always">
+ Siempre
+ </floater.string>
<tab_container name="landtab">
<panel label="GENERAL" name="land_general_panel">
<panel.string name="new users only">
@@ -318,18 +327,18 @@ Sólo las parcelas más grandes pueden listarse en la búsqueda.
<text name="allow_label2">
Crear objetos:
</text>
- <check_box label="Todos los residentes" name="edit objects check"/>
- <check_box label="El grupo" name="edit group objects check"/>
+ <check_box label="Todos los residentes" name="edit objects check" tool_tip="Si se selecciona, los residentes pueden crear y colocar objetos en tu tierra."/>
+ <check_box label="El grupo" name="edit group objects check" tool_tip="Si se selecciona, los miembros de un grupo con parcelas pueden crear y colocar objetos en tu tierra."/>
<text name="allow_label3">
Dejar objetos:
</text>
- <check_box label="Todos los residentes" name="all object entry check"/>
- <check_box label="El grupo" name="group object entry check"/>
+ <check_box label="Todos los residentes" name="all object entry check" tool_tip="Si se selecciona, los Residentes pueden mover objetos existentes de otras parcelas a esta."/>
+ <check_box label="El grupo" name="group object entry check" tool_tip="Si se selecciona, los miembros de un grupo con parcelas pueden mover objetos existentes de otras parcelas a esta."/>
<text name="allow_label4">
Ejecutar scripts:
</text>
- <check_box label="Todos los residentes" name="check other scripts"/>
- <check_box label="El grupo" name="check group scripts"/>
+ <check_box label="Todos los residentes" name="check other scripts" tool_tip="Si se selecciona, los Residentes pueden correr scripts en tu parcela, incluidos adjuntos."/>
+ <check_box label="El grupo" name="check group scripts" tool_tip="Si se selecciona, los miembros de un grupo con parcelas pueden correr scripts en tu parcela, incluidos adjuntos."/>
<check_box label="Seguro (sin daño)" name="check safe" tool_tip="Si se marca, convierte el terreno en &apos;seguro&apos;, desactivando el daño en combate. Si no, se activa el daño en combate."/>
<check_box label="Sin &apos;empujones&apos;" name="PushRestrictCheck" tool_tip="Previene scripts que empujen. Marcando esta opción prevendrá que en su terreno haya comportamientos destructivos."/>
<check_box label="Mostrar el sitio en la búsqueda (30 L$/semana)" name="ShowDirectoryCheck" tool_tip="Let people see this parcel in search results"/>
@@ -353,7 +362,7 @@ Sólo las parcelas más grandes pueden listarse en la búsqueda.
Foto:
</text>
<texture_picker label="" name="snapshot_ctrl" tool_tip="Pulse para elegir una imagen"/>
- <text name="allow_label5" top="170">
+ <text name="allow_see_label">
Los avatares de otras parcelas pueden ver a los avatares de esta parcela y chatear con ellos
</text>
<check_box label="Ver los avatares" name="SeeAvatarsCheck" tool_tip="Permite que los avatares de otras parcelas vean a los avatares de ésta y chateen con ellos, y también que tú puedas verles y chatear con ellos." top="170"/>
@@ -459,9 +468,12 @@ los media:
</panel>
<panel name="Banned_layout_panel">
<text label="Ban" name="BanCheck">
- Siempre prohibido ([COUNT], max [MAX])
+ Prohibido ([COUNT], max [MAX])
</text>
- <name_list name="BannedList" tool_tip="([LISTED] listados de un máx. de [MAX])"/>
+ <name_list name="BannedList" tool_tip="([LISTED] listados de un máx. de [MAX])">
+ <columns label="Nombre" name="name"/>
+ <columns label="Duración" name="duration"/>
+ </name_list>
<button label="Añadir" name="add_banned"/>
<button label="Quitar" label_selected="Quitar" name="remove_banned"/>
</panel>
diff --git a/indra/newview/skins/default/xui/es/floater_ban_duration.xml b/indra/newview/skins/default/xui/es/floater_ban_duration.xml
new file mode 100644
index 0000000000..02252ede20
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_ban_duration.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="ban_duration" title="Duración">
+ <text name="duration_textbox">
+ Duración:
+ </text>
+ <radio_group name="ban_duration_radio">
+ <radio_item label="Siempre" name="always_radio">
+ Siempre
+ </radio_item>
+ <radio_item label="Temporario" name="temporary_radio">
+ Temporario
+ </radio_item>
+ </radio_group>
+ <text name="hours_textbox">
+ horas
+ </text>
+ <button label="Aceptar" name="ok_btn"/>
+ <button label="Cancelar" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_gesture.xml b/indra/newview/skins/default/xui/es/floater_gesture.xml
index d90de8c9f4..45fb7c6773 100644
--- a/indra/newview/skins/default/xui/es/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/es/floater_gesture.xml
@@ -20,7 +20,7 @@
<button name="activate_btn" tool_tip="Activar/Desactivar el gesto elegido"/>
<button name="del_btn" tool_tip="Borrar este gesto"/>
</panel>
- <button label="Editar" name="edit_btn"/>
- <button label="Reproducir" name="play_btn"/>
+ <button label="Editar" name="edit_btn" tool_tip="Abrir la ventana para editar el gesto seleccionado."/>
+ <button label="Reproducir" name="play_btn" tool_tip="Realizar gesto seleccionado en el mundo."/>
<button label="Parar" name="stop_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/es/floater_preferences_graphics_advanced.xml
index a0618521ee..b8d5824fb7 100644
--- a/indra/newview/skins/default/xui/es/floater_preferences_graphics_advanced.xml
+++ b/indra/newview/skins/default/xui/es/floater_preferences_graphics_advanced.xml
@@ -43,6 +43,7 @@
<check_box label="Filtrado anisotrópico (enlentece el dibujo)" name="ani"/>
<check_box initial_value="true" label="Habilitar objetos de búfer de vértices OpenGL" name="vbo" tool_tip="Su activación en un hardware moderno aumenta el rendimiento. No obstante, la ejecución poco eficiente de los VBO en los equipos antiguos puede hacer que se bloquee la aplicación."/>
<check_box initial_value="true" label="Activar la compresión de texturas (requiere reiniciar)" name="texture compression" tool_tip="Comprime las texturas en la memoria de vídeo, lo cual permite cargar texturas de una resolución más alta, pero con una cierta pérdida de calidad del color."/>
+ <check_box initial_value="true" label="Activar soporte para visores HiDPI (requiere reiniciar)" name="use HiDPI" tool_tip="Activar OpenGl para Dibujos de alta resolución."/>
<text name="antialiasing label">
Antialiasing:
</text>
diff --git a/indra/newview/skins/default/xui/es/floater_preview_notecard.xml b/indra/newview/skins/default/xui/es/floater_preview_notecard.xml
index d05a023279..d467aa749c 100644
--- a/indra/newview/skins/default/xui/es/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/es/floater_preview_notecard.xml
@@ -15,6 +15,7 @@
<text_editor name="Notecard Editor">
Cargando...
</text_editor>
+ <button label="Editar..." label_selected="Editar" name="Edit"/>
<button label="Guardar" label_selected="Guardar" name="Save"/>
<button label="Borrar" label_selected="Borrar" name="Delete"/>
</floater>
diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml
index eac09b767b..0a3576b799 100644
--- a/indra/newview/skins/default/xui/es/notifications.xml
+++ b/indra/newview/skins/default/xui/es/notifications.xml
@@ -1589,7 +1589,7 @@ Se superan en [NUM_EXCESS] los [MAX_AGENTS] permitidos en [LIST_TYPE].
[AGENT] ya está en tu lista [LIST_TYPE].
</notification>
<notification name="AgentsAreAlreadyInList">
- [AGENT] ya está en tu lista [LIST_TYPE].
+ [AGENT] ya están en tu lista [LIST_TYPE].
</notification>
<notification name="AgentWasAddedToList">
[AGENT] fue añadido a la lista [LIST_TYPE] de [ESTATE].
diff --git a/indra/newview/skins/default/xui/es/panel_group_general.xml b/indra/newview/skins/default/xui/es/panel_group_general.xml
index b00c300c85..a17814d15d 100644
--- a/indra/newview/skins/default/xui/es/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/es/panel_group_general.xml
@@ -46,7 +46,7 @@ Deja el cursor sobre las opciones para ver más ayuda.
<check_box label="Cualquiera puede entrar" name="open_enrollement" tool_tip="Configura si se permite la entrada de nuevos miembros sin ser invitados."/>
<check_box label="Cuota de entrada" name="check_enrollment_fee" tool_tip="Configura si hay que pagar una cuota para entrar al grupo"/>
<spinner label="L$" left_delta="130" name="spin_enrollment_fee" tool_tip="Si la opción Cuota de entrada está marcada, los nuevos miembros han de pagar esta cuota para entrar al grupo." width="60"/>
- <combo_box bottom_delta="-38" name="group_mature_check" tool_tip="Establece si la información de su grupo es moderado." width="150">
+ <combo_box bottom_delta="-38" name="group_mature_check" tool_tip="La calificación de contenido designa el tipo de contenido y conducta que se permiten en un grupo" width="150">
<combo_item name="select_mature">
- Selecciona el nivel de calificación -
</combo_item>
diff --git a/indra/newview/skins/default/xui/es/panel_region_access.xml b/indra/newview/skins/default/xui/es/panel_region_access.xml
index 3177aa2ab2..a6b0ee6867 100644
--- a/indra/newview/skins/default/xui/es/panel_region_access.xml
+++ b/indra/newview/skins/default/xui/es/panel_region_access.xml
@@ -14,6 +14,7 @@
<panel label="PERMITIDO" name="allowed_panel">
<panel label="top_panel" name="allowed_search_panel">
<filter_editor label="Buscar agentes autorizados" name="allowed_search_input"/>
+ <button label="Copiar" name="copy_allowed_list_btn"/>
</panel>
<text name="allow_resident_label">
Siempre autorizado:
@@ -27,6 +28,7 @@
<panel label="GRUPOS AUTORIZADOS:" name="allowed_groups_panel">
<panel label="top_panel" name="allowed_group_search_panel">
<filter_editor label="Buscar grupos autorizados" name="allowed_group_search_input"/>
+ <button label="Copiar" name="copy_allowed_group_list_btn"/>
</panel>
<text name="allow_group_label">
Grupos siempre autorizados:
@@ -40,6 +42,7 @@
<panel label="PROHIBIDO" name="banned_panel">
<panel label="top_panel" name="banned_search_panel">
<filter_editor label="Buscar agentes prohibidos" name="banned_search_input"/>
+ <button label="Copiar" name="copy_banned_list_btn"/>
</panel>
<text name="ban_resident_label">
Siempre prohibido:
diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml
index 1b06675670..c9bfbd6610 100644
--- a/indra/newview/skins/default/xui/es/strings.xml
+++ b/indra/newview/skins/default/xui/es/strings.xml
@@ -67,6 +67,9 @@ Modelo de iluminación avanzado: [GPU_SHADERS]
Memoria de textura: [TEXTURE_MEMORY]MB
VFS (cache) hora de creación: [VFS_TIME]
</string>
+ <string name="AboutOSXHiDPI">
+ Modo de visualización HiDPi: [HIDPI]
+ </string>
<string name="AboutLibs">
Versión de descodificador J2C: [J2C_VERSION]
Versión del controlador audio: [AUDIO_DRIVER_VERSION]
@@ -1460,6 +1463,15 @@ http://secondlife.com/support para obtener ayuda sobre cómo solucionar este pro
<string name="MarketplaceURL_LearnMore">
https://marketplace.[MARKETPLACE_DOMAIN_NAME]/learn_more
</string>
+ <string name="InventoryPlayAnimationTooltip">
+ Abrir la ventana con las opciones del Juego
+ </string>
+ <string name="InventoryPlayGestureTooltip">
+ Realizar gesto seleccionado en el mundo.
+ </string>
+ <string name="InventoryPlaySoundTooltip">
+ Abrir la ventana con las opciones del Juego
+ </string>
<string name="InventoryOutboxNotMerchantTitle">
Cualquier usuario puede vender objetos en el mercado.
</string>
@@ -5309,9 +5321,6 @@ Inténtalo incluyendo la ruta de acceso al editor entre comillas
<string name="Command_Destinations_Label">
Destinos
</string>
- <string name="Command_Facebook_Label">
- Facebook
- </string>
<string name="Command_Flickr_Label">
Flickr
</string>
@@ -5405,9 +5414,6 @@ Inténtalo incluyendo la ruta de acceso al editor entre comillas
<string name="Command_Destinations_Tooltip">
Destinos de interés
</string>
- <string name="Command_Facebook_Tooltip">
- Publicar en Facebook
- </string>
<string name="Command_Flickr_Tooltip">
Subir a Flickr
</string>
diff --git a/indra/newview/skins/default/xui/fr/floater_about_land.xml b/indra/newview/skins/default/xui/fr/floater_about_land.xml
index 42d7709c99..219857eb99 100644
--- a/indra/newview/skins/default/xui/fr/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/fr/floater_about_land.xml
@@ -9,6 +9,12 @@
<floater.string name="maturity_icon_adult">
&quot;Parcel_R_Dark&quot;
</floater.string>
+ <floater.string name="Hours">
+ [HEURES] hrs.
+ </floater.string>
+ <floater.string name="Hour">
+ hr.
+ </floater.string>
<floater.string name="Minutes">
[MINUTES] min
</floater.string>
@@ -21,6 +27,9 @@
<floater.string name="Remaining">
restantes
</floater.string>
+ <floater.string name="Always">
+ Toujours
+ </floater.string>
<tab_container name="landtab" tab_min_width="60">
<panel label="GÉNÉRAL" name="land_general_panel">
<panel.string name="new users only">
@@ -322,18 +331,18 @@ Seules les parcelles de grande taille peuvent apparaître dans la recherche.
<text name="allow_label2">
Construire :
</text>
- <check_box label="Tous" name="edit objects check"/>
- <check_box label="Groupe" name="edit group objects check"/>
+ <check_box label="Tous" name="edit objects check" tool_tip="Si la case est cochée, les résidents peuvent créer et rezzer des objets sur votre terrain."/>
+ <check_box label="Groupe" name="edit group objects check" tool_tip="Si la case est cochée, les membres du groupe de la parcelle peuvent créer et rezzer des objets sur votre terrain."/>
<text name="allow_label3">
Laisser entrer des objets :
</text>
- <check_box label="Tous" name="all object entry check"/>
- <check_box label="Groupe" name="group object entry check"/>
+ <check_box label="Tous" name="all object entry check" tool_tip="Si la case est cochée, les résidents peuvent déplacer les objets des autres parcelles pour les amener sur cette parcelle."/>
+ <check_box label="Groupe" name="group object entry check" tool_tip="Si la case est cochée, les membres du groupe de la parcelle peuvent déplacer les objets des autres parcelles pour les amener sur cette parcelle."/>
<text name="allow_label4">
Exécuter des scripts :
</text>
- <check_box label="Tous" name="check other scripts"/>
- <check_box label="Groupe" name="check group scripts"/>
+ <check_box label="Tous" name="check other scripts" tool_tip="Si la case est cochée, les membres du groupe de la parcelle peuvent exécuter des scripts sur votre parcelle, y compris des pièces jointes."/>
+ <check_box label="Groupe" name="check group scripts" tool_tip="Si la case est cochée, les membres du groupe de la parcelle peuvent exécuter des scripts sur votre parcelle, y compris des pièces jointes."/>
<check_box label="Sécurisé (pas de dégâts)" name="check safe" tool_tip="Si cette option est cochée, le terrain est sécurisé et il n&apos;y pas de risques de dommages causés par des combats. Si elle est décochée, des dommages causés par les combats peuvent avoir lieu."/>
<check_box label="Pas de bousculades" name="PushRestrictCheck" tool_tip="Empêche l&apos;utilisation de scripts causant des bousculades. Cette option est utile pour empêcher les comportements abusifs sur votre terrain."/>
<check_box label="Voir le lieu dans la recherche (30 L$/sem.)" name="ShowDirectoryCheck" tool_tip="Afficher la parcelle dans les résultats de recherche"/>
@@ -357,7 +366,7 @@ Seules les parcelles de grande taille peuvent apparaître dans la recherche.
Photo :
</text>
<texture_picker label="" name="snapshot_ctrl" tool_tip="Cliquez pour sélectionner une image"/>
- <text name="allow_label5">
+ <text name="allow_see_label">
Les avatars sur d&apos;autres parcelles peuvent voir et chatter avec les avatars sur cette parcelle.
</text>
<check_box label="Voir les avatars" name="SeeAvatarsCheck" tool_tip="Permettre aux avatars présents sur d&apos;autres parcelles de voir et chatter avec les avatars présents sur cette parcelle et à vous de les voir et de chatter avec eux."/>
@@ -464,9 +473,12 @@ musique :
</panel>
<panel name="Banned_layout_panel">
<text label="Bannir" name="BanCheck">
- Toujours interdit ([COUNT], max. [MAX])
+ Interdit interdit ([COUNT], max. [MAX])
</text>
- <name_list name="BannedList" tool_tip="([LISTED] dans la liste, [MAX] max.)"/>
+ <name_list name="BannedList" tool_tip="([LISTED] dans la liste, [MAX] max.)">
+ <columns label="Nom" name="name"/>
+ <columns label="Durée" name="duration"/>
+ </name_list>
<button label="Ajouter" name="add_banned"/>
<button label="Supprimer" label_selected="Supprimer" name="remove_banned"/>
</panel>
diff --git a/indra/newview/skins/default/xui/fr/floater_ban_duration.xml b/indra/newview/skins/default/xui/fr/floater_ban_duration.xml
new file mode 100644
index 0000000000..2c877b81fa
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_ban_duration.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="ban_duration" title="Durée de l&apos;interdiction">
+ <text name="duration_textbox">
+ Durée de l&apos;interdiction :
+ </text>
+ <radio_group name="ban_duration_radio">
+ <radio_item label="Toujours" name="always_radio">
+ Toujours
+ </radio_item>
+ <radio_item label="Temporaire" name="temporary_radio">
+ Temporaire
+ </radio_item>
+ </radio_group>
+ <text name="hours_textbox">
+ heures
+ </text>
+ <button label="OK" name="ok_btn"/>
+ <button label="Annuler" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_gesture.xml b/indra/newview/skins/default/xui/fr/floater_gesture.xml
index 5ead1cae3a..9f4822e626 100644
--- a/indra/newview/skins/default/xui/fr/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/fr/floater_gesture.xml
@@ -21,7 +21,7 @@
<button name="activate_btn" tool_tip="Activer/désactiver le geste sélectionné"/>
<button name="del_btn" tool_tip="Supprimer ce geste"/>
</panel>
- <button label="Modifier" name="edit_btn"/>
- <button label="Lire" name="play_btn"/>
+ <button label="Modifier" name="edit_btn" tool_tip="Ouvrir la fenêtre pour modifier le geste sélectionné"/>
+ <button label="Lire" name="play_btn" tool_tip="Exécuter le geste sélectionné dans le monde virtuel."/>
<button label="Stop" name="stop_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/fr/floater_preferences_graphics_advanced.xml
index 23fff3b770..fd47254934 100644
--- a/indra/newview/skins/default/xui/fr/floater_preferences_graphics_advanced.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preferences_graphics_advanced.xml
@@ -43,6 +43,7 @@
<check_box label="Filtre anisotrope (plus lent quand activé)" name="ani"/>
<check_box initial_value="true" label="Activer OpenGL Vertex Buffer Objects" name="vbo" tool_tip="L’activation de cette option sur le matériel récent permet un gain de performance. Cependant, les implémentations VBO pour le matériel plus ancien sont souvent médiocres et votre système risque de se planter quand cette option est activée."/>
<check_box initial_value="true" label="Activer la compression des textures (redémarrage requis)" name="texture compression" tool_tip="Comprime les textures en mémoire vidéo afin de permettre de charger des textures de résolution plus élevée au prix d’une certaine qualité de couleur."/>
+ <check_box initial_value="true" label="Activer le support pour l&apos;affichage en HiDPI (redémarrage requis)" name="use HiDPI" tool_tip="Activer OpenFL pour les dessins en haute résolution"/>
<text name="antialiasing label">
Anti-aliasing :
</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml b/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml
index 5646ad45eb..1fc065e6c5 100644
--- a/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml
@@ -15,6 +15,7 @@
<text_editor name="Notecard Editor">
Chargement...
</text_editor>
+ <button label="Modifier..." label_selected="Modifier" name="Edit"/>
<button label="Enregistrer" label_selected="Enregistrer" name="Save"/>
<button label="Supprimer" label_selected="Supprimer" name="Delete"/>
</floater>
diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml
index 4239c949fd..54f132f684 100644
--- a/indra/newview/skins/default/xui/fr/notifications.xml
+++ b/indra/newview/skins/default/xui/fr/notifications.xml
@@ -1572,10 +1572,10 @@ Dépasse la limite fixée à [MAX_AGENTS] [LIST_TYPE] de [NUM_EXCESS].
Impossible d’ajouter un résident banni à la liste des gérants de domaine.
</notification>
<notification name="ProblemBanningEstateManager">
- Impossible d&apos;ajouter le gérant de domaine à la liste interdite.
+ Impossible d&apos;ajouter le gérant de domaine [AGENT] à la liste interdite.
</notification>
<notification name="GroupIsAlreadyInList">
- &lt;nolink&gt;[GROUP]&lt;/nolink&gt; est déjà dans la liste des groupes autorisés.
+ &lt;nolink&gt;[GROUP]&lt;/nolink&gt; est déjà dans la liste des Groupes autorisés.
</notification>
<notification name="AgentIsAlreadyInList">
[AGENT] est déjà dans votre liste [LIST_TYPE].
@@ -1587,7 +1587,7 @@ Dépasse la limite fixée à [MAX_AGENTS] [LIST_TYPE] de [NUM_EXCESS].
[AGENT] a été ajouté à la liste [LIST_TYPE] de [ESTATE].
</notification>
<notification name="AgentsWereAddedToList">
- [AGENT] ont été ajoutéq à la liste [LIST_TYPE] de [ESTATE].
+ [AGENT] ont été ajouté à la liste [LIST_TYPE] de [ESTATE].
</notification>
<notification name="AgentWasRemovedFromList">
[AGENT] a été supprimé de la liste [LIST_TYPE] de [ESTATE].
@@ -2987,7 +2987,7 @@ Si vous restez dans cette région, vous serez déconnecté(e).
Si vous restez dans cette région, vous serez déconnecté(e).
</notification>
<notification name="LoadWebPage">
-Charger la page Web [URL] ?
+ Charger la page Web [URL] ?
[MESSAGE]
diff --git a/indra/newview/skins/default/xui/fr/panel_group_general.xml b/indra/newview/skins/default/xui/fr/panel_group_general.xml
index a2655dcd45..5953e210e5 100644
--- a/indra/newview/skins/default/xui/fr/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/fr/panel_group_general.xml
@@ -46,7 +46,7 @@ Faites glisser le pointeur de la souris sur les options pour en savoir plus.
<check_box label="Inscription ouverte à tous" name="open_enrollement" tool_tip="Indique si ce groupe autorise les nouveaux membres à le rejoindre sans y être invités."/>
<check_box label="Inscription payante" name="check_enrollment_fee" tool_tip="Indique s&apos;il faut payer des frais d&apos;inscription pour rejoindre ce groupe"/>
<spinner label="L$" name="spin_enrollment_fee" tool_tip="Les nouveaux membres doivent payer ces frais pour rejoindre le groupe quand l&apos;option Frais d&apos;inscription est cochée."/>
- <combo_box name="group_mature_check" tool_tip="Définit si votre groupe contient des informations de type Modéré" width="195">
+ <combo_box name="group_mature_check" tool_tip="Il s&apos;agit du type de contenu et de comportement autorisé au sein d&apos;un groupe." width="195">
<combo_item name="select_mature">
- Catégorie de contenu -
</combo_item>
diff --git a/indra/newview/skins/default/xui/fr/panel_region_access.xml b/indra/newview/skins/default/xui/fr/panel_region_access.xml
index db77f3b8f1..ab62d3247f 100644
--- a/indra/newview/skins/default/xui/fr/panel_region_access.xml
+++ b/indra/newview/skins/default/xui/fr/panel_region_access.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="ACCÈS" name="Access">
+<panel label="Accès" name="Access">
<tab_container name="tabs">
<panel label="GÉRANTS DU DOMAINE" name="estate_managers_panel">
<text name="estate_manager_label">
@@ -14,6 +14,7 @@
<panel label="AUTORISÉ" name="allowed_panel">
<panel label="top_panel" name="allowed_search_panel">
<filter_editor label="Rechercher des agents autorisés" name="allowed_search_input"/>
+ <button label="Copier" name="copy_allowed_list_btn"/>
</panel>
<text name="allow_resident_label">
Toujours autorisé :
@@ -27,6 +28,7 @@
<panel label="GROUPES AUTORISÉS" name="allowed_groups_panel">
<panel label="top_panel" name="allowed_group_search_panel">
<filter_editor label="Rechercher des groupes autorisés" name="allowed_group_search_input"/>
+ <button label="Copier" name="copy_allowed_group_list_btn"/>
</panel>
<text name="allow_group_label">
Groupes toujours autorisés :
@@ -40,6 +42,7 @@
<panel label="INTERDIT" name="banned_panel">
<panel label="top_panel" name="banned_search_panel">
<filter_editor label="Rechercher des agents interdits" name="banned_search_input"/>
+ <button label="Copier" name="copy_banned_list_btn"/>
</panel>
<text name="ban_resident_label">
Toujours interdit :
diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml
index dbd5cc3bf4..959494545a 100644
--- a/indra/newview/skins/default/xui/fr/strings.xml
+++ b/indra/newview/skins/default/xui/fr/strings.xml
@@ -76,6 +76,9 @@ Modèle d’éclairage avancé : [GPU_SHADERS]
Mémoire textures : [TEXTURE_MEMORY] Mo
Heure de création VFS (cache) : [VFS_TIME]
</string>
+ <string name="AboutOSXHiDPI">
+ Mode d&apos;affichage HiDPI : [HIDPI]
+ </string>
<string name="AboutLibs">
J2C Decoder Version: [J2C_VERSION]
Audio Driver Version: [AUDIO_DRIVER_VERSION]
@@ -1478,6 +1481,15 @@ http://secondlife.com/support pour vous aider à résoudre ce problème.
<string name="MarketplaceURL_LearnMore">
https://marketplace.[MARKETPLACE_DOMAIN_NAME]/learn_more
</string>
+ <string name="InventoryPlayAnimationTooltip">
+ Ouvrir la fenêtre avec les options Jeu
+ </string>
+ <string name="InventoryPlayGestureTooltip">
+ Exécuter le geste sélectionné dans le monde virtuel.
+ </string>
+ <string name="InventoryPlaySoundTooltip">
+ Ouvrir la fenêtre avec les options Jeu
+ </string>
<string name="InventoryOutboxNotMerchantTitle">
Tout le monde peut vendre des articles sur la Place du marché.
</string>
@@ -5399,9 +5411,6 @@ Essayez avec le chemin d&apos;accès à l&apos;éditeur entre guillemets doubles
<string name="Command_Destinations_Label">
Destinations
</string>
- <string name="Command_Facebook_Label">
- Facebook
- </string>
<string name="Command_Flickr_Label">
Flickr
</string>
@@ -5495,9 +5504,6 @@ Essayez avec le chemin d&apos;accès à l&apos;éditeur entre guillemets doubles
<string name="Command_Destinations_Tooltip">
Destinations intéressantes
</string>
- <string name="Command_Facebook_Tooltip">
- Publier sur Facebook
- </string>
<string name="Command_Flickr_Tooltip">
Charger sur Flickr
</string>
diff --git a/indra/newview/skins/default/xui/it/floater_about_land.xml b/indra/newview/skins/default/xui/it/floater_about_land.xml
index 67c46b6b62..0a7837e122 100644
--- a/indra/newview/skins/default/xui/it/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/it/floater_about_land.xml
@@ -9,6 +9,12 @@
<floater.string name="maturity_icon_adult">
&quot;Parcel_R_Dark&quot;
</floater.string>
+ <floater.string name="Hours">
+ [HOURS] ore.
+ </floater.string>
+ <floater.string name="Hour">
+ ora.
+ </floater.string>
<floater.string name="Minutes">
[MINUTES] min
</floater.string>
@@ -21,6 +27,9 @@
<floater.string name="Remaining">
rimanenti
</floater.string>
+ <floater.string name="Always">
+ Sempre
+ </floater.string>
<tab_container name="landtab">
<panel label="GENERALE" name="land_general_panel">
<panel.string name="new users only">
@@ -323,18 +332,18 @@ Solamente terreni più grandi possono essere abilitati nella ricerca.
<text name="allow_label2">
Creare oggetti:
</text>
- <check_box label="Tutti i residenti" name="edit objects check"/>
- <check_box label="Gruppo" name="edit group objects check"/>
+ <check_box label="Tutti i residenti" name="edit objects check" tool_tip="Se la casella è spuntata, i Residenti possono creare e rezzare oggetti sul tuo terreno."/>
+ <check_box label="Gruppo" name="edit group objects check" tool_tip="Se la casella è spuntata, i Residenti possono creare e rezzare oggetti sul tuo terreno."/>
<text name="allow_label3">
Immissione oggetti:
</text>
- <check_box label="Tutti i residenti" name="all object entry check"/>
- <check_box label="Gruppo" name="group object entry check"/>
+ <check_box label="Tutti i residenti" name="all object entry check" tool_tip="Se la casella è spuntata, i membri del lotto di gruppo possono muovere gli oggetti esistenti da altri lotti a questo."/>
+ <check_box label="Gruppo" name="group object entry check" tool_tip="Se la casella è spuntata, i membri del lotto di gruppo possono muovere gli oggetti esistenti da altri lotti a questo."/>
<text name="allow_label4">
Avere script attivi:
</text>
- <check_box label="Tutti i residenti" name="check other scripts"/>
- <check_box label="Gruppo" name="check group scripts"/>
+ <check_box label="Tutti i residenti" name="check other scripts" tool_tip="Se la casella è spuntata, i Residenti possono eseguire script sul tuo lotto, compresi gli allegati."/>
+ <check_box label="Gruppo" name="check group scripts" tool_tip="Se la casella è spuntata, i Residenti possono eseguire script sul tuo lotto, compresi gli allegati."/>
<check_box label="Sicuro (senza danno)" name="check safe" tool_tip="Se spuntato, imposta il terreno su &apos;sicuro&apos;, disabilitando i danni da combattimento. Se non spuntato, viene abilitato il combattimento con danni."/>
<check_box label="Nessuna spinta" name="PushRestrictCheck" tool_tip="Previeni i colpi. Selezionare questa opzione può essere utile per prevenire comportamenti dannosi sul tuo terreno."/>
<check_box label="Mostra luogo nella ricerca (30 L$/settimana)" name="ShowDirectoryCheck" tool_tip="Consenti che il lotto sia visto nei risultati di ricerca"/>
@@ -358,8 +367,8 @@ Solamente terreni più grandi possono essere abilitati nella ricerca.
Fotografia:
</text>
<texture_picker label="" name="snapshot_ctrl" tool_tip="Clicca per scegliere una immagine"/>
- <text name="allow_label5">
- Gli avatar su altri lotti possono vedere gli avatar su questo lotto e chattare con loro
+ <text name="allow_see_label">
+ Gli avatar di altri lotti possono vedere gli avatar che si trovano in questo lotto e chattare con loro
</text>
<check_box label="Vedi avatar" name="SeeAvatarsCheck" tool_tip="Consente ad avatar in altri lotti di vedere e chattare con avatar in questo lotto e viceversa."/>
<text name="landing_point">
@@ -464,9 +473,12 @@ Media:
</panel>
<panel name="Banned_layout_panel">
<text label="Espelli" name="BanCheck">
- Sempre esclusi ([COUNT], max [MAX])
+ Espulsi ([COUNT], max [MAX])
</text>
- <name_list name="BannedList" tool_tip="([LISTED] in lista, [MAX] max)"/>
+ <name_list name="BannedList" tool_tip="([LISTED] in lista, [MAX] max)">
+ <columns label="Nome" name="name"/>
+ <columns label="Durata" name="duration"/>
+ </name_list>
<button label="Aggiungi" name="add_banned"/>
<button label="Rimuovi" label_selected="Rimuovi" name="remove_banned"/>
</panel>
diff --git a/indra/newview/skins/default/xui/it/floater_ban_duration.xml b/indra/newview/skins/default/xui/it/floater_ban_duration.xml
new file mode 100644
index 0000000000..996cb82cd7
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_ban_duration.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="ban_duration" title="Durata espulsione">
+ <text name="duration_textbox">
+ Durata espulsione:
+ </text>
+ <radio_group name="ban_duration_radio">
+ <radio_item label="Sempre" name="always_radio">
+ Sempre
+ </radio_item>
+ <radio_item label="Temporanea" name="temporary_radio">
+ Temporanea
+ </radio_item>
+ </radio_group>
+ <text name="hours_textbox">
+ ore.
+ </text>
+ <button label="Ok" name="ok_btn"/>
+ <button label="Annulla" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_gesture.xml b/indra/newview/skins/default/xui/it/floater_gesture.xml
index b9419ebc22..0382cf9a90 100644
--- a/indra/newview/skins/default/xui/it/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/it/floater_gesture.xml
@@ -20,7 +20,7 @@
<button name="activate_btn" tool_tip="Attiva/Disattiva gesture selezionata"/>
<button name="del_btn" tool_tip="Elimina questa gesture"/>
</panel>
- <button label="Modifica" name="edit_btn"/>
- <button label="Play" name="play_btn"/>
+ <button label="Modifica" name="edit_btn" tool_tip="Apri la finestra per modificare il movimento selezionato."/>
+ <button label="Play" name="play_btn" tool_tip="Esegui il movimento selezionato nel mondo virtuale."/>
<button label="Stop" name="stop_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/it/floater_preferences_graphics_advanced.xml
index b9fe6d76e7..3773ef3711 100644
--- a/indra/newview/skins/default/xui/it/floater_preferences_graphics_advanced.xml
+++ b/indra/newview/skins/default/xui/it/floater_preferences_graphics_advanced.xml
@@ -43,6 +43,7 @@
<check_box label="Filtro anisotropico (rallenta quando è attivato)" name="ani"/>
<check_box initial_value="true" label="Attiva oggetti buffer vertici OpenGL" name="vbo" tool_tip="Se si attiva questa impostazione su hardware più recente si migliorano le prestazioni. Con la funzione attiva, l&apos;hardware meno recente potrebbe implementare VBO in maniera errata, causando interruzioni."/>
<check_box initial_value="true" label="Attiva compressione texture (richiede riavvio)" name="texture compression" tool_tip="Comprime le texture nella memoria video, consentendo il caricamento di texture a risoluzione maggiore al prezzo di una perdita di qualità del colore."/>
+ <check_box initial_value="true" label="Abilita assistenza per display HiDPI (riavvio necessario)" name="use HiDPI" tool_tip="Abilita OpenGL per disegni ad alta risoluzione."/>
<text name="antialiasing label">
Antialiasing:
</text>
diff --git a/indra/newview/skins/default/xui/it/floater_preview_notecard.xml b/indra/newview/skins/default/xui/it/floater_preview_notecard.xml
index 7ec229f9d3..d08bcb217b 100644
--- a/indra/newview/skins/default/xui/it/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/it/floater_preview_notecard.xml
@@ -15,6 +15,7 @@
<text_editor name="Notecard Editor">
In caricamento...
</text_editor>
+ <button label="Modifica..." label_selected="Modifica" name="Edit"/>
<button label="Salva" label_selected="Salva" name="Save"/>
<button label="Elimina" label_selected="Elimina" name="Delete"/>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_report_abuse.xml b/indra/newview/skins/default/xui/it/floater_report_abuse.xml
index f74d84fb8f..2fad438a4e 100644
--- a/indra/newview/skins/default/xui/it/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/it/floater_report_abuse.xml
@@ -76,7 +76,7 @@
<combo_box.item label="Terreno &gt; Invasione &gt; Oggetti o texture" name="Land__Encroachment__Objects_textures"/>
<combo_box.item label="Terreno &gt; Invasione &gt; Particelle" name="Land__Encroachment__Particles"/>
<combo_box.item label="Terreno &gt; Invasione &gt; Alberi/piante" name="Land__Encroachment__Trees_plants"/>
- <combo_box.item label="Violazione regole del gioco" name="Wagering_gambling"/>
+ <combo_box.item label="Skill Violazione regole del gioco" name="Wagering_gambling"/>
<combo_box.item label="Altro" name="Other"/>
</combo_box>
<text name="abuser_name_title">
diff --git a/indra/newview/skins/default/xui/it/notifications.xml b/indra/newview/skins/default/xui/it/notifications.xml
index 07a3eb5095..d7be208c51 100644
--- a/indra/newview/skins/default/xui/it/notifications.xml
+++ b/indra/newview/skins/default/xui/it/notifications.xml
@@ -1574,7 +1574,7 @@ Eccede il [MAX_AGENTS] [LIST_TYPE] limite di [NUM_EXCESS].
Impossibile aggiungere il residente espulso alla lista dei gestori delle proprietà.
</notification>
<notification name="ProblemBanningEstateManager">
- Impossibile aggiunere il gestore della proprietà immobiliare [AGENT] all’elenco degli espulsi.
+ Impossibile aggiungere il gestore della proprietà immobiliare [AGENT] all’elenco degli espulsi.
</notification>
<notification name="GroupIsAlreadyInList">
&lt;nolink&gt;[GROUP]&lt;/nolink&gt; si trova già nell’elenco dei Gruppi ammessi.
@@ -1916,7 +1916,7 @@ Cambierà migliaia di regioni e produrrà seri problemi ai vari server.
<usetemplate canceltext="Annulla" name="yesnocancelbuttons" notext="Tutte le proprietà" yestext="Questa proprietà"/>
</notification>
<notification label="Seleziona la proprietà" name="EstateBannedAgentRemove">
- Rimuovi questo Residente dall’elenco degli espulsi solo per questa proprietà immobiliare oppure per [ALL_ESTATES]?
+ Vuoi rimuovere questo Residente dall’elenco degli espulsi solo per questa proprietà immobiliare oppure per [ALL_ESTATES]?
<usetemplate canceltext="Annulla" name="yesnocancelbuttons" notext="Tutte le proprietà" yestext="Questa proprietà"/>
</notification>
<notification label="Seleziona la proprietà" name="EstateManagerAdd">
diff --git a/indra/newview/skins/default/xui/it/panel_group_general.xml b/indra/newview/skins/default/xui/it/panel_group_general.xml
index 49baa73811..60028e6098 100644
--- a/indra/newview/skins/default/xui/it/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/it/panel_group_general.xml
@@ -46,7 +46,7 @@ Muovi il tuo mouse sopra le opzioni per maggiore aiuto.
<check_box label="Chiunque può aderire" name="open_enrollement" tool_tip="Imposta se questo gruppo permette ai nuovi membri di aderire senza essere invitati."/>
<check_box label="Quota di adesione" name="check_enrollment_fee" tool_tip="Imposta se richiedere una tassa d&apos;iscrizione per aderire al gruppo"/>
<spinner label="L$" left_delta="136" name="spin_enrollment_fee" tool_tip="I nuovi soci devono pagare questa tassa d&apos;iscrizione quando è selezionata." width="60"/>
- <combo_box name="group_mature_check" tool_tip="Imposta se le informazioni sul tuo gruppo sono da considerarsi di tipo Moderato.">
+ <combo_box name="group_mature_check" tool_tip="Le categorie di accesso definiscono il tipo di contenuti e di comportamenti ammessi in un gruppo">
<combo_item name="select_mature">
- Seleziona categoria di accesso -
</combo_item>
diff --git a/indra/newview/skins/default/xui/it/panel_region_access.xml b/indra/newview/skins/default/xui/it/panel_region_access.xml
index 06ab2b40e7..7547dbe76f 100644
--- a/indra/newview/skins/default/xui/it/panel_region_access.xml
+++ b/indra/newview/skins/default/xui/it/panel_region_access.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="ACCESSO" name="Access">
+<panel label="Accesso" name="Access">
<tab_container name="tabs">
<panel label="GESTORI DELLE PROPRIETÀ IMMOBILIARI" name="estate_managers_panel">
<text name="estate_manager_label">
- Gestori delle proprietà immobiliari
+ Gestori delle proprietà immobiliari:
</text>
<name_list name="estate_manager_name_list">
<columns label="Nome" name="name"/>
@@ -14,9 +14,10 @@
<panel label="AMMESSO" name="allowed_panel">
<panel label="top_panel" name="allowed_search_panel">
<filter_editor label="Cerca agenti ammessi" name="allowed_search_input"/>
+ <button label="Copia" name="copy_allowed_list_btn"/>
</panel>
<text name="allow_resident_label">
- Sempre ammesso:
+ Sempre ammessi:
</text>
<name_list name="allowed_avatar_name_list">
<columns label="Nome" name="name"/>
@@ -26,10 +27,11 @@
</panel>
<panel label="GRUPPI AMMESSI" name="allowed_groups_panel">
<panel label="top_panel" name="allowed_group_search_panel">
- <filter_editor label="Cerca gruppi consentiti" name="allowed_group_search_input"/>
+ <filter_editor label="Cerca gruppi ammessi" name="allowed_group_search_input"/>
+ <button label="Copia" name="copy_allowed_group_list_btn"/>
</panel>
<text name="allow_group_label">
- Gruppi sempre consentiti:
+ Gruppi sempre ammessi:
</text>
<name_list name="allowed_group_name_list">
<columns label="Nome" name="name"/>
@@ -40,6 +42,7 @@
<panel label="ESPULSI" name="banned_panel">
<panel label="top_panel" name="banned_search_panel">
<filter_editor label="Cerca agenti espulsi" name="banned_search_input"/>
+ <button label="Copia" name="copy_banned_list_btn"/>
</panel>
<text name="ban_resident_label">
Sempre espulsi:
diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml
index 9492d062c3..9265ce9ec6 100644
--- a/indra/newview/skins/default/xui/it/strings.xml
+++ b/indra/newview/skins/default/xui/it/strings.xml
@@ -73,6 +73,9 @@ Modello illuminazione avanzato: [GPU_SHADERS]
Memoria texture: [TEXTURE_MEMORY]MB
Data/ora creazione VFS (cache): [VFS_TIME]
</string>
+ <string name="AboutOSXHiDPI">
+ Modalità display HiDPI: [HIDPI]
+ </string>
<string name="AboutLibs">
J2C Versione decoder: [J2C_VERSION]
Versione del driver audio: [AUDIO_DRIVER_VERSION][LIBCEF_VERSION]
@@ -1468,6 +1471,15 @@ http://secondlife.com/support per risolvere il problema.
<string name="MarketplaceURL_LearnMore">
https://marketplace.[MARKETPLACE_DOMAIN_NAME]/learn_more
</string>
+ <string name="InventoryPlayAnimationTooltip">
+ Apri finestra con opzioni di Gioco.
+ </string>
+ <string name="InventoryPlayGestureTooltip">
+ Esegui il movimento selezionato nel mondo virtuale.
+ </string>
+ <string name="InventoryPlaySoundTooltip">
+ Apri finestra con opzioni di Gioco.
+ </string>
<string name="InventoryOutboxNotMerchantTitle">
Chiunque può vendere oggetti nel Marketplace.
</string>
@@ -5314,9 +5326,6 @@ Prova a racchiudere il percorso dell&apos;editor in doppie virgolette.
<string name="Command_Destinations_Label">
Destinazioni
</string>
- <string name="Command_Facebook_Label">
- Facebook
- </string>
<string name="Command_Flickr_Label">
Flickr
</string>
@@ -5410,9 +5419,6 @@ Prova a racchiudere il percorso dell&apos;editor in doppie virgolette.
<string name="Command_Destinations_Tooltip">
Destinazioni interessanti
</string>
- <string name="Command_Facebook_Tooltip">
- Pubblica su Facebook
- </string>
<string name="Command_Flickr_Tooltip">
Carica su Flickr
</string>
diff --git a/indra/newview/skins/default/xui/ja/floater_about_land.xml b/indra/newview/skins/default/xui/ja/floater_about_land.xml
index df94daad8e..d26a1b34d5 100644
--- a/indra/newview/skins/default/xui/ja/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/ja/floater_about_land.xml
@@ -9,6 +9,12 @@
<floater.string name="maturity_icon_adult">
&quot;Parcel_R_Dark&quot;
</floater.string>
+ <floater.string name="Hours">
+ [HOURS] 時間
+ </floater.string>
+ <floater.string name="Hour">
+ 時間
+ </floater.string>
<floater.string name="Minutes">
[MINUTES] 分
</floater.string>
@@ -21,6 +27,9 @@
<floater.string name="Remaining">
残り
</floater.string>
+ <floater.string name="Always">
+ 常時
+ </floater.string>
<tab_container name="landtab">
<panel label="一般" name="land_general_panel">
<panel.string name="new users only">
@@ -320,18 +329,18 @@
<text name="allow_label2">
制作:
</text>
- <check_box label="全員" name="edit objects check"/>
- <check_box label="グループ" name="edit group objects check"/>
+ <check_box label="全員" name="edit objects check" tool_tip="このオプションを選択すると、住人はあなたの土地でオブジェクトの制作や rez ができます。"/>
+ <check_box label="グループ" name="edit group objects check" tool_tip="このオプションを選択すると、区画のグループメンバーは、あなたの土地でオブジェクトの制作や rez ができます。"/>
<text name="allow_label3">
オブジェクトの進入:
</text>
- <check_box label="全員" name="all object entry check"/>
- <check_box label="グループ" name="group object entry check"/>
+ <check_box label="全員" name="all object entry check" tool_tip="このオプションを選択すると、住人は他の区画にあるオブジェクトをこの区画に移動することが可能です。"/>
+ <check_box label="グループ" name="group object entry check" tool_tip="このオプションを選択すると、区画のグループメンバーは他の区画にあるオブジェクトをこの区画に移動することが可能です。"/>
<text name="allow_label4">
スクリプトの実行:
</text>
- <check_box label="全員" name="check other scripts"/>
- <check_box label="グループ" name="check group scripts"/>
+ <check_box label="全員" name="check other scripts" tool_tip="このオプションを選択すると、住人はアタッチメントなどのスクリプトをあなたの区画で実行できます。"/>
+ <check_box label="グループ" name="check group scripts" tool_tip="このオプションを選択すると、区画のグループメンバーは、アタッチメントなどのスクリプトをあなたの区画で実行できます。"/>
<check_box label="安全(ダメージなし)" name="check safe" tool_tip="チェックを入れるとこの土地でのダメージコンバットが無効になり、「安全」に設定されます。 チェックを外すとダメージコンバットが有効になります。"/>
<check_box label="プッシュ禁止" name="PushRestrictCheck" tool_tip="スクリプトによるプッシュを禁止します。 このオプションを選択することにより、あなたの土地での破壊的行動を防ぐことができます。"/>
<check_box label="検索に区画を表示(週 L$ 30)" name="ShowDirectoryCheck" tool_tip="この区画を検索結果に表示します"/>
@@ -355,8 +364,8 @@
スナップショット:
</text>
<texture_picker label="" name="snapshot_ctrl" tool_tip="写真をクリックして選択"/>
- <text name="allow_label5">
- 他の区画にいるアバターがこの区画にいるアバターに会ってチャットできる
+ <text name="allow_see_label">
+ 他の区画にいるアバターがこの区画にいるアバターに会ってチャットできます
</text>
<check_box label="アバターを表示" name="SeeAvatarsCheck" tool_tip="他の区画のアバターが、この区画にいるアバターに会ってチャットすることを許可し、あなたもそれらアバターに会ってチャットできるようにします。"/>
<text name="landing_point">
@@ -458,9 +467,12 @@
</panel>
<panel name="Banned_layout_panel">
<text label="禁止" name="BanCheck">
- 常に禁止する ([COUNT] 人、最大 [MAX] 人)
+ 禁止する ([COUNT] 人、最大 [MAX] 人)
</text>
- <name_list name="BannedList" tool_tip="(合計 [LISTED] 人、最大 [MAX] 人)"/>
+ <name_list name="BannedList" tool_tip="(合計 [LISTED] 人、最大 [MAX] 人)">
+ <columns label="名前" name="name"/>
+ <columns label="期間" name="duration"/>
+ </name_list>
<button label="追加" name="add_banned"/>
<button label="削除" label_selected="削除" name="remove_banned"/>
</panel>
diff --git a/indra/newview/skins/default/xui/ja/floater_ban_duration.xml b/indra/newview/skins/default/xui/ja/floater_ban_duration.xml
new file mode 100644
index 0000000000..a9d00b0116
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_ban_duration.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="ban_duration" title="禁止期間">
+ <text name="duration_textbox">
+ 禁止期間:
+ </text>
+ <radio_group name="ban_duration_radio">
+ <radio_item label="常時" name="always_radio">
+ 常時
+ </radio_item>
+ <radio_item label="一時的" name="temporary_radio">
+ 一時的
+ </radio_item>
+ </radio_group>
+ <text name="hours_textbox">
+ 時間
+ </text>
+ <button label="Ok" name="ok_btn"/>
+ <button label="キャンセル" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_gesture.xml b/indra/newview/skins/default/xui/ja/floater_gesture.xml
index 1ed5ad31db..b5b1efe386 100644
--- a/indra/newview/skins/default/xui/ja/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/ja/floater_gesture.xml
@@ -21,7 +21,7 @@
<button name="activate_btn" tool_tip="選択したジェスチャーのアクティベートの有無"/>
<button name="del_btn" tool_tip="このジェスチャーを削除"/>
</panel>
- <button label="編集" name="edit_btn"/>
- <button label="再生" name="play_btn"/>
+ <button label="編集" name="edit_btn" tool_tip="選択済みのジェスチャーを編集するためにウィンドウを開ける。"/>
+ <button label="再生" name="play_btn" tool_tip="インワールドで選択済みのジェスチャーを実行する。"/>
<button label="停止" name="stop_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/ja/floater_preferences_graphics_advanced.xml
index ff7814ffb7..c28afa4c98 100644
--- a/indra/newview/skins/default/xui/ja/floater_preferences_graphics_advanced.xml
+++ b/indra/newview/skins/default/xui/ja/floater_preferences_graphics_advanced.xml
@@ -43,6 +43,7 @@
<check_box label="異方的フィルタリング (有効にすると速度が低下)" name="ani"/>
<check_box initial_value="true" label="OpenGL Vertex Buffer Objects を有効化" name="vbo" tool_tip="最新のハードウェアでこのオプションを有効にするとパフォーマンスが向上します。ただし、古いハードウェアでは VBO の実装が貧弱なため、このオプションを有効にするとクラッシュする場合があります。"/>
<check_box initial_value="true" label="テクスチャ圧縮の有効化 (再起動後に反映)" name="texture compression" tool_tip="ビデオメモリでテクスチャを圧縮すると、一部のカラー品質を犠牲にして、高解像度のテクスチャをロードできます。"/>
+ <check_box initial_value="true" label="HiDPI 表示のためにサポートを有効にする(再起動が必要)" name="use HiDPI" tool_tip="高画質の描画のために OpenGL を有効にする"/>
<text name="antialiasing label">
アンチエイリアシング:
</text>
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_notecard.xml b/indra/newview/skins/default/xui/ja/floater_preview_notecard.xml
index ae8ae9f7b5..ef7e90a6bc 100644
--- a/indra/newview/skins/default/xui/ja/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/ja/floater_preview_notecard.xml
@@ -15,6 +15,7 @@
<text_editor name="Notecard Editor">
ローディング...
</text_editor>
+ <button label="編集..." label_selected="編集" name="Edit"/>
<button label="保存" label_selected="保存" name="Save"/>
<button label="削除" label_selected="削除" name="Delete"/>
</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_report_abuse.xml b/indra/newview/skins/default/xui/ja/floater_report_abuse.xml
index 7631cd7aba..4ddd0d2605 100644
--- a/indra/newview/skins/default/xui/ja/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/ja/floater_report_abuse.xml
@@ -76,7 +76,7 @@
<combo_box.item label="土地 &gt; 不法侵入 &gt; オブジェクトまたはテクスチャ" name="Land__Encroachment__Objects_textures"/>
<combo_box.item label="土地>不法侵入>パーティクル" name="Land__Encroachment__Particles"/>
<combo_box.item label="土地>不法侵入>樹木/植物" name="Land__Encroachment__Trees_plants"/>
- <combo_box.item label="ゲーミング ポリシー違反" name="Wagering_gambling"/>
+ <combo_box.item label="スキルゲーミング ポリシー違反" name="Wagering_gambling"/>
<combo_box.item label="その他" name="Other"/>
</combo_box>
<text name="abuser_name_title">
diff --git a/indra/newview/skins/default/xui/ja/panel_group_general.xml b/indra/newview/skins/default/xui/ja/panel_group_general.xml
index a1bfb67823..aab536f653 100644
--- a/indra/newview/skins/default/xui/ja/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/ja/panel_group_general.xml
@@ -46,7 +46,7 @@
<check_box label="誰でも入会できます" name="open_enrollement" tool_tip="招待されなくても新規メンバーが加入できるかどうかを設定します。"/>
<check_box label="入会費がかかります" name="check_enrollment_fee" tool_tip="入会費が必要かどうかを設定します。"/>
<spinner label="L$" name="spin_enrollment_fee" tool_tip="「入会費」にチェックが入っている場合、新規メンバーは指定された入会費を支払わなければグループに入れません。"/>
- <combo_box name="group_mature_check" tool_tip="あなたのグループに「Moderate」にレート設定された情報があるかどうかを設定します">
+ <combo_box name="group_mature_check" tool_tip="レーティング区分は、グループ内でどのようなコンテンツや行動が許されるかを指定するものです">
<combo_item name="select_mature">
- レーティング区分を指定 -
</combo_item>
diff --git a/indra/newview/skins/default/xui/ja/panel_region_access.xml b/indra/newview/skins/default/xui/ja/panel_region_access.xml
index c0612dd150..34809688d0 100644
--- a/indra/newview/skins/default/xui/ja/panel_region_access.xml
+++ b/indra/newview/skins/default/xui/ja/panel_region_access.xml
@@ -14,6 +14,7 @@
<panel label="許可" name="allowed_panel">
<panel label="top_panel" name="allowed_search_panel">
<filter_editor label="許可されたエージェントを検索" name="allowed_search_input"/>
+ <button label="コピー" name="copy_allowed_list_btn"/>
</panel>
<text name="allow_resident_label">
常に許可:
@@ -27,6 +28,7 @@
<panel label="許可されたグループ" name="allowed_groups_panel">
<panel label="top_panel" name="allowed_group_search_panel">
<filter_editor label="許可されたグループを検索" name="allowed_group_search_input"/>
+ <button label="コピー" name="copy_allowed_group_list_btn"/>
</panel>
<text name="allow_group_label">
常に許可されたグループ:
@@ -40,6 +42,7 @@
<panel label="禁止" name="banned_panel">
<panel label="top_panel" name="banned_search_panel">
<filter_editor label="禁止されたエージェントを検索" name="banned_search_input"/>
+ <button label="コピー" name="copy_banned_list_btn"/>
</panel>
<text name="ban_resident_label">
常に禁止:
diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml
index 91d31faa76..1e123eb619 100644
--- a/indra/newview/skins/default/xui/ja/strings.xml
+++ b/indra/newview/skins/default/xui/ja/strings.xml
@@ -76,6 +76,9 @@ LOD 係数: [LOD_FACTOR]
テクスチャメモリ: [TEXTURE_MEMORY]MB
VFS(キャッシュ)作成時間: [VFS_TIME]
</string>
+ <string name="AboutOSXHiDPI">
+ HiDPI 表示モード: [HIDPI]
+ </string>
<string name="AboutLibs">
J2C デコーダバージョン: [J2C_VERSION]
オーディオドライババージョン: [AUDIO_DRIVER_VERSION]
@@ -1477,6 +1480,15 @@ support@secondlife.com にお問い合わせください。
<string name="MarketplaceURL_LearnMore">
https://marketplace.[MARKETPLACE_DOMAIN_NAME]/learn_more
</string>
+ <string name="InventoryPlayAnimationTooltip">
+ [再生] オプションでウィンドウを開ける。
+ </string>
+ <string name="InventoryPlayGestureTooltip">
+ インワールドで選択済みのジェスチャーを実行する。
+ </string>
+ <string name="InventoryPlaySoundTooltip">
+ [再生] オプションでウィンドウを開ける。
+ </string>
<string name="InventoryOutboxNotMerchantTitle">
マーケットプレイスでは誰でもアイテムを売ることができます。
</string>
@@ -5397,9 +5409,6 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ
<string name="Command_Destinations_Label">
行き先
</string>
- <string name="Command_Facebook_Label">
- Facebook
- </string>
<string name="Command_Flickr_Label">
Flickr
</string>
@@ -5493,9 +5502,6 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ
<string name="Command_Destinations_Tooltip">
行ってみたい場所
</string>
- <string name="Command_Facebook_Tooltip">
- Facebook へ投稿
- </string>
<string name="Command_Flickr_Tooltip">
Flickr にアップロード
</string>
diff --git a/indra/newview/skins/default/xui/pt/floater_about_land.xml b/indra/newview/skins/default/xui/pt/floater_about_land.xml
index 6039b7fd4a..ef71baa0b6 100644
--- a/indra/newview/skins/default/xui/pt/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/pt/floater_about_land.xml
@@ -9,6 +9,12 @@
<floater.string name="maturity_icon_adult">
&quot;Parcel_R_Dark&quot;
</floater.string>
+ <floater.string name="Hours">
+ [HOURS] hrs.
+ </floater.string>
+ <floater.string name="Hour">
+ hr.
+ </floater.string>
<floater.string name="Minutes">
[MINUTES] min.
</floater.string>
@@ -21,6 +27,9 @@
<floater.string name="Remaining">
faltam
</floater.string>
+ <floater.string name="Always">
+ Sempre
+ </floater.string>
<tab_container name="landtab">
<panel label="GERAL" name="land_general_panel">
<panel.string name="new users only">
@@ -318,18 +327,18 @@ Apenas lotes maiores podem ser listados na busca.
<text name="allow_label2">
Criar objetos:
</text>
- <check_box label="Residentes" name="edit objects check"/>
- <check_box label="Grupo" name="edit group objects check"/>
+ <check_box label="Residentes" name="edit objects check" tool_tip="Se verificado, os Residentes podem criar e mover objetos no seu terreno."/>
+ <check_box label="Grupo" name="edit group objects check" tool_tip="Se verificado, o grupo de membros do terreno podem criar e adicionar objetos no seu terreno."/>
<text name="allow_label3">
Entrada de objetos:
</text>
- <check_box label="Residentes" name="all object entry check"/>
- <check_box label="Grupo" name="group object entry check"/>
+ <check_box label="Residentes" name="all object entry check" tool_tip="Se verificado, os Residentes podem mover objetos existentes de outros terrenos para esse terreno."/>
+ <check_box label="Grupo" name="group object entry check" tool_tip="Se verificado, o grupo de membros do terreno podem mover os objetos existentes de outros terrenos para esse terreno."/>
<text name="allow_label4">
Executar scripts:
</text>
- <check_box label="Residentes" name="check other scripts"/>
- <check_box label="Grupo" name="check group scripts"/>
+ <check_box label="Residentes" name="check other scripts" tool_tip="Se verificado, os Residentes podem rodar scripts no seu terreno, incluindo anexos."/>
+ <check_box label="Grupo" name="check group scripts" tool_tip="Se verificado, o grupo de membros do terreno podem rodar scripts no seu terreno, incluindo anexos."/>
<check_box label="Seguro (sem danos)" name="check safe" tool_tip="Se ativado, ajusta o terreno para Seguro, impedindo lutas com danos. Se não ativado, lutas com danos é habilitado."/>
<check_box label="Proibido empurrar" name="PushRestrictCheck" tool_tip="Evita scripts que empurram. Ativar essa opção ajuda a prevenir comportamentos desordeiros no seu terreno."/>
<check_box label="Mostrar terreno nos resultados de busca (L$30/semana)" name="ShowDirectoryCheck" tool_tip="Permitir que as pessoas vejam este terreno nos resultados de busca"/>
@@ -353,7 +362,7 @@ Apenas lotes maiores podem ser listados na busca.
Foto:
</text>
<texture_picker label="" name="snapshot_ctrl" tool_tip="Clique para escolher uma imagem"/>
- <text name="allow_label5">
+ <text name="allow_see_label">
Avatares em outros lotes podem ver e conversar com avatares neste lote
</text>
<check_box label="Ver avatares" name="SeeAvatarsCheck" tool_tip="Permite que os avatares em outros lotes vejam e batam papo com avatares neste lote. Você poderá vê-los e conversar com eles."/>
@@ -459,9 +468,12 @@ Mídia:
</panel>
<panel name="Banned_layout_panel">
<text label="Ban" name="BanCheck">
- Sempre banido ([COUNT], máx: [MAX])
+ Banido ([COUNT], máx: [MAX])
</text>
- <name_list name="BannedList" tool_tip="(Total [LISTED], máx de [MAX])"/>
+ <name_list name="BannedList" tool_tip="(Total [LISTED], máx de [MAX])">
+ <columns label="Nome" name="name"/>
+ <columns label="Duração" name="duration"/>
+ </name_list>
<button label="Adicionar" name="add_banned"/>
<button label="Tirar" label_selected="Tirar" name="remove_banned"/>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/floater_ban_duration.xml b/indra/newview/skins/default/xui/pt/floater_ban_duration.xml
new file mode 100644
index 0000000000..1b2bab88c7
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_ban_duration.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="ban_duration" title="Duração do banimento">
+ <text name="duration_textbox">
+ Duração do banimento:
+ </text>
+ <radio_group name="ban_duration_radio">
+ <radio_item label="Sempre" name="always_radio">
+ Sempre
+ </radio_item>
+ <radio_item label="Temporário" name="temporary_radio">
+ Temporário
+ </radio_item>
+ </radio_group>
+ <text name="hours_textbox">
+ horas.
+ </text>
+ <button label="Ok" name="ok_btn"/>
+ <button label="Cancelar" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_gesture.xml b/indra/newview/skins/default/xui/pt/floater_gesture.xml
index 2e5b92aaf7..308d3e7d88 100644
--- a/indra/newview/skins/default/xui/pt/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/pt/floater_gesture.xml
@@ -20,7 +20,7 @@
<button name="activate_btn" tool_tip="Ativar/Desativar gesto selecionado"/>
<button name="del_btn" tool_tip="Excluir este gesto"/>
</panel>
- <button label="Editar" name="edit_btn"/>
- <button label="Executar" name="play_btn"/>
+ <button label="Editar" name="edit_btn" tool_tip="Abrir janela para edição do gesto selecionado."/>
+ <button label="Executar" name="play_btn" tool_tip="Executar o gesto selecionado no mundo."/>
<button label="Parar" name="stop_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/pt/floater_preferences_graphics_advanced.xml
index 89b3781151..c5039267ca 100644
--- a/indra/newview/skins/default/xui/pt/floater_preferences_graphics_advanced.xml
+++ b/indra/newview/skins/default/xui/pt/floater_preferences_graphics_advanced.xml
@@ -43,6 +43,7 @@
<check_box label="Filtro anisotrópico (mais lento quando ativado)" name="ani"/>
<check_box initial_value="true" label="Ativar Vertex Buffer Objects de OpenGL" name="vbo" tool_tip="Ativar isso em hardware moderno melhora o desempenho. Entretanto, hardwares mais antigos normalmente implantam mal os VBOs. A ativação dessa configuração pode travar sua máquina."/>
<check_box initial_value="true" label="Habilitar compressão da textura (requer reinício)" name="texture compression" tool_tip="Comprime as texturas na memória de vídeo, permitindo o carregamento de texturas de maior resolução em detrimento da qualidade da cor."/>
+ <check_box initial_value="true" label="Habilitar suporte para exibição HiDPI (é necessário reiniciar)" name="use HiDPI" tool_tip="Habilitar o OpenGL para Desenho de alta-resolução."/>
<text name="antialiasing label">
Antialiasing:
</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_notecard.xml b/indra/newview/skins/default/xui/pt/floater_preview_notecard.xml
index d094c1b63a..9885ee2a23 100644
--- a/indra/newview/skins/default/xui/pt/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/pt/floater_preview_notecard.xml
@@ -15,6 +15,7 @@
<text_editor name="Notecard Editor">
Carregando...
</text_editor>
+ <button label="Editar..." label_selected="Editar" name="Edit"/>
<button label="Salvar" label_selected="Salvar" name="Save"/>
<button label="Excluir" label_selected="Excluir" name="Delete"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_report_abuse.xml b/indra/newview/skins/default/xui/pt/floater_report_abuse.xml
index f30201fc33..1429fe183c 100644
--- a/indra/newview/skins/default/xui/pt/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/pt/floater_report_abuse.xml
@@ -76,7 +76,7 @@
<combo_box.item label="Terreno &gt; Invasão &gt; Objetos ou texturas" name="Land__Encroachment__Objects_textures"/>
<combo_box.item label="Terra &gt; Invasão &gt; Partículas" name="Land__Encroachment__Particles"/>
<combo_box.item label="Terra &gt; Violação &gt; Árvores/plantas" name="Land__Encroachment__Trees_plants"/>
- <combo_box.item label="Violação da política sobre jogos" name="Wagering_gambling"/>
+ <combo_box.item label="Ignorar o jogo de violação da política" name="Wagering_gambling"/>
<combo_box.item label="Outro" name="Other"/>
</combo_box>
<text name="abuser_name_title">
diff --git a/indra/newview/skins/default/xui/pt/notifications.xml b/indra/newview/skins/default/xui/pt/notifications.xml
index 478af96e95..530a272dbb 100644
--- a/indra/newview/skins/default/xui/pt/notifications.xml
+++ b/indra/newview/skins/default/xui/pt/notifications.xml
@@ -1904,7 +1904,7 @@ Isto mudará milhares de regiões e fará o spaceserver soluçar.
<usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="Todas as Propriedades" yestext="Esta Propriedade"/>
</notification>
<notification label="Selecione a propriedade" name="EstateBannedAgentRemove">
- Remover este Residente da lista de banimento para acessar este estado somente ou para [ALL_ESTATES]?
+ Remover este Residente da lista de banimento para acessar esta propriedade somente ou para [ALL_ESTATES]?
<usetemplate canceltext="Cancelar" name="yesnocancelbuttons" notext="Todas as Propriedades" yestext="Esta Propriedade"/>
</notification>
<notification label="Selecione a propriedade" name="EstateManagerAdd">
diff --git a/indra/newview/skins/default/xui/pt/panel_group_general.xml b/indra/newview/skins/default/xui/pt/panel_group_general.xml
index b634ec3f64..64a7d13fdb 100644
--- a/indra/newview/skins/default/xui/pt/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/pt/panel_group_general.xml
@@ -46,7 +46,7 @@ Para obter mais ajuda, passe o mouse sobre as opções.
<check_box label="Qualquer um pode entrar" name="open_enrollement" tool_tip="Controla a entrada de novos membros, com ou sem convite."/>
<check_box label="Taxa de inscrição" name="check_enrollment_fee" tool_tip="Controla a cobrança de uma taxa de associação ao grupo."/>
<spinner label="L$" left_delta="120" name="spin_enrollment_fee" tool_tip="Se a opção &apos;Taxa de associação&apos; estiver marcada, novos membros precisam pagar o valor definido para entrar no grupo." width="60"/>
- <combo_box name="group_mature_check" tool_tip="Define se os dados do seu grupo são conteúdo moderado." width="170">
+ <combo_box name="group_mature_check" tool_tip="Os níveis de maturidade determinam o tipo de conteúdo e comportamento permitidos em um grupo" width="170">
<combo_item name="select_mature">
- Selecione o nível de maturidade -
</combo_item>
diff --git a/indra/newview/skins/default/xui/pt/panel_region_access.xml b/indra/newview/skins/default/xui/pt/panel_region_access.xml
index cc2136a459..c6273ea70d 100644
--- a/indra/newview/skins/default/xui/pt/panel_region_access.xml
+++ b/indra/newview/skins/default/xui/pt/panel_region_access.xml
@@ -14,6 +14,7 @@
<panel label="PERMITIDO" name="allowed_panel">
<panel label="top_panel" name="allowed_search_panel">
<filter_editor label="Buscar agentes permitidos" name="allowed_search_input"/>
+ <button label="Copiar" name="copy_allowed_list_btn"/>
</panel>
<text name="allow_resident_label">
Sempre permitido:
@@ -27,6 +28,7 @@
<panel label="GRUPOS PERMITIDOS" name="allowed_groups_panel">
<panel label="top_panel" name="allowed_group_search_panel">
<filter_editor label="Buscar grupos permitidos" name="allowed_group_search_input"/>
+ <button label="Copiar" name="copy_allowed_group_list_btn"/>
</panel>
<text name="allow_group_label">
Grupos sempre permitidos:
@@ -40,6 +42,7 @@
<panel label="BANIDO" name="banned_panel">
<panel label="top_panel" name="banned_search_panel">
<filter_editor label="Buscar agentes banidos" name="banned_search_input"/>
+ <button label="Copiar" name="copy_banned_list_btn"/>
</panel>
<text name="ban_resident_label">
Sempre banido:
diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml
index c4fbf1f4c9..cccc70a92a 100644
--- a/indra/newview/skins/default/xui/pt/strings.xml
+++ b/indra/newview/skins/default/xui/pt/strings.xml
@@ -67,6 +67,9 @@ Modelo avançado de luzes: [GPU_SHADERS]
Memória de textura: [TEXTURE_MEMORY]MB
VFS (cache) tempo de criação: [VFS_TIME]
</string>
+ <string name="AboutOSXHiDPI">
+ HiDPI modo de exibição: [HIDPI]
+ </string>
<string name="AboutLibs">
Versão do J2C Decoder: [J2C_VERSION]
Versão do driver de áudio: [AUDIO_DRIVER_VERSION]
@@ -1428,6 +1431,15 @@ http://secondlife.com/support para ajuda ao resolver este problema.
<string name="MarketplaceURL_LearnMore">
https://marketplace.[MARKETPLACE_DOMAIN_NAME]/learn_more
</string>
+ <string name="InventoryPlayAnimationTooltip">
+ Abrir a janela com as opções do Jogo.
+ </string>
+ <string name="InventoryPlayGestureTooltip">
+ Executar o gesto selecionado no mundo.
+ </string>
+ <string name="InventoryPlaySoundTooltip">
+ Abrir a janela com as opções do Jogo.
+ </string>
<string name="InventoryOutboxNotMerchantTitle">
Qualquer um pode vender itens no Mercado.
</string>
@@ -5273,9 +5285,6 @@ Tente colocar o caminho do editor entre aspas.
<string name="Command_Destinations_Label">
Destinos
</string>
- <string name="Command_Facebook_Label">
- Facebook
- </string>
<string name="Command_Flickr_Label">
Flickr
</string>
@@ -5369,9 +5378,6 @@ Tente colocar o caminho do editor entre aspas.
<string name="Command_Destinations_Tooltip">
Destinos de interesse
</string>
- <string name="Command_Facebook_Tooltip">
- Publicar no Facebook
- </string>
<string name="Command_Flickr_Tooltip">
Carregar no Flickr
</string>
diff --git a/indra/newview/skins/default/xui/ru/floater_about_land.xml b/indra/newview/skins/default/xui/ru/floater_about_land.xml
index 50402633f2..1ae6df76d9 100644
--- a/indra/newview/skins/default/xui/ru/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/ru/floater_about_land.xml
@@ -9,6 +9,12 @@
<floater.string name="maturity_icon_adult">
&quot;Parcel_R_Dark&quot;
</floater.string>
+ <floater.string name="Hours">
+ \[HOURS] ч
+ </floater.string>
+ <floater.string name="Hour">
+ ч
+ </floater.string>
<floater.string name="Minutes">
[MINUTES] мин
</floater.string>
@@ -21,6 +27,9 @@
<floater.string name="Remaining">
осталось
</floater.string>
+ <floater.string name="Always">
+ Всегда
+ </floater.string>
<tab_container name="landtab">
<panel label="ОСНОВНЫЕ" name="land_general_panel">
<panel.string name="new users only">
@@ -316,18 +325,18 @@
<text name="allow_label2">
Строительство:
</text>
- <check_box label="Все" name="edit objects check"/>
- <check_box label="Группа" name="edit group objects check"/>
+ <check_box label="Все" name="edit objects check" tool_tip="Если установлен флажок, жители могут создавать и выкладывать объекты на вашей земле."/>
+ <check_box label="Группа" name="edit group objects check" tool_tip="Если установлен флажок, то жители могут создавать и выкладывать объекты на вашей земле."/>
<text name="allow_label3">
Проникновение объектов:
</text>
- <check_box label="Все" name="all object entry check"/>
- <check_box label="Группа" name="group object entry check"/>
+ <check_box label="Все" name="all object entry check" tool_tip="Если установлен флажок, то жители могут перемещать существующие объекты из других участков на этот участок."/>
+ <check_box label="Группа" name="group object entry check" tool_tip="Если установлен флажок, то члены группы участка могут перемещать существующие объекты из других участков на этот участок."/>
<text name="allow_label4">
Запускать скрипты:
</text>
- <check_box label="Все" name="check other scripts"/>
- <check_box label="Группа" name="check group scripts"/>
+ <check_box label="Все" name="check other scripts" tool_tip="Если установлен флажок, то жители могут выполнять скрипты на вашем участке, включая приложения."/>
+ <check_box label="Группа" name="check group scripts" tool_tip="Если установлен флажок, то члены группы могут выполнять скрипты на вашем участке, включая приложения."/>
<check_box label="Безопасно (нет повреждений)" name="check safe" tool_tip="Если отмечено, то земля считается безопасной, отключены боевые повреждения. Если не отмечено, то боевые повреждения включены."/>
<check_box label="Не толкать" name="PushRestrictCheck" tool_tip="Запрещает скриптам функцию толкания. Этот параметр может оказаться полезным для предотвращения нежелательного поведения на вашей земле."/>
<check_box label="Показать место в поиске (L$30/неделя)" name="ShowDirectoryCheck" tool_tip="Позволить людям видеть участок в результатах поиска"/>
@@ -351,7 +360,7 @@
Снимок:
</text>
<texture_picker name="snapshot_ctrl" tool_tip="Щелкните для выбора изображения"/>
- <text name="allow_label5">
+ <text name="allow_see_label">
Аватары с других участков могут видеть аватары на этом участке и общаться с ними
</text>
<check_box label="Видны аватары" name="SeeAvatarsCheck" tool_tip="Аватары с других участков смогут видеть аватары на этом участке и общаться с ними в чате, а вы также сможете видеть их и общаться с ними."/>
@@ -454,9 +463,12 @@
</panel>
<panel name="Banned_layout_panel">
<text label="Бан" name="BanCheck">
- Всегда заблокировано ([COUNT], макс. [MAX])
+ Заблокировано ([COUNT], макс. [MAX])
</text>
- <name_list name="BannedList" tool_tip="([LISTED] в списке, [MAX] максимум)"/>
+ <name_list name="BannedList" tool_tip="([LISTED] в списке, [MAX] максимум)">
+ <columns label="Имя" name="name"/>
+ <columns label="Продолжительность" name="duration"/>
+ </name_list>
<button label="Добавить" name="add_banned"/>
<button label="Удалить" label_selected="Удалить" name="remove_banned"/>
</panel>
diff --git a/indra/newview/skins/default/xui/ru/floater_ban_duration.xml b/indra/newview/skins/default/xui/ru/floater_ban_duration.xml
new file mode 100644
index 0000000000..c4238cfa77
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/floater_ban_duration.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="ban_duration" title="Длительность запрета">
+ <text name="duration_textbox">
+ Длительность запрета:
+ </text>
+ <radio_group name="ban_duration_radio">
+ <radio_item label="Всегда" name="always_radio">
+ Всегда
+ </radio_item>
+ <radio_item label="Временно" name="temporary_radio">
+ Временно
+ </radio_item>
+ </radio_group>
+ <text name="hours_textbox">
+ часы
+ </text>
+ <button label="ОК" name="ok_btn"/>
+ <button label="Отмена" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ru/floater_gesture.xml b/indra/newview/skins/default/xui/ru/floater_gesture.xml
index 759d81b2c6..c9b85acff8 100644
--- a/indra/newview/skins/default/xui/ru/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/ru/floater_gesture.xml
@@ -20,7 +20,7 @@
<button name="activate_btn" tool_tip="Активировать/деактивировать выбранный жест"/>
<button name="del_btn" tool_tip="Удалить этот жест"/>
</panel>
- <button label="Изменить" name="edit_btn"/>
- <button label="Проиграть" name="play_btn"/>
+ <button label="Изменить" name="edit_btn" tool_tip="Откройте окно для редактирования выбранного жеста."/>
+ <button label="Проиграть" name="play_btn" tool_tip="Выполните выбранный жест в игровом мире."/>
<button label="Стоп" name="stop_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/ru/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/ru/floater_preferences_graphics_advanced.xml
index efad8678b6..fc6b6a173e 100644
--- a/indra/newview/skins/default/xui/ru/floater_preferences_graphics_advanced.xml
+++ b/indra/newview/skins/default/xui/ru/floater_preferences_graphics_advanced.xml
@@ -43,6 +43,7 @@
<check_box label="Анизотропная фильтрация (медленнее, если включено)" name="ani"/>
<check_box initial_value="true" label="Включить объекты вершинных буферов OpenGL" name="vbo" tool_tip="Включение этого параметра на современном оборудовании даст увеличение производительности. Однако на старом оборудовании это может привести к сбою приложения."/>
<check_box initial_value="true" label="Разрешить сжатие текстур (требует перезагрузки)" name="texture compression" tool_tip="Сжатие текстур в видеопамяти, что позволяет загружать текстуры большего размера за счет некоторого падения качества цвета."/>
+ <check_box initial_value="true" label="Активировать поддержку отображения HiDPI (требуется перезапуск)" name="use HiDPI" tool_tip="Активировать OpenGL для рисования с высоким разрешением."/>
<text name="antialiasing label">
Сглаживание:
</text>
diff --git a/indra/newview/skins/default/xui/ru/floater_preview_notecard.xml b/indra/newview/skins/default/xui/ru/floater_preview_notecard.xml
index 2f39d4a4a4..ffff72f17e 100644
--- a/indra/newview/skins/default/xui/ru/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/ru/floater_preview_notecard.xml
@@ -15,6 +15,7 @@
<text_editor name="Notecard Editor">
Загрузка...
</text_editor>
+ <button label="Pедактировать..." label_selected="Редактировать" name="Edit"/>
<button label="Сохранить" label_selected="Сохранить" name="Save"/>
<button label="Удалить" label_selected="Удалить" name="Delete"/>
</floater>
diff --git a/indra/newview/skins/default/xui/ru/floater_report_abuse.xml b/indra/newview/skins/default/xui/ru/floater_report_abuse.xml
index 67d847aa6b..3ac8cb74b4 100644
--- a/indra/newview/skins/default/xui/ru/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/ru/floater_report_abuse.xml
@@ -67,7 +67,7 @@
<combo_box.item label="Земля &gt; Посягательство &gt; Объекты или текстуры" name="Land__Encroachment__Objects_textures"/>
<combo_box.item label="Земля &gt; Посягательство &gt; Частицы" name="Land__Encroachment__Particles"/>
<combo_box.item label="Земля &gt; Посягательство &gt; Деревья/растения" name="Land__Encroachment__Trees_plants"/>
- <combo_box.item label="Нарушение политики игр" name="Wagering_gambling"/>
+ <combo_box.item label="Нарушение правил игр на ловкость" name="Wagering_gambling"/>
<combo_box.item label="Другое" name="Other"/>
</combo_box>
<text name="abuser_name_title">
diff --git a/indra/newview/skins/default/xui/ru/panel_group_general.xml b/indra/newview/skins/default/xui/ru/panel_group_general.xml
index ba38dbf89e..ee3a74103f 100644
--- a/indra/newview/skins/default/xui/ru/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/ru/panel_group_general.xml
@@ -44,7 +44,7 @@
<check_box label="Открытая регистрация" name="open_enrollement" tool_tip="Устанавливается, если в этой группе можно зарегистрироваться без приглашения."/>
<check_box label="Платная регистрация" name="check_enrollment_fee" tool_tip="Устанавливается, если в этой группе требуется оплата за вступление."/>
<spinner label="L$" name="spin_enrollment_fee" tool_tip="Новые участники должны будут оплатить взнос, если регистрация платная."/>
- <combo_box name="group_mature_check" tool_tip="Устанавливает, содержит ли группа информацию категории умеренной дозволенности">
+ <combo_box name="group_mature_check" tool_tip="Рейтинги зрелости определяют тип контента и поведение, разрешенное в группе">
<combo_item name="select_mature">
- Выберите рейтинг зрелости -
</combo_item>
diff --git a/indra/newview/skins/default/xui/ru/panel_region_access.xml b/indra/newview/skins/default/xui/ru/panel_region_access.xml
index 48adfbcd95..e2349f4c83 100644
--- a/indra/newview/skins/default/xui/ru/panel_region_access.xml
+++ b/indra/newview/skins/default/xui/ru/panel_region_access.xml
@@ -14,6 +14,7 @@
<panel label="РАЗРЕШЕННЫЕ" name="allowed_panel">
<panel label="top_panel" name="allowed_search_panel">
<filter_editor label="Поиск допущенных агентов" name="allowed_search_input"/>
+ <button label="Копировать" name="copy_allowed_list_btn"/>
</panel>
<text name="allow_resident_label">
Разрешено всегда:
@@ -27,6 +28,7 @@
<panel label="ДОПУЩЕННЫЕ ГРУППЫ" name="allowed_groups_panel">
<panel label="top_panel" name="allowed_group_search_panel">
<filter_editor label="Поиск допущенных групп" name="allowed_group_search_input"/>
+ <button label="Копировать" name="copy_allowed_group_list_btn"/>
</panel>
<text name="allow_group_label">
Допуск групп всегда разрешен:
@@ -40,6 +42,7 @@
<panel label="ЗАБЛОКИРОВАНЫ" name="banned_panel">
<panel label="top_panel" name="banned_search_panel">
<filter_editor label="Поиск заблокированных агентов" name="banned_search_input"/>
+ <button label="Копировать" name="copy_banned_list_btn"/>
</panel>
<text name="ban_resident_label">
Всегда заблокированы:
diff --git a/indra/newview/skins/default/xui/ru/panel_region_estate.xml b/indra/newview/skins/default/xui/ru/panel_region_estate.xml
index 5789058b3b..feeac0464a 100644
--- a/indra/newview/skins/default/xui/ru/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/ru/panel_region_estate.xml
@@ -16,7 +16,7 @@
(неизвестно)
</text>
<radio_group name="externally_visible_radio">
- <radio_item label="Разрешено только жителям и группам, перечисленным на вкладке доступа" name="estate_restricted_access"/>
+ <radio_item label="Разрешено только жителям и группам, перечисленных на вкладке доступа" name="estate_restricted_access"/>
<radio_item label="Доступ открыт для всех" name="estate_public_access"/>
</radio_group>
<check_box label="Должен быть 18 и старше" name="limit_age_verified" tool_tip="Доступ к этому землевладению имеют только жители 18 лет и старше. Более подробная информация находится здесь: [SUPPORT_SITE]."/>
diff --git a/indra/newview/skins/default/xui/ru/strings.xml b/indra/newview/skins/default/xui/ru/strings.xml
index 9192ebf601..9c01de2f1b 100644
--- a/indra/newview/skins/default/xui/ru/strings.xml
+++ b/indra/newview/skins/default/xui/ru/strings.xml
@@ -76,6 +76,9 @@ SLURL: &lt;nolink&gt;[SLURL]&lt;/nolink&gt;
Память текстур: [TEXTURE_MEMORY] МБ
Время создания VFS (кэш): [VFS_TIME]
</string>
+ <string name="AboutOSXHiDPI">
+ Режим отображения HiDPI: [HIDPI]
+ </string>
<string name="AboutLibs">
Версия декодера J2C: [J2C_VERSION]
Версия аудиодрайвера: [AUDIO_DRIVER_VERSION]
@@ -1475,6 +1478,15 @@ support@secondlife.com.
<string name="MarketplaceURL_LearnMore">
https://marketplace.[MARKETPLACE_DOMAIN_NAME]/learn_more
</string>
+ <string name="InventoryPlayAnimationTooltip">
+ Откройте окно с настройками игры.
+ </string>
+ <string name="InventoryPlayGestureTooltip">
+ Выполните выбранный жест в игровом мире.
+ </string>
+ <string name="InventoryPlaySoundTooltip">
+ Откройте окно с настройками игры.
+ </string>
<string name="InventoryOutboxNotMerchantTitle">
Продавать вещи в торговом центре может кто угодно.
</string>
@@ -5405,9 +5417,6 @@ support@secondlife.com.
<string name="Command_Destinations_Label">
Пункты
</string>
- <string name="Command_Facebook_Label">
- Facebook
- </string>
<string name="Command_Flickr_Label">
Flickr
</string>
@@ -5501,9 +5510,6 @@ support@secondlife.com.
<string name="Command_Destinations_Tooltip">
Интересные места
</string>
- <string name="Command_Facebook_Tooltip">
- Опубликовать в Facebook
- </string>
<string name="Command_Flickr_Tooltip">
Загрузить на Flickr
</string>
diff --git a/indra/newview/skins/default/xui/tr/floater_about_land.xml b/indra/newview/skins/default/xui/tr/floater_about_land.xml
index 1f4decb056..48b16e2fde 100644
--- a/indra/newview/skins/default/xui/tr/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/tr/floater_about_land.xml
@@ -9,6 +9,12 @@
<floater.string name="maturity_icon_adult">
&quot;Parcel_R_Dark&quot;
</floater.string>
+ <floater.string name="Hours">
+ [HOURS] sa
+ </floater.string>
+ <floater.string name="Hour">
+ sa
+ </floater.string>
<floater.string name="Minutes">
[MINUTES] dak.
</floater.string>
@@ -21,6 +27,9 @@
<floater.string name="Remaining">
kaldı
</floater.string>
+ <floater.string name="Always">
+ Her zaman
+ </floater.string>
<tab_container name="landtab">
<panel label="GENEL" name="land_general_panel">
<panel.string name="new users only">
@@ -316,18 +325,18 @@ Sadece büyük parseller aramada görünür.
<text name="allow_label2">
İnşa Et:
</text>
- <check_box label="Herkes" name="edit objects check"/>
- <check_box label="Grup" name="edit group objects check"/>
+ <check_box label="Herkes" name="edit objects check" tool_tip="İşaretlendiğinde, Sakinler arazinizde nesneler oluşturabilir ve nesneleri canlandırabilir."/>
+ <check_box label="Grup" name="edit group objects check" tool_tip="İşaretlendiğinde, parsel grubu üyeleri arazinizde nesneler oluşturabilir ve nesneleri canlandırabilir."/>
<text name="allow_label3">
Nesne Girişi:
</text>
- <check_box label="Herkes" name="all object entry check"/>
- <check_box label="Grup" name="group object entry check"/>
+ <check_box label="Herkes" name="all object entry check" tool_tip="İşaretlendiğinde, Sakinler mevcut nesneleri diğer parsellerden bu parsele taşıyabilir."/>
+ <check_box label="Grup" name="group object entry check" tool_tip="İşaretlendiğinde, parsel grubu üyeleri mevcut nesneleri diğer parsellerden bu parsele taşıyabilir."/>
<text name="allow_label4">
Komut Dosyalarını Çalıştır:
</text>
- <check_box label="Herkes" name="check other scripts"/>
- <check_box label="Grup" name="check group scripts"/>
+ <check_box label="Herkes" name="check other scripts" tool_tip="İşaretlendiğinde, Sakinler parselinizde aksesuarlar dahil olmak üzere komut dosyalarını çalıştırabilir."/>
+ <check_box label="Grup" name="check group scripts" tool_tip="İşaretlendiğinde, parsel grubu üyeleri parselinizde aksesuarlar dahil olmak üzere komut dosyalarını çalıştırabilir."/>
<check_box label="Güvenli (hasar yok)" name="check safe" tool_tip="İşaretliyse, araziyi Güvenli moda getirerek hasar çarpışmasını etkinsizleştirir İşaretli değilse hasar çarpışması etkinleşir."/>
<check_box label="İtme Yok" name="PushRestrictCheck" tool_tip="Komut dosyalarının itmesini önler Bu seçeneğin işaretlenmesi arazinizdeki bozucu davranışları önlemeye yardımcı olabilir."/>
<check_box label="Konumu Arama sonuçlarında göster (L$30/hafta)" name="ShowDirectoryCheck" tool_tip="Arama sonuçlarında bu parsel görünsün"/>
@@ -351,8 +360,8 @@ Sadece büyük parseller aramada görünür.
Anlık Görüntü:
</text>
<texture_picker name="snapshot_ctrl" tool_tip="Bir resim seçmek için tıklayın"/>
- <text name="allow_label5">
- Başka parsellerdeki avatarlar bu parseldeki avatarları görebilir ve onlarla sohbet edebilir
+ <text name="allow_see_label">
+ Diğer parsellerdeki avatarlar bu parseldeki avatarları görebilir ve onlarla sohbet edebilir
</text>
<check_box label="Avatarları Gör" name="SeeAvatarsCheck" tool_tip="Diğer parsellerdeki avatarların bu parseldeki avatarları görmesine ve onlarla sohbet etmesine, sizin de onları görüp, onlarla sohbet etmenize imkan tanır."/>
<text name="landing_point">
@@ -454,9 +463,12 @@ Sadece büyük parseller aramada görünür.
</panel>
<panel name="Banned_layout_panel">
<text label="Yasakla" name="BanCheck">
- Her zaman engellenen ([COUNT], maks. [MAX])
+ Engellenen ([COUNT], maks. [MAX])
</text>
- <name_list name="BannedList" tool_tip="([LISTED] listeli, [MAX] maksimum)"/>
+ <name_list name="BannedList" tool_tip="([LISTED] listeli, [MAX] maksimum)">
+ <columns label="Ad" name="name"/>
+ <columns label="Süre" name="duration"/>
+ </name_list>
<button label="Ekle" name="add_banned"/>
<button label="Kaldır" label_selected="Kaldır" name="remove_banned"/>
</panel>
diff --git a/indra/newview/skins/default/xui/tr/floater_ban_duration.xml b/indra/newview/skins/default/xui/tr/floater_ban_duration.xml
new file mode 100644
index 0000000000..22788a161a
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/floater_ban_duration.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="ban_duration" title="Engelleme süresi">
+ <text name="duration_textbox">
+ Engelleme süresi:
+ </text>
+ <radio_group name="ban_duration_radio">
+ <radio_item label="Her zaman" name="always_radio">
+ Her zaman
+ </radio_item>
+ <radio_item label="Geçici" name="temporary_radio">
+ Geçici
+ </radio_item>
+ </radio_group>
+ <text name="hours_textbox">
+ saat
+ </text>
+ <button label="Tamam" name="ok_btn"/>
+ <button label="İptal Et" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/tr/floater_gesture.xml b/indra/newview/skins/default/xui/tr/floater_gesture.xml
index 5f5d28ad6c..c466681fd9 100644
--- a/indra/newview/skins/default/xui/tr/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/tr/floater_gesture.xml
@@ -20,7 +20,7 @@
<button name="activate_btn" tool_tip="Seçilen mimiği Etkinleştir/Devre Dışı Bırak"/>
<button name="del_btn" tool_tip="Bu mimiği sil"/>
</panel>
- <button label="Düzenle" name="edit_btn"/>
- <button label="Oyna" name="play_btn"/>
+ <button label="Düzenle" name="edit_btn" tool_tip="Seçilen mimiği düzenlemek için pencere açın."/>
+ <button label="Oyna" name="play_btn" tool_tip="Seçilen mimiği SL dünyasında uygulayın."/>
<button label="Durdur" name="stop_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/tr/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/tr/floater_preferences_graphics_advanced.xml
index 734ceec89f..01ada1354c 100644
--- a/indra/newview/skins/default/xui/tr/floater_preferences_graphics_advanced.xml
+++ b/indra/newview/skins/default/xui/tr/floater_preferences_graphics_advanced.xml
@@ -43,6 +43,7 @@
<check_box label="Anisotropik Filtreleme (etkinken daha yavaş)" name="ani"/>
<check_box initial_value="true" label="OpenGL Vertex Tampon Nesnelerini Etkinleştir" name="vbo" tool_tip="Modern donanımlarda bunun etkinleştirilmesi performans artışı sağlar. Ancak, eski donanımlardaki VBO uygulamaları yetersizdir ve etkinleştirildiğinde bilgisayarınız çökebilir."/>
<check_box initial_value="true" label="Doku Sıkıştırmasını Etkinleştir (yeniden başlatma gerektirir)" name="texture compression" tool_tip="Video bellekteki dokuları sıkıştırır, renk kalitesinde bazı kayıplar olmasına karşın daha yüksek çözünürlükte dokuların yüklenmesine imkan tanır."/>
+ <check_box initial_value="true" label="HiDPI görüntü desteğini etkinleştir (yeniden başlatma gerekir)" name="use HiDPI" tool_tip="Yüksek Çözünürlüklü Çizim için OpenGL&apos;yi etkinleştirin."/>
<text name="antialiasing label">
Antialiasing:
</text>
diff --git a/indra/newview/skins/default/xui/tr/floater_preview_notecard.xml b/indra/newview/skins/default/xui/tr/floater_preview_notecard.xml
index 23391249d1..996054a8c6 100644
--- a/indra/newview/skins/default/xui/tr/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/tr/floater_preview_notecard.xml
@@ -15,6 +15,7 @@
<text_editor name="Notecard Editor">
Yükleniyor...
</text_editor>
+ <button label="Düzenle..." label_selected="Düzenle" name="Edit"/>
<button label="Kaydet" label_selected="Kaydet" name="Save"/>
<button label="Sil" label_selected="Sil" name="Delete"/>
</floater>
diff --git a/indra/newview/skins/default/xui/tr/floater_report_abuse.xml b/indra/newview/skins/default/xui/tr/floater_report_abuse.xml
index 28bacca763..de386d3bde 100644
--- a/indra/newview/skins/default/xui/tr/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/tr/floater_report_abuse.xml
@@ -67,7 +67,7 @@
<combo_box.item label="Arazi &gt; Tecavüz &gt; Nesneler veya dokular" name="Land__Encroachment__Objects_textures"/>
<combo_box.item label="Arazi &gt; Tecavvüz &gt; Parçacıklar" name="Land__Encroachment__Particles"/>
<combo_box.item label="Arazi &gt; Tecavvüz &gt; Ağaçlar/bitkiler" name="Land__Encroachment__Trees_plants"/>
- <combo_box.item label="Oyun Politikası İhlali" name="Wagering_gambling"/>
+ <combo_box.item label="Yetenek Oyunu Politikası İhlali" name="Wagering_gambling"/>
<combo_box.item label="Diğer" name="Other"/>
</combo_box>
<text name="abuser_name_title">
diff --git a/indra/newview/skins/default/xui/tr/panel_group_general.xml b/indra/newview/skins/default/xui/tr/panel_group_general.xml
index 0462026249..c666778c69 100644
--- a/indra/newview/skins/default/xui/tr/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/tr/panel_group_general.xml
@@ -45,7 +45,7 @@ Daha fazla yardım edinmek için farenizi seçeneklerin üzerine getirin.
<check_box label="Herkes katılabilir" name="open_enrollement" tool_tip="Bu grubun davet edilmeden yeni üyelerin katılmasına imkan tanıyıp tanımayacağını belirler."/>
<check_box label="Katılma ücreti" name="check_enrollment_fee" tool_tip="Bu gruba katılmak için bir kayıt ücretinin gerekip gerekmeyeceğini belirler"/>
<spinner label="L$" name="spin_enrollment_fee" tool_tip="Kayıt Ücreti işaretlendiğinde yeni üyeler gruba katılmak için bu ücreti ödemelidir."/>
- <combo_box name="group_mature_check" tool_tip="Grubunuzun Orta seviyede içeriğe sahip olup olmadığını belirler">
+ <combo_box name="group_mature_check" tool_tip="Erişkinlik dereceleri bir grupta izin verilen içerik ve davranış türlerini belirler">
<combo_item name="select_mature">
- Erişkinlik seviyesini seçin -
</combo_item>
diff --git a/indra/newview/skins/default/xui/tr/panel_region_access.xml b/indra/newview/skins/default/xui/tr/panel_region_access.xml
index 57e721bc04..81653b1e54 100644
--- a/indra/newview/skins/default/xui/tr/panel_region_access.xml
+++ b/indra/newview/skins/default/xui/tr/panel_region_access.xml
@@ -14,6 +14,7 @@
<panel label="İZİN VERİLEN" name="allowed_panel">
<panel label="top_panel" name="allowed_search_panel">
<filter_editor label="İzin verilen aracıları ara" name="allowed_search_input"/>
+ <button label="Kopyala" name="copy_allowed_list_btn"/>
</panel>
<text name="allow_resident_label">
Her zaman izin verilen:
@@ -27,6 +28,7 @@
<panel label="İZİN VERİLEN GRUPLAR" name="allowed_groups_panel">
<panel label="top_panel" name="allowed_group_search_panel">
<filter_editor label="İzin verilen grupları ara" name="allowed_group_search_input"/>
+ <button label="Kopyala" name="copy_allowed_group_list_btn"/>
</panel>
<text name="allow_group_label">
Her zaman izin verilen gruplar:
@@ -40,6 +42,7 @@
<panel label="ENGELLENEN" name="banned_panel">
<panel label="top_panel" name="banned_search_panel">
<filter_editor label="Engellenen aracıları ara" name="banned_search_input"/>
+ <button label="Kopyala" name="copy_banned_list_btn"/>
</panel>
<text name="ban_resident_label">
Her zaman engellenen:
diff --git a/indra/newview/skins/default/xui/tr/strings.xml b/indra/newview/skins/default/xui/tr/strings.xml
index dddf2365ab..27f3c4d4d9 100644
--- a/indra/newview/skins/default/xui/tr/strings.xml
+++ b/indra/newview/skins/default/xui/tr/strings.xml
@@ -76,6 +76,9 @@ Gelişmiş Aydınlatma Modeli: [GPU_SHADERS]
Doku belleği: [TEXTURE_MEMORY]MB
VFS (önbellek) oluşturma saati: [VFS_TIME]
</string>
+ <string name="AboutOSXHiDPI">
+ HiDPI görüntü modu: [HIDPI]
+ </string>
<string name="AboutLibs">
J2C Kod Çözücü Sürümü: [J2C_VERSION]
Ses Sürücüsü Sürümü: [AUDIO_DRIVER_VERSION]
@@ -1475,6 +1478,15 @@ http://secondlife.com/support adresini ziyaret edin.
<string name="MarketplaceURL_LearnMore">
https://marketplace.[MARKETPLACE_DOMAIN_NAME]/learn_more
</string>
+ <string name="InventoryPlayAnimationTooltip">
+ Pencereyi Oyun seçenekleri ile birlikte açın.
+ </string>
+ <string name="InventoryPlayGestureTooltip">
+ Seçilen mimiği SL dünyasında uygulayın.
+ </string>
+ <string name="InventoryPlaySoundTooltip">
+ Pencereyi Oyun seçenekleri ile birlikte açın.
+ </string>
<string name="InventoryOutboxNotMerchantTitle">
Pazaryerinde herkes öğe satabilir.
</string>
@@ -5406,9 +5418,6 @@ Düzenleyici yolunu çift tırnakla çevrelemeyi deneyin.
<string name="Command_Destinations_Label">
Hedef Konum
</string>
- <string name="Command_Facebook_Label">
- Facebook
- </string>
<string name="Command_Flickr_Label">
Flickr
</string>
@@ -5502,9 +5511,6 @@ Düzenleyici yolunu çift tırnakla çevrelemeyi deneyin.
<string name="Command_Destinations_Tooltip">
İlgilendiğiniz hedef konumlar
</string>
- <string name="Command_Facebook_Tooltip">
- Facebook&apos;ta Yayınla
- </string>
<string name="Command_Flickr_Tooltip">
Flickr&apos;a yükle
</string>
diff --git a/indra/newview/skins/default/xui/zh/floater_about_land.xml b/indra/newview/skins/default/xui/zh/floater_about_land.xml
index badd00bc6d..1164722abf 100644
--- a/indra/newview/skins/default/xui/zh/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/zh/floater_about_land.xml
@@ -9,6 +9,12 @@
<floater.string name="maturity_icon_adult">
&quot;Parcel_R_Dark&quot;
</floater.string>
+ <floater.string name="Hours">
+ [HOURS]小時
+ </floater.string>
+ <floater.string name="Hour">
+ 小時
+ </floater.string>
<floater.string name="Minutes">
[MINUTES] 分鐘
</floater.string>
@@ -21,6 +27,9 @@
<floater.string name="Remaining">
剩餘時間
</floater.string>
+ <floater.string name="Always">
+ 永遠
+ </floater.string>
<tab_container name="landtab">
<panel label="一般" name="land_general_panel">
<panel.string name="new users only">
@@ -316,18 +325,18 @@
<text name="allow_label2">
建造:
</text>
- <check_box label="任何人" name="edit objects check"/>
- <check_box label="群組" name="edit group objects check"/>
+ <check_box label="任何人" name="edit objects check" tool_tip="如果勾選,居民可在你土地上創建並產生物件。"/>
+ <check_box label="群組" name="edit group objects check" tool_tip="如果勾選,地段群組成員可以在你土地上創建並產生物件。"/>
<text name="allow_label3">
物件進入:
</text>
- <check_box label="任何人" name="all object entry check"/>
- <check_box label="群組" name="group object entry check"/>
+ <check_box label="任何人" name="all object entry check" tool_tip="如果勾選,居民可以從別的地段移動物件到本地段。"/>
+ <check_box label="群組" name="group object entry check" tool_tip="如果勾選,地段群組成員可以從別的地段移動物件到本地段。"/>
<text name="allow_label4">
執行腳本:
</text>
- <check_box label="任何人" name="check other scripts"/>
- <check_box label="群組" name="check group scripts"/>
+ <check_box label="任何人" name="check other scripts" tool_tip="如果勾選,居民可以在你的地段執行腳本,包括附件。"/>
+ <check_box label="群組" name="check group scripts" tool_tip="如果勾選,地段群組成員可以在你的地段執行腳本,包括附件。"/>
<check_box label="安全(無傷害)" name="check safe" tool_tip="若勾選,將把土地設為安全,禁絕傷害性的戰鬥。 若未勾選,則允許傷害性的戰鬥。"/>
<check_box label="禁止推撞" name="PushRestrictCheck" tool_tip="禁止使用腳本推撞。 勾選這選項可有效防止你土地上出現滋事行為。"/>
<check_box label="將地點刊登顯示在搜尋中(L$30 / 每週)" name="ShowDirectoryCheck" tool_tip="讓其他人可以在搜尋結果中看到這塊地段"/>
@@ -351,7 +360,7 @@
快照:
</text>
<texture_picker name="snapshot_ctrl" tool_tip="點按以挑選圖片"/>
- <text name="allow_label5">
+ <text name="allow_see_label">
其他地段的化身可以看見本地段裡的化身,並與之交談
</text>
<check_box label="察看化身" name="SeeAvatarsCheck" tool_tip="允許其他地段的化身看到本地段包括你在內的化身,並可互相交談。"/>
@@ -454,9 +463,12 @@
</panel>
<panel name="Banned_layout_panel">
<text label="禁止" name="BanCheck">
- 永久封鎖([COUNT],最多[MAX])
+ 被封鎖([COUNT],最多[MAX])
</text>
- <name_list name="BannedList" tool_tip="(已列入 [LISTED],最多可列 [MAX])"/>
+ <name_list name="BannedList" tool_tip="(已列入 [LISTED],最多可列 [MAX])">
+ <columns label="名稱" name="name"/>
+ <columns label="歷時" name="duration"/>
+ </name_list>
<button label="添加" name="add_banned"/>
<button label="移除" label_selected="移除" name="remove_banned"/>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/floater_ban_duration.xml b/indra/newview/skins/default/xui/zh/floater_ban_duration.xml
new file mode 100644
index 0000000000..d8a3e8c8a0
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/floater_ban_duration.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="ban_duration" title="封鎖時間長度">
+ <text name="duration_textbox">
+ 封鎖時間長度:
+ </text>
+ <radio_group name="ban_duration_radio">
+ <radio_item label="永遠" name="always_radio">
+ 永遠
+ </radio_item>
+ <radio_item label="暫時性" name="temporary_radio">
+ 暫時性
+ </radio_item>
+ </radio_group>
+ <text name="hours_textbox">
+ 小時
+ </text>
+ <button label="確定" name="ok_btn"/>
+ <button label="取消" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_gesture.xml b/indra/newview/skins/default/xui/zh/floater_gesture.xml
index e7b1ed1de3..592b410d1c 100644
--- a/indra/newview/skins/default/xui/zh/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/zh/floater_gesture.xml
@@ -20,7 +20,7 @@
<button name="activate_btn" tool_tip="啟動/停止所選姿勢"/>
<button name="del_btn" tool_tip="刪除這個姿勢"/>
</panel>
- <button label="編輯" name="edit_btn"/>
- <button label="播放" name="play_btn"/>
+ <button label="編輯" name="edit_btn" tool_tip="開啓視窗以便編輯所選姿勢。"/>
+ <button label="播放" name="play_btn" tool_tip="在虛擬世界裡執行所選姿勢。"/>
<button label="停止" name="stop_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/zh/floater_preferences_graphics_advanced.xml
index 7d8160a0f0..7b127acd71 100644
--- a/indra/newview/skins/default/xui/zh/floater_preferences_graphics_advanced.xml
+++ b/indra/newview/skins/default/xui/zh/floater_preferences_graphics_advanced.xml
@@ -43,6 +43,7 @@
<check_box label="各向異性過濾(若啟用會變慢)" name="ani"/>
<check_box initial_value="true" label="啟用 OpenGL 頂點緩衝物件(VBO)" name="vbo" tool_tip="在較新硬體上啟用,可提升效能。 但是,較舊硬體的 VBO 實作不佳,若啟用可能導致當機。"/>
<check_box initial_value="true" label="啟用材質壓縮(須重新啟動)" name="texture compression" tool_tip="在影片記憶體中壓縮材質,讓高解析度材質可以載入,但色彩品質稍差。"/>
+ <check_box initial_value="true" label="啟用HiDPI顯示支援(須重新啟動)" name="use HiDPI" tool_tip="啓用OpenGL高解析度繪圖。"/>
<text name="antialiasing label">
消除鋸齒:
</text>
diff --git a/indra/newview/skins/default/xui/zh/floater_preview_notecard.xml b/indra/newview/skins/default/xui/zh/floater_preview_notecard.xml
index 9447939801..f6b163dcd6 100644
--- a/indra/newview/skins/default/xui/zh/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/zh/floater_preview_notecard.xml
@@ -15,6 +15,7 @@
<text_editor name="Notecard Editor">
載入中...
</text_editor>
+ <button label="編輯…" label_selected="編輯" name="Edit"/>
<button label="儲存" label_selected="儲存" name="Save"/>
<button label="刪除" label_selected="刪除" name="Delete"/>
</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_report_abuse.xml b/indra/newview/skins/default/xui/zh/floater_report_abuse.xml
index 347b40e675..2dfcfe6168 100644
--- a/indra/newview/skins/default/xui/zh/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/zh/floater_report_abuse.xml
@@ -67,7 +67,7 @@
<combo_box.item label="土地 &gt; 侵佔 &gt; 物件或材質" name="Land__Encroachment__Objects_textures"/>
<combo_box.item label="土地 &gt; 侵佔 &gt; 粒子" name="Land__Encroachment__Particles"/>
<combo_box.item label="土地 &gt; 侵佔 &gt; 樹種 / 植物" name="Land__Encroachment__Trees_plants"/>
- <combo_box.item label="違反遊戲規則" name="Wagering_gambling"/>
+ <combo_box.item label="違反技術遊戲規則" name="Wagering_gambling"/>
<combo_box.item label="其他" name="Other"/>
</combo_box>
<text name="abuser_name_title">
diff --git a/indra/newview/skins/default/xui/zh/panel_group_general.xml b/indra/newview/skins/default/xui/zh/panel_group_general.xml
index 2b16b61dd1..de81a26fed 100644
--- a/indra/newview/skins/default/xui/zh/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/zh/panel_group_general.xml
@@ -45,7 +45,7 @@
<check_box label="任何人都可以加入" name="open_enrollement" tool_tip="設定這個群組是否允許新成員未受邀請自行加入。"/>
<check_box label="加入費用" name="check_enrollment_fee" tool_tip="設定是否要徵收群組加入費"/>
<spinner label="L$" name="spin_enrollment_fee" tool_tip="若勾選加入費,新成員必須支付這筆費用才能加入群組。"/>
- <combo_box name="group_mature_check" tool_tip="設定你的群組是否含有被訂為適度成人分級的資訊">
+ <combo_box name="group_mature_check" tool_tip="內容分級設定群組裡允許的內容類型和行爲">
<combo_item name="select_mature">
- 選擇內容分級 -
</combo_item>
diff --git a/indra/newview/skins/default/xui/zh/panel_region_access.xml b/indra/newview/skins/default/xui/zh/panel_region_access.xml
index 7842d26321..04c67da333 100644
--- a/indra/newview/skins/default/xui/zh/panel_region_access.xml
+++ b/indra/newview/skins/default/xui/zh/panel_region_access.xml
@@ -14,6 +14,7 @@
<panel label="獲准" name="allowed_panel">
<panel label="top_panel" name="allowed_search_panel">
<filter_editor label="搜尋獲准的用戶" name="allowed_search_input"/>
+ <button label="複製" name="copy_allowed_list_btn"/>
</panel>
<text name="allow_resident_label">
永遠准許:
@@ -27,6 +28,7 @@
<panel label="准許的群組" name="allowed_groups_panel">
<panel label="top_panel" name="allowed_group_search_panel">
<filter_editor label="搜尋獲准的群組" name="allowed_group_search_input"/>
+ <button label="複製" name="copy_allowed_group_list_btn"/>
</panel>
<text name="allow_group_label">
永遠准許的群組:
@@ -40,6 +42,7 @@
<panel label="禁入的" name="banned_panel">
<panel label="top_panel" name="banned_search_panel">
<filter_editor label="搜尋禁入的用戶" name="banned_search_input"/>
+ <button label="複製" name="copy_banned_list_btn"/>
</panel>
<text name="ban_resident_label">
永遠禁入:
diff --git a/indra/newview/skins/default/xui/zh/strings.xml b/indra/newview/skins/default/xui/zh/strings.xml
index d14eac88ef..bbbaf57501 100644
--- a/indra/newview/skins/default/xui/zh/strings.xml
+++ b/indra/newview/skins/default/xui/zh/strings.xml
@@ -76,6 +76,9 @@
材質記憶體:[TEXTURE_MEMORY]MB
VFS(快取)建立時間:[VFS_TIME]
</string>
+ <string name="AboutOSXHiDPI">
+ HiDPI顯示模式:[HIDPI]
+ </string>
<string name="AboutLibs">
J2C 解碼器版本: [J2C_VERSION]
音效驅動程式版本: [AUDIO_DRIVER_VERSION]
@@ -1471,6 +1474,15 @@ http://secondlife.com/support 求助解決問題。
<string name="MarketplaceURL_LearnMore">
https://marketplace.[MARKETPLACE_DOMAIN_NAME]/learn_more
</string>
+ <string name="InventoryPlayAnimationTooltip">
+ 開啟「Play選項」視窗。
+ </string>
+ <string name="InventoryPlayGestureTooltip">
+ 在虛擬世界裡執行所選姿勢。
+ </string>
+ <string name="InventoryPlaySoundTooltip">
+ 開啟「Play選項」視窗。
+ </string>
<string name="InventoryOutboxNotMerchantTitle">
任何人都可在第二人生購物市集出售物品。
</string>
@@ -5404,9 +5416,6 @@ http://secondlife.com/support 求助解決問題。
<string name="Command_Destinations_Label">
目的地
</string>
- <string name="Command_Facebook_Label">
- 臉書
- </string>
<string name="Command_Flickr_Label">
Flickr
</string>
@@ -5500,9 +5509,6 @@ http://secondlife.com/support 求助解決問題。
<string name="Command_Destinations_Tooltip">
你可能感興趣的目的地
</string>
- <string name="Command_Facebook_Tooltip">
- 發佈到臉書
- </string>
<string name="Command_Flickr_Tooltip">
上傳到 Flickr
</string>
diff --git a/indra/newview/tests/llxmlrpclistener_test.cpp b/indra/newview/tests/llxmlrpclistener_test.cpp
index 6e9756e7d5..dbaae7280c 100644
--- a/indra/newview/tests/llxmlrpclistener_test.cpp
+++ b/indra/newview/tests/llxmlrpclistener_test.cpp
@@ -88,15 +88,9 @@ namespace tut
WrapLLErrs capture;
LLSD request;
request["uri"] = uri;
- std::string threw;
- try
- {
- pumps.obtain("LLXMLRPCTransaction").post(request);
- }
- catch (const WrapLLErrs::FatalException& e)
- {
- threw = e.what();
- }
+ std::string threw = capture.catch_llerrs([&pumps, &request](){
+ pumps.obtain("LLXMLRPCTransaction").post(request);
+ });
ensure_contains("threw exception", threw, "missing params");
ensure_contains("identified missing", threw, "method");
ensure_contains("identified missing", threw, "reply");
@@ -113,15 +107,9 @@ namespace tut
request["reply"] = "reply";
LLSD& params(request["params"]);
params["who"]["specifically"] = "world"; // LLXMLRPCListener only handles scalar params
- std::string threw;
- try
- {
- pumps.obtain("LLXMLRPCTransaction").post(request);
- }
- catch (const WrapLLErrs::FatalException& e)
- {
- threw = e.what();
- }
+ std::string threw = capture.catch_llerrs([&pumps, &request](){
+ pumps.obtain("LLXMLRPCTransaction").post(request);
+ });
ensure_contains("threw exception", threw, "unknown type");
}
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index fcb97ded8f..a4cda0ba78 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -46,7 +46,7 @@ viewer_dir = os.path.dirname(__file__)
# Put it FIRST because some of our build hosts have an ancient install of
# indra.util.llmanifest under their system Python!
sys.path.insert(0, os.path.join(viewer_dir, os.pardir, "lib", "python"))
-from indra.util.llmanifest import LLManifest, main, path_ancestors, CHANNEL_VENDOR_BASE, RELEASE_CHANNEL, ManifestError
+from indra.util.llmanifest import LLManifest, main, path_ancestors, CHANNEL_VENDOR_BASE, RELEASE_CHANNEL, ManifestError, MissingError
from llbase import llsd
class ViewerManifest(LLManifest):
@@ -145,13 +145,10 @@ class ViewerManifest(LLManifest):
with self.prefix(src_dst="skins"):
# include the entire textures directory recursively
with self.prefix(src_dst="*/textures"):
- self.path("*/*.tga")
- self.path("*/*.j2c")
self.path("*/*.jpg")
self.path("*/*.png")
self.path("*.tga")
self.path("*.j2c")
- self.path("*.jpg")
self.path("*.png")
self.path("textures.xml")
self.path("*/xui/*/*.xml")
@@ -171,14 +168,6 @@ class ViewerManifest(LLManifest):
self.path("*/*/*.gif")
- # local_assets dir (for pre-cached textures)
- with self.prefix(src_dst="local_assets"):
- self.path("*.j2c")
- self.path("*.tga")
-
- # File in the newview/ directory
- self.path("gpu_table.txt")
-
#build_data.json. Standard with exception handling is fine. If we can't open a new file for writing, we have worse problems
#platform is computed above with other arg parsing
build_data_dict = {"Type":"viewer","Version":'.'.join(self.args['version']),
@@ -517,17 +506,6 @@ class WindowsManifest(ViewerManifest):
with self.prefix(src=os.path.join(self.args['build'], os.pardir,
'sharedlibs', self.args['configuration'])):
- # Get llcommon and deps. If missing assume static linkage and continue.
- try:
- self.path('llcommon.dll')
- self.path('libapr-1.dll')
- self.path('libaprutil-1.dll')
- self.path('libapriconv-1.dll')
-
- except RuntimeError as err:
- print err.message
- print "Skipping llcommon.dll (assuming llcommon was linked statically)"
-
# Mesh 3rd party libs needed for auto LOD and collada reading
try:
self.path("glod.dll")
@@ -552,24 +530,21 @@ class WindowsManifest(ViewerManifest):
if self.args['configuration'].lower() == 'debug':
self.path("msvcr120d.dll")
self.path("msvcp120d.dll")
- self.path("msvcr100d.dll")
- self.path("msvcp100d.dll")
else:
self.path("msvcr120.dll")
self.path("msvcp120.dll")
- self.path("msvcr100.dll")
- self.path("msvcp100.dll")
- # Vivox runtimes
- self.path("SLVoice.exe")
+ # SLVoice executable
+ with self.prefix(src=os.path.join(pkgdir, 'bin', 'release')):
+ self.path("SLVoice.exe")
+
+ # Vivox libraries
if (self.address_size == 64):
self.path("vivoxsdk_x64.dll")
self.path("ortp_x64.dll")
else:
self.path("vivoxsdk.dll")
self.path("ortp.dll")
- self.path("libsndfile-1.dll")
- self.path("vivoxoal.dll")
# Security
self.path("ssleay32.dll")
@@ -592,15 +567,6 @@ class WindowsManifest(ViewerManifest):
self.path("BugSplat.dll")
self.path("BugSplatRc.dll")
- # For google-perftools tcmalloc allocator.
- try:
- if self.args['configuration'].lower() == 'debug':
- self.path('libtcmalloc_minimal-debug.dll')
- else:
- self.path('libtcmalloc_minimal.dll')
- except:
- print "Skipping libtcmalloc_minimal.dll"
-
self.path(src="licenses-win32.txt", dst="licenses.txt")
self.path("featuretable.txt")
@@ -990,7 +956,7 @@ class DarwinManifest(ViewerManifest):
with self.prefix(src=relpkgdir, dst=""):
self.path("libndofdev.dylib")
- self.path("libhunspell-1.3.0.dylib")
+ self.path("libhunspell-1.3.a")
with self.prefix(src_dst="cursors_mac"):
self.path("*.tif")
@@ -1037,11 +1003,15 @@ class DarwinManifest(ViewerManifest):
# (source, dest) pair to self.file_list for every expanded
# file processed. Remember its size before the call.
oldlen = len(self.file_list)
- self.path(src, dst)
- # The dest appended to self.file_list has been prepended
- # with self.get_dst_prefix(). Strip it off again.
- added = [os.path.relpath(d, self.get_dst_prefix())
- for s, d in self.file_list[oldlen:]]
+ try:
+ self.path(src, dst)
+ # The dest appended to self.file_list has been prepended
+ # with self.get_dst_prefix(). Strip it off again.
+ added = [os.path.relpath(d, self.get_dst_prefix())
+ for s, d in self.file_list[oldlen:]]
+ except MissingError as err:
+ print >> sys.stderr, "Warning: "+err.msg
+ added = []
if not added:
print "Skipping %s" % dst
return added
@@ -1051,18 +1021,10 @@ class DarwinManifest(ViewerManifest):
# symlink from sub-app/Contents/Resources to the real .dylib.
# Need to get the llcommon dll from any of the build directories as well.
libfile_parent = self.get_dst_prefix()
- libfile = "libllcommon.dylib"
- dylibs = path_optional(self.find_existing_file(os.path.join(os.pardir,
- "llcommon",
- self.args['configuration'],
- libfile),
- os.path.join(relpkgdir, libfile)),
- dst=libfile)
-
+ dylibs=[]
for libfile in (
"libapr-1.0.dylib",
"libaprutil-1.0.dylib",
- "libcollada14dom.dylib",
"libexpat.1.dylib",
"libexception_handler.dylib",
"libGLOD.dylib",
@@ -1073,14 +1035,14 @@ class DarwinManifest(ViewerManifest):
):
dylibs += path_optional(os.path.join(relpkgdir, libfile), libfile)
- # SLVoice and vivox lols, no symlinks needed
+ # SLVoice executable
+ with self.prefix(src=os.path.join(pkgdir, 'bin', 'release')):
+ self.path("SLVoice")
+
+ # Vivox libraries
for libfile in (
'libortp.dylib',
- 'libsndfile.dylib',
- 'libvivoxoal.dylib',
'libvivoxsdk.dylib',
- 'libvivoxplatform.dylib',
- 'SLVoice',
):
self.path2basename(relpkgdir, libfile)
@@ -1575,7 +1537,6 @@ class Linux_i686_Manifest(LinuxManifest):
self.path("libsndfile.so.1")
#self.path("libvivoxoal.so.1") # no - we'll re-use the viewer's own OpenAL lib
self.path("libvivoxsdk.so")
- self.path("libvivoxplatform.so")
self.strip_binaries()
@@ -1596,4 +1557,9 @@ if __name__ == "__main__":
dict(name='bugsplat', description="""BugSplat database to which to post crashes,
if BugSplat crash reporting is desired""", default=''),
]
- main(extra=extra_arguments)
+ try:
+ main(extra=extra_arguments)
+ except (ManifestError, MissingError) as err:
+ sys.exit("\nviewer_manifest.py failed: "+err.msg)
+ except:
+ raise