diff options
| author | Erik Kundiman <erik@megapahit.org> | 2026-09-22 14:47:19 +0800 |
|---|---|---|
| committer | Erik Kundiman <erik@megapahit.org> | 2026-09-22 14:47:19 +0800 |
| commit | 8557e9659ca5b71aabcbb21758be03a959c2098d (patch) | |
| tree | e9c2cb659b646169e8d0c502b0ff873fec05ac02 /indra | |
| parent | 235a9d87ecf0447bd4aca3287548c715f1ada2ad (diff) | |
| parent | f767219366b8dbaeea95a22bd9953a587f473298 (diff) | |
Merge tag 'Second_Life_Release#f7672193-26.4' into 26.4
Diffstat (limited to 'indra')
48 files changed, 173 insertions, 919 deletions
diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index c49d5ff7d3..a029fea992 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -3289,7 +3289,7 @@ S32 sculpt_sides(F32 detail) } } -static bool validate_sculpt_geometry(const LLVolume* volume) +static bool validate_sculpt_geometry(const LLVolume* volume, bool validate_area) { if (!volume || volume->getNumVolumeFaces() == 0) { @@ -3365,7 +3365,7 @@ static bool validate_sculpt_geometry(const LLVolume* volume) F32 area_ratio = total_triangle_area / bounding_surface; constexpr F32 MAX_AREA_TO_AREA_RATIO = 16.0f; - if (area_ratio > MAX_AREA_TO_AREA_RATIO) + if (validate_area && area_ratio > MAX_AREA_TO_AREA_RATIO) { LL_DEBUGS("LLVOLUME") << "Sculpt rejected: excessive triangle area." << " Face index: " << face_idx @@ -3417,7 +3417,7 @@ static void sculpt_calc_mesh_resolution(U16 width, U16 height, U8 type, F32 deta } // sculpt replaces generate() for sculpted surfaces -void LLVolume::sculpt(U16 sculpt_width, U16 sculpt_height, S8 sculpt_components, const U8* sculpt_data, S32 sculpt_level, bool visible_placeholder) +void LLVolume::sculpt(U16 sculpt_width, U16 sculpt_height, S8 sculpt_components, const U8* sculpt_data, S32 sculpt_level, bool visible_placeholder, bool validate_area) { U8 sculpt_type = mParams.getSculptType(); @@ -3528,7 +3528,7 @@ void LLVolume::sculpt(U16 sculpt_width, U16 sculpt_height, S8 sculpt_components, // Todo: can this be backed into createVolumeFaces? // Or calculated without having to call createVolumeFaces first? // Todo 2: should the same be done for meshes? - valid_geometry = validate_sculpt_geometry(this); + valid_geometry = validate_sculpt_geometry(this, validate_area); mSculptValidationCache[sculpt_level] = valid_geometry ? LLSculptValidationState::Valid : LLSculptValidationState::Invalid; if (!valid_geometry) diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index 86a7bf0e6a..40e6f8e220 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -1095,7 +1095,7 @@ public: U32 mFaceMask; // bit array of which faces exist in this volume LLVector3 mLODScaleBias; // vector for biasing LOD based on scale - void sculpt(U16 sculpt_width, U16 sculpt_height, S8 sculpt_components, const U8* sculpt_data, S32 sculpt_level, bool visible_placeholder); + void sculpt(U16 sculpt_width, U16 sculpt_height, S8 sculpt_components, const U8* sculpt_data, S32 sculpt_level, bool visible_placeholder, bool validate_area); void copyVolumeFaces(const LLVolume* volume); void copyFacesTo(std::vector<LLVolumeFace> &faces) const; void copyFacesFrom(const std::vector<LLVolumeFace> &faces); diff --git a/indra/llui/llfolderviewitem.cpp b/indra/llui/llfolderviewitem.cpp index c8ef421677..7c51574fc2 100644 --- a/indra/llui/llfolderviewitem.cpp +++ b/indra/llui/llfolderviewitem.cpp @@ -234,7 +234,11 @@ LLFolderViewItem::LLFolderViewItem(const LLFolderViewItem::Params& p) // Destroys the object LLFolderViewItem::~LLFolderViewItem() { - mViewModelItem = NULL; + if (mViewModelItem) + { + mViewModelItem->setFolderViewItem(nullptr); + mViewModelItem = nullptr; + } gFocusMgr.removeKeyboardFocusWithoutCallback(this); } @@ -356,7 +360,12 @@ bool LLFolderViewItem::isPotentiallyVisible(S32 filter_generation) void LLFolderViewItem::refresh() { - LLFolderViewModelItem& vmi = *getViewModelItem(); + LLFolderViewModelItem* vmi_ptr = getViewModelItem(); + if (!vmi_ptr) + { + return; + } + LLFolderViewModelItem& vmi = *vmi_ptr; mLabel = utf8str_to_wstring(vmi.getDisplayName()); mLabelFontBuffer.reset(); @@ -387,6 +396,10 @@ void LLFolderViewItem::refresh() void LLFolderViewItem::refreshSuffix() { LLFolderViewModelItem const* vmi = getViewModelItem(); + if (!vmi) + { + return; + } // icons are slightly expensive to get, can be optimized // see LLInventoryIcon::getIcon() diff --git a/indra/llwebrtc/llwebrtc.cpp b/indra/llwebrtc/llwebrtc.cpp index 4b98944d10..15eee9b39c 100644 --- a/indra/llwebrtc/llwebrtc.cpp +++ b/indra/llwebrtc/llwebrtc.cpp @@ -496,7 +496,7 @@ bool LLWebRTCImpl::terminate() { for (auto& connection : connections) { - connection->closeOnSignalingThread(); + connection->closeOnSignalingThread(true); } // Destroy the connections here, on the signaling thread, while // it's still running. @@ -792,8 +792,14 @@ void LLWebRTCImpl::workerDeployDevices() // Stop first so the start helpers (which no-op when already running) will // re-select the now-current device. - mDeviceModule->StopPlayout(); - mDeviceModule->ForceStopRecording(); + if (mDeviceModule->Playing()) + { + mDeviceModule->StopPlayout(); + } + if (mDeviceModule->Recording()) + { + mDeviceModule->ForceStopRecording(); + } workerStartRecording(); workerStartPlayout(); @@ -1085,7 +1091,10 @@ void LLWebRTCImpl::freePeerConnection(LLWebRTCPeerConnectionInterface* peer_conn { if (mDeviceModule) { - mDeviceModule->StopPlayout(); + if (mDeviceModule->Playing()) + { + mDeviceModule->StopPlayout(); + } if (!mVoiceEnabled) { mDeviceModule->ForceStopRecording(); @@ -1161,13 +1170,13 @@ void LLWebRTCPeerConnectionImpl::terminate() mWebRTCImpl->PostSignalingTask( [self]() { - self->closeOnSignalingThread(); + self->closeOnSignalingThread(false); self->mPendingJobs--; }); } // Signaling thread only. -void LLWebRTCPeerConnectionImpl::closeOnSignalingThread() +void LLWebRTCPeerConnectionImpl::closeOnSignalingThread(bool webrtc_terminate) { // Stop issuing stats requests; one may already be in flight, and // Close() below will flush it. @@ -1218,13 +1227,16 @@ void LLWebRTCPeerConnectionImpl::closeOnSignalingThread() observer->OnPeerConnectionClosed(); } - // Nothing may call back into the viewer past this point. Connections - // closed while the viewer is still running unset themselves as observers - // when they're destroyed, but any that are left for llwebrtc::terminate() - // to close deliberately don't -- they're torn down as soon as it returns, - // so a late callback would be reaching into freed memory. - mSignalingObserverList.clear(); - mDataObserverList.clear(); + if (webrtc_terminate) + { + // Nothing may call back into the viewer past this point. Connections + // closed while the viewer is still running unset themselves as observers + // when they're destroyed, but any that are left for llwebrtc::terminate() + // to close deliberately don't -- they're torn down as soon as it returns, + // so a late callback would be reaching into freed memory. + mSignalingObserverList.clear(); + mDataObserverList.clear(); + } } void LLWebRTCPeerConnectionImpl::setSignalingObserver(LLWebRTCSignalingObserver *observer) { mSignalingObserverList.emplace_back(observer); } diff --git a/indra/llwebrtc/llwebrtc_impl.h b/indra/llwebrtc/llwebrtc_impl.h index f78b129da5..8bf72890cf 100644 --- a/indra/llwebrtc/llwebrtc_impl.h +++ b/indra/llwebrtc/llwebrtc_impl.h @@ -610,10 +610,13 @@ class LLWebRTCPeerConnectionImpl : public LLWebRTCPeerConnectionInterface, void init(LLWebRTCImpl * webrtc_impl); // Posts closeOnSignalingThread() and returns immediately. void terminate(); + // The actual close. Signaling thread only. Callable directly (via a // BlockingCall) when the caller needs the connection to be fully closed // before it continues -- see LLWebRTCImpl::terminate(). - void closeOnSignalingThread(); + // webrtc_terminate indicates we're shutting down the webrtc library, + // if not, we'll be reusing the peer connection for a reconnection + void closeOnSignalingThread(bool webrtc_terminate); virtual void AddRef() const override = 0; virtual webrtc::RefCountReleaseStatus Release() const override = 0; diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 9489d724ac..f1e49799cb 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -195,7 +195,6 @@ set(viewer_SOURCE_FILES llfloaterabout.cpp llfloateravatarwelcomepack.cpp llfloaterbvhpreview.cpp - llfloateraddpaymentmethod.cpp llfloaterauction.cpp llfloaterautoreplacesettings.cpp llfloateravatarpicker.cpp @@ -888,7 +887,6 @@ set(viewer_HEADER_FILES llfloaterabout.h llfloateravatarwelcomepack.h llfloaterbvhpreview.h - llfloateraddpaymentmethod.h llfloaterauction.h llfloaterautoreplacesettings.h llfloateravatarpicker.h diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 3b067b7a61..12da2c67a7 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -1216,6 +1216,28 @@ <key>Value</key> <string>https://accounts.secondlife.com/packs/floater?lang=[LANGUAGE]&shortfall=[SHORTFALL]</string> </map> + <key>PaymentMethodURL</key> + <map> + <key>Comment</key> + <string>URL for adding a payment method</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>String</string> + <key>Value</key> + <string>https://secondlife.com/my/lindex/buy.php?associate_for_viewer=1</string> + </map> + <key>PaymentMethodStagingURL</key> + <map> + <key>Comment</key> + <string>URL for adding a payment method on the Damballah</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>String</string> + <key>Value</key> + <string>https://secondlife-staging.com/my/lindex/buy.php?associate_for_viewer=1</string> + </map> <key>EnableButtonFlashing</key> <map> <key>Comment</key> @@ -13642,7 +13664,7 @@ <key>Type</key> <string>Boolean</string> <key>Value</key> - <integer>1</integer> + <integer>0</integer> </map> <key>PreferredBrowserBehavior</key> <map> @@ -15403,17 +15425,6 @@ <key>Value</key> <integer>180</integer> </map> - <key>OSHibernationMode</key> - <map> - <key>Comment</key> - <string>Whether to prevent OS from hibernating. 0 - can hibernate; 1 - can't hibernate, can turn screen off; 2 - can't hibernate, can't turn screen off </string> - <key>Persist</key> - <integer>1</integer> - <key>Type</key> - <string>S32</string> - <key>Value</key> - <integer>0</integer> - </map> <key>HeightUnits</key> <map> <key>Comment</key> @@ -16811,6 +16822,17 @@ <key>Value</key> <integer>1000</integer> </map> + <key>ValidateSculptyAreaRatio</key> + <map> + <key>Comment</key> + <string>Version information generated by running the viewer</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> <key>VersionChannelName</key> <map> <key>Comment</key> diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index a521170c61..b29d1706c4 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -583,6 +583,9 @@ void LLAgent::setFirstLogin(bool b) { setFeatureVersion(UI_FEATURE_VERSION, UI_FEATURE_FLAGS); } + + // Shared environment on teleport should only be enabled by default for new users; + gSavedSettings.setBOOL("SwitchToSharedEnvAfterTeleport", true); } } @@ -1566,8 +1569,6 @@ void LLAgent::setAFK() setControlFlags(AGENT_CONTROL_AWAY | AGENT_CONTROL_STOP); gAwayTimer.start(); } - - LLAppViewer::instance()->setPermitOSHibernation(true); } //----------------------------------------------------------------------------- @@ -1586,13 +1587,6 @@ void LLAgent::clearAFK() sendAnimationRequest(ANIM_AGENT_AWAY, ANIM_REQUEST_STOP); clearControlFlags(AGENT_CONTROL_AWAY); } - - if (isAgentAvatarValid()) - { - // Only set this if agent is inworld, login screen - // shouldn't prevent hibernation. - LLAppViewer::instance()->setPermitOSHibernation(false); - } } //----------------------------------------------------------------------------- diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 8b99657618..d48ccdb9ea 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -667,12 +667,6 @@ bool LLAppViewer::sendURLToOtherInstance(const std::string& url) return false; } -//virtual -void LLAppViewer::setOSHibernationMode(eHibernationMode mode) -{ - // See OS specific files -} - //---------------------------------------------------------------------------- // LLAppViewer definition @@ -6058,29 +6052,6 @@ void LLAppViewer::outOfMemorySoftQuit() } } -void LLAppViewer::setPermitOSHibernation(bool permit) -{ - if (permit) - { - if (mCurrentHibernationMode != LL_HIBERNATE_MODE_DEFAULT) - { - // Will call OS specific code to let OS hibernate when idle - setOSHibernationMode(LL_HIBERNATE_MODE_DEFAULT); - mCurrentHibernationMode = LL_HIBERNATE_MODE_DEFAULT; - } - } - else - { - static LLCachedControl<S32> os_hibernation_mode(gSavedSettings, "OSHibernationMode", 0); - eHibernationMode mode = static_cast<eHibernationMode>(os_hibernation_mode()); - if (mode != LL_HIBERNATE_MODE_DEFAULT && mCurrentHibernationMode != mode) - { - setOSHibernationMode(mode); - mCurrentHibernationMode = mode; - } - } -} - void LLAppViewer::idleNameCache() { // Neither old nor new name cache can function before agent has a region @@ -6288,9 +6259,6 @@ void LLAppViewer::disconnectViewer() // Pass the connection state to LLUrlEntryParcel not to attempt // parcel info requests while disconnected. LLUrlEntryParcel::setDisconnected(gDisconnected); - - // Restore default OS hibernation mode - setPermitOSHibernation(true); } void LLAppViewer::forceErrorLLError() @@ -6582,15 +6550,6 @@ void LLAppViewer::handleLoginComplete() // we logged in successfully, so save settings on logout LL_INFOS() << "Login successful, per account settings will be saved on log out." << LL_ENDL; mSavePerAccountSettings=true; - - // Don't allow hibernation while we're running - setPermitOSHibernation(false); - // Track 'hibernation' mode changes - mOSHibernationModeChangeConnection = gSavedSettings.getControl("OSHibernationMode")->getSignal()->connect([](LLControlVariable* control, const LLSD& new_val, const LLSD& old_val) - { - // setPermitOSHibernation will sort itself out based on new mode. - LLAppViewer::instance()->setPermitOSHibernation(false); - }); } //virtual diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h index 837b598ae5..54f94fe98c 100644 --- a/indra/newview/llappviewer.h +++ b/indra/newview/llappviewer.h @@ -270,8 +270,6 @@ public: // Note: mQuitRequested can be aborted by user. void outOfMemorySoftQuit(); - virtual void setPermitOSHibernation(bool permit); - #ifdef LL_DISCORD static void initDiscordSocial(); static void updateDiscordActivity(); @@ -288,14 +286,6 @@ protected: virtual bool initSLURLHandler(); virtual bool sendURLToOtherInstance(const std::string& url); - typedef enum - { - LL_HIBERNATE_MODE_DEFAULT = 0, // Use the platform's default behavior. - LL_HIBERNATE_MODE_PREVENT = 1, - LL_HIBERNATE_MODE_PREVENT_SCREEN = 2, - } eHibernationMode; - virtual void setOSHibernationMode(eHibernationMode mode); - virtual bool initParseCommandLine(LLCommandLineParser& clp) { return true; } // Allow platforms to specify the command line args. @@ -403,9 +393,6 @@ private: LLAppCoreHttp mAppCoreHttp; bool mIsFirstRun; - - eHibernationMode mCurrentHibernationMode = LL_HIBERNATE_MODE_DEFAULT; - boost::signals2::scoped_connection mOSHibernationModeChangeConnection; }; // Globals with external linkage. From viewer.h diff --git a/indra/newview/llappviewerlinux.cpp b/indra/newview/llappviewerlinux.cpp index cb899ef577..e7017655c2 100644 --- a/indra/newview/llappviewerlinux.cpp +++ b/indra/newview/llappviewerlinux.cpp @@ -79,10 +79,6 @@ namespace void (*gOldTerminateHandler)() = NULL; } -// Initialize static members -guint32 LLAppViewerLinux::sPowerInhibitCookie = 0; -bool LLAppViewerLinux::sPowerInhibitActive = false; - void check_vm_bloat() { #if LL_LINUX @@ -174,7 +170,6 @@ finally: } #endif // LL_LINUX } - static void exceptionTerminateHandler() { // reinstall default terminate() handler in case we re-terminate. @@ -292,11 +287,6 @@ LLAppViewerLinux::LLAppViewerLinux() LLAppViewerLinux::~LLAppViewerLinux() { - // Clean up any power management inhibition on exit - if (sPowerInhibitActive) - { - uninhibitPowerManagement(); - } } bool LLAppViewerLinux::init() @@ -472,178 +462,6 @@ bool LLAppViewerLinux::sendURLToOtherInstance(const std::string& url) } #endif // LL_GLIB - -#if LL_GLIB - -namespace -{ - // Session-bus sleep inhibitors, tried in order; both hand back a uint cookie. - struct PowerInhibitor - { - const char* service; - const char* path; - const char* iface; - const char* uninhibit; - bool gnome_args; - }; - - const PowerInhibitor POWER_INHIBITORS[] = - { - { "org.freedesktop.PowerManagement", "/org/freedesktop/PowerManagement/Inhibit", - "org.freedesktop.PowerManagement.Inhibit", "UnInhibit", false }, - { "org.gnome.SessionManager", "/org/gnome/SessionManager", - "org.gnome.SessionManager", "Uninhibit", true } - }; - - const PowerInhibitor* sActiveInhibitor = nullptr; - - // Returns the reply, or null on failure. Takes ownership of args. - GVariant* call_power_manager(const PowerInhibitor& inhibitor, const char* method, GVariant* args, - const GVariantType* reply_type) - { - g_variant_ref_sink(args); - - GDBusConnection* bus = g_bus_get_sync(G_BUS_TYPE_SESSION, nullptr, nullptr); - if (!bus) - { - LL_WARNS("OS") << "Getting dbus failed." << LL_ENDL; - g_variant_unref(args); - return nullptr; - } - - GError* error = nullptr; - GVariant* result = g_dbus_connection_call_sync(bus, inhibitor.service, inhibitor.path, - inhibitor.iface, method, args, reply_type, - G_DBUS_CALL_FLAGS_NONE, -1, nullptr, &error); - if (!result) - { - LL_DEBUGS("OS") << inhibitor.service << "." << method << " failed: " - << (error ? error->message : "unknown error") << LL_ENDL; - } - if (error) - { - g_error_free(error); - } - - g_variant_unref(args); - g_object_unref(bus); - return result; - } -} - -#endif // LL_GLIB - -void LLAppViewerLinux::setOSHibernationMode(eHibernationMode mode) -{ - if (mode == LL_HIBERNATE_MODE_DEFAULT) - { - // Allow OS to sleep/hibernate - remove any inhibition - if (sPowerInhibitActive) - { - uninhibitPowerManagement(); - LL_INFOS("OS") << "Permitted OS hibernation/sleep" << LL_ENDL; - } - } - else if (mode == LL_HIBERNATE_MODE_PREVENT) - { - // Prevent system sleep, but allow display to turn off - // Release any existing inhibition first to allow mode switching - if (sPowerInhibitActive) - { - uninhibitPowerManagement(); - } - - if (inhibitPowerManagement(false)) - { - LL_INFOS("OS") << "Prevented OS hibernation/sleep, display sleep allowed" << LL_ENDL; - } - else - { - LL_WARNS("OS") << "Failed to prevent OS hibernation/sleep" << LL_ENDL; - } - } - else if (mode == LL_HIBERNATE_MODE_PREVENT_SCREEN) - { - // Prevent both system and display sleep - // Release any existing inhibition first to allow mode switching - if (sPowerInhibitActive) - { - uninhibitPowerManagement(); - } - - if (inhibitPowerManagement(true)) - { - LL_INFOS("OS") << "Prevented OS hibernation/sleep and display sleep" << LL_ENDL; - } - else - { - LL_WARNS("OS") << "Failed to prevent OS hibernation/sleep and display sleep" << LL_ENDL; - } - } -} - -// TODO: This is AI Generated!!!, needs review and testing. -bool LLAppViewerLinux::inhibitPowerManagement(bool inhibit_display) -{ -#if LL_GLIB - const char* reason = inhibit_display ? - "Viewer active - preventing system and display sleep" : - "Viewer active - preventing system sleep"; - - for (const PowerInhibitor& inhibitor : POWER_INHIBITORS) - { - // Inhibit(app: s, reason: s) -> u, or GNOME's Inhibit(app: s, xid: u, reason: s, flags: u) -> u - // GNOME flags: 4 = suspend, 8 = idle (display), 12 = both - GVariant* args = inhibitor.gnome_args ? - g_variant_new("(susu)", "SecondLifeViewer", (guint32)0, reason, - (guint32)(inhibit_display ? 12 : 4)) : - g_variant_new("(ss)", "Second Life Viewer", reason); - - GVariant* result = call_power_manager(inhibitor, "Inhibit", args, G_VARIANT_TYPE("(u)")); - if (!result) - { - continue; - } - - guint32 cookie = 0; - g_variant_get(result, "(u)", &cookie); - g_variant_unref(result); - - sPowerInhibitCookie = cookie; - sPowerInhibitActive = true; - sActiveInhibitor = &inhibitor; - LL_INFOS("OS") << "Successfully inhibited power management using " - << inhibitor.service << LL_ENDL; - return true; - } -#endif // LL_GLIB - - return false; -} - -void LLAppViewerLinux::uninhibitPowerManagement() -{ -#if LL_GLIB - if (sPowerInhibitActive && sActiveInhibitor) - { - GVariant* result = call_power_manager(*sActiveInhibitor, sActiveInhibitor->uninhibit, - g_variant_new("(u)", (guint32)sPowerInhibitCookie), - nullptr); - if (result) - { - g_variant_unref(result); - LL_INFOS("OS") << "Successfully uninhibited power management using " - << sActiveInhibitor->service << LL_ENDL; - } - - sActiveInhibitor = nullptr; - } -#endif // LL_GLIB - - sPowerInhibitCookie = 0; - sPowerInhibitActive = false; -} - void LLAppViewerLinux::initCrashReporting(bool reportFreeze) { } diff --git a/indra/newview/llappviewerlinux.h b/indra/newview/llappviewerlinux.h index faac3c0a05..6f4e087726 100644 --- a/indra/newview/llappviewerlinux.h +++ b/indra/newview/llappviewerlinux.h @@ -60,16 +60,6 @@ protected: bool initSLURLHandler() override; bool sendURLToOtherInstance(const std::string& url) override; - void setOSHibernationMode(eHibernationMode mode) override; - -private: - // Power management state tracking - static guint32 sPowerInhibitCookie; - static bool sPowerInhibitActive; - - // Helper methods for power management - bool inhibitPowerManagement(bool inhibit_display); - void uninhibitPowerManagement(); }; #endif // LL_LLAPPVIEWERLINUX_H diff --git a/indra/newview/llappviewermacosx-objc.h b/indra/newview/llappviewermacosx-objc.h index 13b8056193..bfbb48dadb 100644 --- a/indra/newview/llappviewermacosx-objc.h +++ b/indra/newview/llappviewermacosx-objc.h @@ -32,6 +32,5 @@ void force_ns_sxeption(); void register_url_schemes(); -void set_os_hibernation_mode(int mode); #endif // LL_LLAPPVIEWERMACOSX_OBJC_H diff --git a/indra/newview/llappviewermacosx-objc.mm b/indra/newview/llappviewermacosx-objc.mm index ab4ae428b9..75d6b56e3e 100644 --- a/indra/newview/llappviewermacosx-objc.mm +++ b/indra/newview/llappviewermacosx-objc.mm @@ -29,7 +29,6 @@ #endif #import <Cocoa/Cocoa.h> -#import <IOKit/pwr_mgt/IOPMLib.h> #include <iostream> #include "llappviewermacosx-objc.h" @@ -64,68 +63,3 @@ void register_url_schemes() } } } - -// Add these as static variables at file scope -static IOPMAssertionID gPowerAssertionID = kIOPMNullAssertionID; - -void set_os_hibernation_mode(int mode) -{ - // Release existing assertion - if (gPowerAssertionID != kIOPMNullAssertionID) - { - IOReturn result = IOPMAssertionRelease(gPowerAssertionID); - if (result == kIOReturnSuccess) - { - gPowerAssertionID = kIOPMNullAssertionID; - NSLog(@"Permitted OS hibernation/sleep"); - } - else - { - NSLog(@"Failed to release power assertion: %d", result); - } - } - - if (mode == 1) - { - // Prevent OS from sleeping/hibernating - CFStringRef assertionName = CFSTR("Second Life Viewer"); - // kIOPMAssertionTypeNoIdleSleep prevents idle sleep - IOReturn result = IOPMAssertionCreateWithName( - kIOPMAssertionTypeNoIdleSleep, - kIOPMAssertionLevelOn, - assertionName, - &gPowerAssertionID - ); - - if (result == kIOReturnSuccess) - { - NSLog(@"Prevented OS hibernation/sleep, allow display sleep"); - } - else - { - NSLog(@"Failed to create power assertion: %d", result); - } - } - else if (mode == 2) - { - // Prevent OS from sleeping/hibernating, prevent screen from going off - CFStringRef assertionName = CFSTR("Second Life Viewer"); - // kIOPMAssertionTypeNoIdleSleep prevents idle sleep - // kIOPMAssertionTypeNoDisplaySleep prevents display sleep - IOReturn result = IOPMAssertionCreateWithName( - kIOPMAssertionTypeNoDisplaySleep, - kIOPMAssertionLevelOn, - assertionName, - &gPowerAssertionID - ); - - if (result == kIOReturnSuccess) - { - NSLog(@"Prevented OS hibernation/sleep or screen from turning off"); - } - else - { - NSLog(@"Failed to create power assertion: %d", result); - } - } -} diff --git a/indra/newview/llappviewermacosx.cpp b/indra/newview/llappviewermacosx.cpp index c188bb459f..f914a76fc6 100644 --- a/indra/newview/llappviewermacosx.cpp +++ b/indra/newview/llappviewermacosx.cpp @@ -126,7 +126,6 @@ bool pumpMainLoop() void cleanupViewer() { - set_os_hibernation_mode(0); // restore default OS hibernation behavior if(!LLApp::isError()) { if (gViewerAppPtr) @@ -429,12 +428,6 @@ bool LLAppViewerMacOSX::initSLURLHandler() return true; } -void LLAppViewerMacOSX::setOSHibernationMode(eHibernationMode mode) -{ - // pass to objective-c++ - set_os_hibernation_mode((int)mode); -} - std::string LLAppViewerMacOSX::generateSerialNumber() { char serial_md5[MD5HEX_STR_SIZE]; // Flawfinder: ignore diff --git a/indra/newview/llappviewermacosx.h b/indra/newview/llappviewermacosx.h index 1153bd4191..35fc99dbd9 100644 --- a/indra/newview/llappviewermacosx.h +++ b/indra/newview/llappviewermacosx.h @@ -47,7 +47,6 @@ public: protected: virtual bool restoreErrorTrap(); virtual bool initSLURLHandler(); - virtual void setOSHibernationMode(eHibernationMode mode); std::string generateSerialNumber(); virtual bool initParseCommandLine(LLCommandLineParser& clp); diff --git a/indra/newview/llappviewerwin32.cpp b/indra/newview/llappviewerwin32.cpp index 77f00b05f3..01ea24d211 100644 --- a/indra/newview/llappviewerwin32.cpp +++ b/indra/newview/llappviewerwin32.cpp @@ -1070,56 +1070,6 @@ bool LLAppViewerWin32::sendURLToOtherInstance(const std::string& url) return false; } -void LLAppViewerWin32::setOSHibernationMode(eHibernationMode mode) -{ - // ES_CONTINUOUS tells Windows to reset the idle timer - // and restore normal operation - // ES_SYSTEM_REQUIRED prevents system sleep/hibernation - // ES_DISPLAY_REQUIRED prevents display sleep - - if (mode == LL_HIBERNATE_MODE_DEFAULT) - { - // Allow OS to hibernate - clear the previous execution state flags - // ES_CONTINUOUS without other flags allows the system to idle normally - SetThreadExecutionState(ES_CONTINUOUS); - LL_INFOS("OS") << "Permitted OS hibernation/sleep" << LL_ENDL; - } - else if (mode == LL_HIBERNATE_MODE_PREVENT) - { - // Prevent OS from hibernating while viewer is running - // ES_CONTINUOUS | ES_SYSTEM_REQUIRED keeps the system awake - EXECUTION_STATE result = SetThreadExecutionState( - ES_CONTINUOUS | ES_SYSTEM_REQUIRED - ); - if (result == NULL) - { - LL_WARNS("OS") << "Failed to prevent OS hibernation, error: " << GetLastError() << LL_ENDL; - } - else - { - LL_INFOS("OS") << "Prevented OS hibernation, but allowed display sleep" << LL_ENDL; - } - } - else if (mode == LL_HIBERNATE_MODE_PREVENT_SCREEN) - { - // Prevent OS from hibernating or turning screen off while viewer is running - // ES_CONTINUOUS | ES_SYSTEM_REQUIRED keeps the system awake - // ES_DISPLAY_REQUIRED keeps the display on - EXECUTION_STATE result = SetThreadExecutionState( - ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_DISPLAY_REQUIRED - ); - - if (result == NULL) - { - LL_WARNS("OS") << "Failed to prevent OS hibernation and display sleep, error: " << GetLastError() << LL_ENDL; - } - else - { - LL_INFOS("OS") << "Prevented OS hibernation/sleep" << LL_ENDL; - } - } -} - bool LLAppViewerWin32::sendShutdownToOtherInstances(const std::wstring& install_dir) { // Velopack installs viewer like this: diff --git a/indra/newview/llappviewerwin32.h b/indra/newview/llappviewerwin32.h index 7c3c7a475a..971907694a 100644 --- a/indra/newview/llappviewerwin32.h +++ b/indra/newview/llappviewerwin32.h @@ -62,7 +62,6 @@ protected: bool restoreErrorTrap() override; bool sendURLToOtherInstance(const std::string& url) override; - void setOSHibernationMode(eHibernationMode mode) override; std::string generateSerialNumber(); diff --git a/indra/newview/llfloateraddpaymentmethod.cpp b/indra/newview/llfloateraddpaymentmethod.cpp deleted file mode 100644 index 64bd7b6aa1..0000000000 --- a/indra/newview/llfloateraddpaymentmethod.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/** - * @file llfloateraddpaymentmethod.cpp - * @brief LLFloaterAddPaymentMethod class implementation - * - * $LicenseInfo:firstyear=2020&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2020, Linden Research, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA - * $/LicenseInfo$ - */ - -#include "llviewerprecompiledheaders.h" - -#include "llfloateraddpaymentmethod.h" -#include "llnotificationsutil.h" -#include "lluictrlfactory.h" -#include "llviewernetwork.h" -#include "llweb.h" - - -LLFloaterAddPaymentMethod::LLFloaterAddPaymentMethod(const LLSD& key) - : LLFloater(key) -{ -} - -LLFloaterAddPaymentMethod::~LLFloaterAddPaymentMethod() -{ -} - -bool LLFloaterAddPaymentMethod::postBuild() -{ - setCanDrag(false); - getChild<LLButton>("continue_btn")->setCommitCallback(boost::bind(&LLFloaterAddPaymentMethod::onContinueBtn, this)); - getChild<LLButton>("close_btn")->setCommitCallback(boost::bind(&LLFloaterAddPaymentMethod::onCloseBtn, this)); - return true; -} - -void LLFloaterAddPaymentMethod::onOpen(const LLSD& key) -{ - centerOnScreen(); -} - -void LLFloaterAddPaymentMethod::onContinueBtn() -{ - closeFloater(); - LLNotificationsUtil::add("AddPaymentMethod", LLSD(), LLSD(), - [this](const LLSD¬if, const LLSD&resp) - { - S32 opt = LLNotificationsUtil::getSelectedOption(notif, resp); - if (opt == 0) - { - const std::string& grid_id = LLGridManager::getInstance()->getGridId(); - const std::string& grid_id_lower = utf8str_tolower(grid_id); - LLWeb::loadURL(getString(grid_id_lower == "damballah" ? "continue_staging_url" : "continue_url")); - } - }); -} - -void LLFloaterAddPaymentMethod::onCloseBtn() -{ - closeFloater(); -} - -void LLFloaterAddPaymentMethod::centerOnScreen() -{ - LLVector2 window_size = LLUI::getInstance()->getWindowSize(); - centerWithin(LLRect(0, 0, ll_round(window_size.mV[VX]), ll_round(window_size.mV[VY]))); -} - diff --git a/indra/newview/llfloateraddpaymentmethod.h b/indra/newview/llfloateraddpaymentmethod.h deleted file mode 100644 index 252caf8f5b..0000000000 --- a/indra/newview/llfloateraddpaymentmethod.h +++ /dev/null @@ -1,52 +0,0 @@ -/** - * @file llfloateraddpaymentmethod.h - * @brief LLFloaterAddPaymentMethod class definition - * - * $LicenseInfo:firstyear=2020&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2020, Linden Research, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA - * $/LicenseInfo$ - */ - -#ifndef LL_FLOATER_ADDPAYMENTMETHOD_H -#define LL_FLOATER_ADDPAYMENTMETHOD_H - -#include "llfloater.h" - -class LLFloaterAddPaymentMethod: - public LLFloater -{ - friend class LLFloaterReg; -public: - bool postBuild() override; - void onOpen(const LLSD& key) override; - -private: - LLFloaterAddPaymentMethod(const LLSD& key); - - void centerOnScreen(); - - void onCloseBtn(); - void onContinueBtn(); - - /*virtual*/ ~LLFloaterAddPaymentMethod(); - -}; - -#endif diff --git a/indra/newview/llfloaterbuycurrency.cpp b/indra/newview/llfloaterbuycurrency.cpp index 506cff31f4..56b3229fda 100644 --- a/indra/newview/llfloaterbuycurrency.cpp +++ b/indra/newview/llfloaterbuycurrency.cpp @@ -40,6 +40,8 @@ #include "llviewchildren.h" #include "llviewerwindow.h" #include "lluictrlfactory.h" +#include "llviewercontrol.h" +#include "llviewernetwork.h" #include "llweb.h" #include "llwindow.h" #include "llappviewer.h" @@ -336,7 +338,10 @@ void LLFloaterBuyCurrency::handleBuyCurrency(bool has_piof, bool has_target, con } else { - LLFloaterReg::showInstance("add_payment_method"); + const std::string& grid_id = LLGridManager::getInstance()->getGridId(); + const std::string& grid_id_lower = utf8str_tolower(grid_id); + const std::string url = gSavedSettings.getString(grid_id_lower == "damballah" ? "PaymentMethodStagingURL" : "PaymentMethodURL"); + LLWeb::loadURL(url); } } diff --git a/indra/newview/llfloaterimagepreview.cpp b/indra/newview/llfloaterimagepreview.cpp index bbff3e4c86..116286c872 100644 --- a/indra/newview/llfloaterimagepreview.cpp +++ b/indra/newview/llfloaterimagepreview.cpp @@ -926,8 +926,9 @@ void LLImagePreviewSculpted::setPreviewTarget(LLImageRaw* imagep, F32 distance) if (imagep) { + static LLCachedControl<bool> validate_area(gSavedSettings, "ValidateSculptyAreaRatio", true); LLImageDataSharedLock lock(imagep); - mVolume->sculpt(imagep->getWidth(), imagep->getHeight(), imagep->getComponents(), imagep->getData(), 0, false); + mVolume->sculpt(imagep->getWidth(), imagep->getHeight(), imagep->getComponents(), imagep->getData(), 0, false, validate_area()); } const LLVolumeFace &vf = mVolume->getVolumeFace(0); diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index 026b8b5008..133aef5e73 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -710,6 +710,7 @@ void LLInventoryPanel::itemChanged(const LLUUID& item_id, U32 mask, const LLInve LLFolderViewModelItem* old_parent_vmi = old_parent->getViewModelItem(); LLFolderViewModelItemInventory* viewmodel_folder = static_cast<LLFolderViewModelItemInventory*>(old_parent_vmi); LLFolderViewFolder* new_parent = getFolderByID(model_item->getParentUUID()); + const bool was_favorite = view_item->isFavorite(); if (old_parent != new_parent // Item has been moved. && (new_parent != NULL || !isInRootContent(item_id, view_item)) // item is not or shouldn't be in root content @@ -749,7 +750,7 @@ void LLInventoryPanel::itemChanged(const LLUUID& item_id, U32 mask, const LLInve old_parent_vmi->dirtyDescendantsFilter(); } - if (view_item->isFavorite()) + if (was_favorite) { if (old_parent) { diff --git a/indra/newview/llscripteditorws.cpp b/indra/newview/llscripteditorws.cpp index 93b1bd5eb0..017d9a5540 100644 --- a/indra/newview/llscripteditorws.cpp +++ b/indra/newview/llscripteditorws.cpp @@ -1060,6 +1060,9 @@ LLSD LLScriptEditorWSServer::handleObjectModify(U32 connection_id, const LLSD& p msg->sendReliable(host); } + // Force a properties reply so the editor sees the change without an in-world selection. + LLSelectMgr::instance().requestObjectPropertiesFamily(prim); + // Step 4: Return Success Response LLSD response; response["success"] = true; diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index ed4717a4dc..ca0d0d8e5d 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -6108,11 +6108,13 @@ void LLSelectMgr::processObjectProperties(LLMessageSystem* msg, void** user_data node->mInventorySerial = inv_serial; node->mSitName.assign(sit_name); node->mTouchName.assign(touch_name); + } - if (auto ws_server = LLScriptEditorWSServer::getServer()) - { - ws_server->onObjectPropertyChanged(id, name, desc, inv_serial); - } + // Published objects need property updates even when not selected. + LLScriptEditorWSServer::ptr_t ws_server = LLScriptEditorWSServer::getServer(); + if (ws_server) + { + ws_server->onObjectPropertyChanged(id, name, desc, inv_serial); } } diff --git a/indra/newview/llvelopack.cpp b/indra/newview/llvelopack.cpp index 927a5bbc2c..eb849ab52d 100644 --- a/indra/newview/llvelopack.cpp +++ b/indra/newview/llvelopack.cpp @@ -46,6 +46,7 @@ #if LL_WINDOWS #include "llappviewerwin32.h" #include <windows.h> +#include <shellapi.h> #include <shlobj.h> #include <shobjidl.h> #include <shlwapi.h> @@ -984,6 +985,19 @@ static void on_log_message(void* user_data, const char* level, const char* messa OutputDebugStringA("\n"); } +static void set_runtime_app_user_model_id() +{ + // Ensure taskbar grouping uses a stable ID independent of exe path + // (wrapper exe vs current\ exe). + const std::wstring app_user_model_id = get_app_user_model_id(); + HRESULT appid_hr = SetCurrentProcessExplicitAppUserModelID(app_user_model_id.c_str()); + if (FAILED(appid_hr)) + { + LL_WARNS("Velopack") << "SetCurrentProcessExplicitAppUserModelID failed: 0x" + << std::hex << appid_hr << LL_ENDL; + } +} + #elif LL_DARWIN // macOS-specific hooks @@ -1178,6 +1192,11 @@ static void ensure_update_manager(bool allow_downgrade) bool velopack_initialize() { +#if LL_WINDOWS + // Needs to be called on each run for consistent taskbar behavior. + set_runtime_app_user_model_id(); +#endif + vpkc_set_logger(on_log_message, nullptr); vpkc_app_set_auto_apply_on_startup(false); diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index 12320ac86e..8c075ffd68 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -36,7 +36,6 @@ #include "llfasttimerview.h" #include "llfloater360capture.h" #include "llfloaterabout.h" -#include "llfloateraddpaymentmethod.h" #include "llfloaterauction.h" #include "llfloaterautoreplacesettings.h" #include "llfloateravatarpicker.h" @@ -243,7 +242,6 @@ public: const std::list<std::string> blacklist_untrusted = { "360capture", "block_timers", - "add_payment_method", "appearance", "associate_listing", "avatar_picker", @@ -333,7 +331,6 @@ void LLViewerFloaterReg::registerFloaters() LLFloaterReg::add("360capture", "floater_360capture.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloater360Capture>); LLFloaterReg::add("block_timers", "floater_fast_timers.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFastTimerView>); LLFloaterReg::add("about_land", "floater_about_land.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterLand>); - LLFloaterReg::add("add_payment_method", "floater_add_payment_method.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAddPaymentMethod>); LLFloaterReg::add("appearance", "floater_my_appearance.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSidePanelContainer>); LLFloaterReg::add("associate_listing", "floater_associate_listing.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAssociateListing>); LLFloaterReg::add("auction", "floater_auction.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAuction>); diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 37d9f73864..2b51c19b7c 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -1485,30 +1485,12 @@ void LLViewerWindow::handleCloseRequestCanceled() void LLViewerWindow::handleSuspendRequest() { - static LLCachedControl<S32> os_hibernation_mode(gSavedSettings, "OSHibernationMode", 0); - if (os_hibernation_mode == 0) - { - LL_INFOS() << "Got a 'suspend' event from OS" << LL_ENDL; - // Viewer doesn't handle hibernation. - // Just send statistics. - LLAppViewer::instance()->sendViewerStatistics(false); - } - else - { - LL_INFOS() << "Got a 'suspend' event from OS, disconnecting" << LL_ENDL; - // Viewer is set to prevent hibernation if agent isn't away. - // If we got here, likely Agent 'went' away then viewer got - // a hibernation message. - // We have a limited timeframe. Sends stats then disconnect. - LLViewerRegion* region = gAgent.getRegion(); - if (region) - { - LLAppViewer::instance()->sendViewerStatistics(true); - LLAppViewer::instance()->metricsSend(!gDisconnected); - // Make sure to show a message. - LLAppViewer::instance()->forceDisconnect(LLTrans::getString("YouHaveBeenDisconnected")); - } - } + LLAppViewer::instance()->sendViewerStatistics(false); + // Todo: this should send a disconnect request as viewer + // can't keep heartbeat up while suspended and will get + // disconnected within a minute. + // Add a disconnect here once 'prevent OS from sleeping' + // feature is ready. } bool LLViewerWindow::handleCloseRequest(LLWindow *window, bool from_user) diff --git a/indra/newview/llvoicewebrtc.cpp b/indra/newview/llvoicewebrtc.cpp index e1cae2db0b..0b5cc9cd34 100644 --- a/indra/newview/llvoicewebrtc.cpp +++ b/indra/newview/llvoicewebrtc.cpp @@ -288,7 +288,26 @@ void LLWebRTCVoiceClient::initWebRTC() mWebRTCDeviceInterface = llwebrtc::getDeviceInterface(); mWebRTCDeviceInterface->setDevicesObserver(this); - mMainQueue = LL::WorkQueue::getInstance("mainloop"); + + if (!mVoiceWorkQueue) + { + mVoiceWorkQueue = std::make_shared<LL::WorkQueue>("VoiceWebRTC"); + // Service this queue every idle tick, on the main thread. + doOnIdleRepeating( + [queue = LL::WorkQueue::weak_t(mVoiceWorkQueue)]() -> bool + { + auto locked = queue.lock(); + if (!locked || locked->isClosed()) + { + // Done + return true; + } + locked->runPending(); + // Returning false means "call me again next idle". + return false; + }); + } + refreshDeviceLists(); } @@ -351,11 +370,11 @@ void LLWebRTCVoiceClient::drainConnections() LLTimer timer; while (!sessionState::allSessionsClosed() && timer.getElapsedTimeF32() < DRAIN_TIMEOUT_SECONDS) { - // OnPeerConnectionClosed comes back through the main queue, so it has + // OnPeerConnectionClosed comes back through the queue, so it has // to be pumped or the state machines never see connections finish. - if (auto main_queue = mMainQueue.lock()) + if (mVoiceWorkQueue) { - main_queue->runFor(std::chrono::milliseconds(DRAIN_POLL_MS)); + mVoiceWorkQueue->runFor(std::chrono::milliseconds(DRAIN_POLL_MS)); } sessionState::processSessionStates(); @@ -707,7 +726,7 @@ void LLWebRTCVoiceClient::voiceConnectionCoro() updatePosition(); } } - LL::WorkQueue::postMaybe(mMainQueue, + LL::WorkQueue::postMaybe(mVoiceWorkQueue, [=, this] { if (sShuttingDown) { @@ -829,7 +848,7 @@ void LLWebRTCVoiceClient::OnDevicesChanged(const llwebrtc::LLWebRTCVoiceDeviceLi const llwebrtc::LLWebRTCVoiceDeviceList& capture_devices) { - LL::WorkQueue::postMaybe(mMainQueue, + LL::WorkQueue::postMaybe(mVoiceWorkQueue, [=, this] { OnDevicesChangedImpl(render_devices, capture_devices); @@ -2517,7 +2536,7 @@ LLVoiceWebRTCConnection::LLVoiceWebRTCConnection(const LLUUID ®ionID, const s mWebRTCPeerConnectionInterface = llwebrtc::newPeerConnection(); mWebRTCPeerConnectionInterface->setSignalingObserver(this); - mMainQueue = LL::WorkQueue::getInstance("mainloop"); + mVoiceMainQueue = LLWebRTCVoiceClient::getInstance()->getVoiceWorkQueue(); } LLVoiceWebRTCConnection::~LLVoiceWebRTCConnection() @@ -2551,7 +2570,7 @@ LLVoiceWebRTCConnection::~LLVoiceWebRTCConnection() // callback from llwebrtc void LLVoiceWebRTCConnection::OnIceGatheringState(llwebrtc::LLWebRTCSignalingObserver::EIceGatheringState state) { - LL::WorkQueue::postMaybe(mMainQueue, + LL::WorkQueue::postMaybe(mVoiceMainQueue, [=, this] { LL_DEBUGS("Voice") << "Ice Gathering voice account. " << state << LL_ENDL; @@ -2575,7 +2594,7 @@ void LLVoiceWebRTCConnection::OnIceGatheringState(llwebrtc::LLWebRTCSignalingObs // callback from llwebrtc void LLVoiceWebRTCConnection::OnIceCandidate(const llwebrtc::LLWebRTCIceCandidate& candidate) { - LL::WorkQueue::postMaybe(mMainQueue, [=, this] { mIceCandidates.push_back(candidate); }); + LL::WorkQueue::postMaybe(mVoiceMainQueue, [=, this] { mIceCandidates.push_back(candidate); }); } void LLVoiceWebRTCConnection::processIceUpdates() @@ -2691,7 +2710,7 @@ void LLVoiceWebRTCConnection::processIceUpdatesCoro(connectionPtr_t connection) void LLVoiceWebRTCConnection::OnOfferAvailable(const std::string &sdp) { connectionPtr_t connection = shared_from_this(); - LL::WorkQueue::postMaybe(mMainQueue, + LL::WorkQueue::postMaybe(mVoiceMainQueue, [=] { if (connection->mShutDown) { @@ -2719,7 +2738,7 @@ void LLVoiceWebRTCConnection::OnOfferAvailable(const std::string &sdp) void LLVoiceWebRTCConnection::OnAudioEstablished(llwebrtc::LLWebRTCAudioInterface* audio_interface) { connectionPtr_t connection = shared_from_this(); - LL::WorkQueue::postMaybe(mMainQueue, + LL::WorkQueue::postMaybe(mVoiceMainQueue, [=] { if (connection->mShutDown) { @@ -2742,7 +2761,7 @@ void LLVoiceWebRTCConnection::OnAudioEstablished(llwebrtc::LLWebRTCAudioInterfac // callback from llwebrtc void LLVoiceWebRTCConnection::OnRenegotiationNeeded() { - LL::WorkQueue::postMaybe(mMainQueue, + LL::WorkQueue::postMaybe(mVoiceMainQueue, [=, this] { LL_DEBUGS("Voice") << "Voice channel requires renegotiation." << LL_ENDL; setVoiceConnectionState(VOICE_STATE_SESSION_RETRY); @@ -2753,7 +2772,7 @@ void LLVoiceWebRTCConnection::OnRenegotiationNeeded() // callback from llwebrtc void LLVoiceWebRTCConnection::OnPeerConnectionClosed() { - LL::WorkQueue::postMaybe(mMainQueue, + LL::WorkQueue::postMaybe(mVoiceMainQueue, [=, this] { LL_DEBUGS("Voice") << "Peer connection has closed." << LL_ENDL; if (mVoiceConnectionState == VOICE_STATE_WAIT_FOR_CLOSE) @@ -3264,7 +3283,7 @@ bool LLVoiceWebRTCConnection::connectionStateMachine() // llwebrtc callback void LLVoiceWebRTCConnection::OnDataReceived(const std::string& data, bool binary) { - LL::WorkQueue::postMaybe(mMainQueue, [=, this] { LLVoiceWebRTCConnection::OnDataReceivedImpl(data, binary); }); + LL::WorkQueue::postMaybe(mVoiceMainQueue, [=, this] { LLVoiceWebRTCConnection::OnDataReceivedImpl(data, binary); }); } // @@ -3493,7 +3512,7 @@ void LLVoiceWebRTCConnection::OnDataReceivedImpl(const std::string &data, bool b void LLVoiceWebRTCConnection::OnDataChannelReady(llwebrtc::LLWebRTCDataInterface *data_interface) { connectionPtr_t connection = shared_from_this(); - LL::WorkQueue::postMaybe(mMainQueue, + LL::WorkQueue::postMaybe(mVoiceMainQueue, [=] { if (connection->mShutDown) { @@ -3535,7 +3554,7 @@ void LLVoiceWebRTCConnection::sendJoin() void LLVoiceWebRTCConnection::OnStatsDelivered(const llwebrtc::LLWebRTCStatsMap& stats_data) { - LL::WorkQueue::postMaybe(mMainQueue, [=, this] + LL::WorkQueue::postMaybe(mVoiceMainQueue, [=, this] { if (mShutDown) { diff --git a/indra/newview/llvoicewebrtc.h b/indra/newview/llvoicewebrtc.h index 05f03ee8a6..a7c8059a81 100644 --- a/indra/newview/llvoicewebrtc.h +++ b/indra/newview/llvoicewebrtc.h @@ -40,6 +40,7 @@ class LLWebRTCProtocolParser; #include "llcoros.h" #include "llparcel.h" #include "llmutelist.h" +#include "workqueue.h" #include <queue> #include "boost/json.hpp" @@ -85,6 +86,8 @@ public: // drainConnections() and ~LLVoiceWebRTCConnection(). static bool isWebRTCTerminated() { return sWebRTCTerminated; } + LL::WorkQueue::weak_t getVoiceWorkQueue() const { return mVoiceWorkQueue; } + const LLVoiceVersionInfo& getVersion() override; void updateVersion(); @@ -468,7 +471,7 @@ private: /// llwebrtc::terminate(). Bounded and best effort. void drainConnections(); - LL::WorkQueue::weak_t mMainQueue; + LL::WorkQueue::ptr_t mVoiceWorkQueue; F32 mTuningMicGain; int mTuningSpeakerVolume; @@ -688,7 +691,7 @@ class LLVoiceWebRTCConnection : } EVoiceConnectionState; EVoiceConnectionState mVoiceConnectionState; - LL::WorkQueue::weak_t mMainQueue; + LL::WorkQueue::weak_t mVoiceMainQueue; void setVoiceConnectionState(EVoiceConnectionState new_voice_connection_state) { diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 13707b1889..3ec2843fed 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -1444,7 +1444,8 @@ void LLVOVolume::sculpt() } } - getVolume()->sculpt(sculpt_width, sculpt_height, sculpt_components, sculpt_data, discard_level, mSculptTexture->isMissingAsset()); + static LLCachedControl<bool> validate_area(gSavedSettings, "ValidateSculptyAreaRatio", true); + getVolume()->sculpt(sculpt_width, sculpt_height, sculpt_components, sculpt_data, discard_level, mSculptTexture->isMissingAsset(), validate_area()); } } diff --git a/indra/newview/skins/default/xui/da/panel_preferences_setup.xml b/indra/newview/skins/default/xui/da/panel_preferences_setup.xml index 981c35800f..7be9a9d555 100644 --- a/indra/newview/skins/default/xui/da/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/da/panel_preferences_setup.xml @@ -45,12 +45,4 @@ <combo_box.item label="Installér automatisk" name="Install_automatically"/> <combo_box.item label="Hent og installér opdateringer manuelt" name="Install_manual"/> </combo_box> - <text name="os_hibernation_mode"> - Forhindr OS i at gå i dvale, hvis du ikke er væk: - </text> - <combo_box name="os_hibernation_combobox" tool_tip="Forhindrer kun OS i at gå i dvale, hvis brugeren ikke er væk"> - <combo_box.item label="Kan gå i dvale" name="can_hibernate"/> - <combo_box.item label="Kan ikke gå i dvale, kan slukke skærmen" name="cant_hibernate"/> - <combo_box.item label="Kan ikke gå i dvale, kan ikke slukke skærmen" name="cant_hibernate_screen"/> - </combo_box> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_preferences_setup.xml b/indra/newview/skins/default/xui/de/panel_preferences_setup.xml index ef7ac09dba..a8509cabac 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_setup.xml @@ -36,12 +36,4 @@ Proxy-Einstellungen: </text> <button label="Proxy-Einstellungen ändern" label_selected="Durchsuchen" name="set_proxy" width="160"/> - <text name="os_hibernation_mode"> - OS-Ruhezustand verhindern, wenn nicht abwesend: - </text> - <combo_box name="os_hibernation_combobox" tool_tip="Verhindert den OS-Ruhezustand nur, wenn der Benutzer nicht abwesend ist"> - <combo_box.item label="Ruhezustand möglich" name="can_hibernate"/> - <combo_box.item label="Kein Ruhezustand, Bildschirm kann ausgeschaltet werden" name="cant_hibernate"/> - <combo_box.item label="Kein Ruhezustand, Bildschirm kann nicht ausgeschaltet werden" name="cant_hibernate_screen"/> - </combo_box> </panel> diff --git a/indra/newview/skins/default/xui/en/floater_add_payment_method.xml b/indra/newview/skins/default/xui/en/floater_add_payment_method.xml deleted file mode 100644 index 18f5f2af32..0000000000 --- a/indra/newview/skins/default/xui/en/floater_add_payment_method.xml +++ /dev/null @@ -1,142 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater - height="405" - width="900" - layout="topleft" - name="floater_add_payment_method" - single_instance="true" - show_title="false" - legacy_header_height="0" - header_height="0" - background_visible="false" - can_resize="false" - can_drag_on_left="false" - can_minimize="false" - can_close="false"> - <floater.string - name="continue_url"> - https://secondlife.com/my/lindex/buy.php?associate_for_viewer=1 - </floater.string> - <floater.string - name="continue_staging_url"> - https://secondlife-staging.com/my/lindex/buy.php?associate_for_viewer=1 - </floater.string> - <panel - background_opaque="false" - bg_alpha_color="PanelGray" - border_visible="false" - background_visible="true" - label="wrapper_panel" - layout="topleft" - left="0" - name="wrapper_panel" - top="0" - height="405" - width="900" - follows="all" - translate="false"> - <text - type="string" - length="1" - follows="top|left|right" - font="SansSerifLargeBold" - text_color="White" - layout="topleft" - left="0" - height="14" - top_pad="30" - width="900" - halign="center" - name="title_txt"> - Add a payment method to buy Linden dollars and enjoy more of Second Life. - </text> - <button - follows="top|left|right" - height="24" - label="Get started" - layout="topleft" - left="320" - name="continue_btn" - image_unselected="PushButton_Login" - image_pressed="PushButton_Login_Pressed" - image_hover_unselected="PushButton_Login_Over" - label_color="White" - top_pad ="15" - pad_bottom="1" - width="140"/> - <button - follows="top|left|right" - height="24" - label="Later" - layout="topleft" - left_pad="9" - pad_bottom="1" - name="close_btn" - width="90"/> - <icon - height="195" - width="260" - image_name="add_payment_image_left" - layout="topleft" - left="30" - name="image_left" - top_pad="30" - use_draw_context_alpha="false"/> - <icon - height="195" - width="260" - image_name="add_payment_image_center" - layout="topleft" - left_pad="30" - name="image_center" - use_draw_context_alpha="false"/> - <icon - height="195" - width="260" - image_name="add_payment_image_right" - layout="topleft" - left_pad="30" - name="image_right" - use_draw_context_alpha="false"/> - <text - type="string" - length="1" - follows="top|left" - text_color="White" - height="75" - width="260" - top_pad="15" - layout="topleft" - word_wrap="true" - left="30" - name="image_left_desc"> - Create an avatar you love. Choose from millions of items in stores and the Second Life Marketplace. Your style is here. - </text> - <text - type="string" - length="1" - follows="top|left" - text_color="White" - height="75" - width="260" - layout="topleft" - word_wrap="true" - left_pad="30" - name="image_center_desc"> - Donate to your favorite performers and hosts. Your support helps them create great experiences. - </text> - <text - type="string" - length="1" - follows="top|left" - text_color="White" - height="75" - width="260" - layout="topleft" - word_wrap="true" - left_pad="30" - name="image_right_desc"> - Make the home of your dreams. With millions of items available to purchase, you can make your retreat unique. - </text> - </panel> -</floater> diff --git a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml index d5f2f69df7..836c6094c5 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml @@ -246,41 +246,4 @@ <button.commit_callback function="Pref.Proxy" /> </button> - <text - type="string" - length="1" - follows="left|top" - height="10" - layout="topleft" - left="30" - name="os_hibernation_mode" - mouse_opaque="false" - top_pad="8" - width="300"> - Prevent OS from hibernating if not Away: - </text> - <combo_box - control_name="OSHibernationMode" - follows="left|top" - height="23" - layout="topleft" - left_delta="50" - top_pad="10" - name="os_hibernation_combobox" - width="300" - tool_tip="Only prevents OS from sleeping if user is not away"> - <combo_box.item - label="Can hibernate" - name="can_hibernate" - value="0" /> - <combo_box.item - label="Can't hibernate, can turn screen off" - name="cant_hibernate" - value="1" /> - <combo_box.item - label="Can't hibernate, can't turn screen off" - name="cant_hibernate_screen" - value="2" /> - </combo_box> </panel> - diff --git a/indra/newview/skins/default/xui/en/panel_script_ed.xml b/indra/newview/skins/default/xui/en/panel_script_ed.xml index 1a978a7629..54e9eca19a 100644 --- a/indra/newview/skins/default/xui/en/panel_script_ed.xml +++ b/indra/newview/skins/default/xui/en/panel_script_ed.xml @@ -250,7 +250,7 @@ name="compile_target_lsl2" value="lsl2" /> <combo_box.item - label="LSL on Lua" + label="LSL on Luau" name="compile_target_lsl_luau" value="lsl-luau" /> <combo_box.item diff --git a/indra/newview/skins/default/xui/es/panel_preferences_setup.xml b/indra/newview/skins/default/xui/es/panel_preferences_setup.xml index 27b3c407cf..36888850c4 100644 --- a/indra/newview/skins/default/xui/es/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/es/panel_preferences_setup.xml @@ -36,12 +36,4 @@ Configuración de proxy: </text> <button label="Ajustar la configuración de proxy" label_selected="Elegir" name="set_proxy"/> - <text name="os_hibernation_mode"> - Evitar que el sistema entre en hibernación si no está Ausente: - </text> - <combo_box name="os_hibernation_combobox" tool_tip="Solo evita que el sistema entre en suspensión si el usuario no está ausente"> - <combo_box.item label="Puede hibernar" name="can_hibernate"/> - <combo_box.item label="No puede hibernar, puede apagar la pantalla" name="cant_hibernate"/> - <combo_box.item label="No puede hibernar, no puede apagar la pantalla" name="cant_hibernate_screen"/> - </combo_box> </panel> diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml b/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml index 60cbe93e6e..c010fa9e90 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml @@ -36,12 +36,4 @@ Paramètres de proxy : </text> <button label="Définir" label_selected="Parcourir" name="set_proxy"/> - <text name="os_hibernation_mode"> - Empêcher l’OS d’hiberner si vous n’êtes pas absent : - </text> - <combo_box name="os_hibernation_combobox" tool_tip="Empêche seulement la mise en veille de l’OS si l’utilisateur n’est pas absent"> - <combo_box.item label="Peut hiberner" name="can_hibernate"/> - <combo_box.item label="Ne peut pas hiberner, peut éteindre l’écran" name="cant_hibernate"/> - <combo_box.item label="Ne peut pas hiberner, ne peut pas éteindre l’écran" name="cant_hibernate_screen"/> - </combo_box> </panel> diff --git a/indra/newview/skins/default/xui/it/panel_preferences_setup.xml b/indra/newview/skins/default/xui/it/panel_preferences_setup.xml index 95ecf05617..c9d90539e1 100644 --- a/indra/newview/skins/default/xui/it/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/it/panel_preferences_setup.xml @@ -36,12 +36,4 @@ Impostazioni proxy: </text> <button label="Regola impostazioni proxy" label_selected="Sfoglia" name="set_proxy" width="160"/> - <text name="os_hibernation_mode"> - Impedisci al sistema operativo di ibernarsi se non sei Assente: - </text> - <combo_box name="os_hibernation_combobox" tool_tip="Impedisce al sistema operativo di andare in sospensione solo se l'utente non è assente"> - <combo_box.item label="Può ibernarsi" name="can_hibernate"/> - <combo_box.item label="Non può ibernarsi, può spegnere lo schermo" name="cant_hibernate"/> - <combo_box.item label="Non può ibernarsi, non può spegnere lo schermo" name="cant_hibernate_screen"/> - </combo_box> </panel> diff --git a/indra/newview/skins/default/xui/ja/floater_add_payment_method.xml b/indra/newview/skins/default/xui/ja/floater_add_payment_method.xml deleted file mode 100644 index b420bf7d20..0000000000 --- a/indra/newview/skins/default/xui/ja/floater_add_payment_method.xml +++ /dev/null @@ -1,25 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="floater_add_payment_method"> - <floater.string name="continue_url"> - https://secondlife.com/my/lindex/buy.php?associate_for_viewer=1&lang=ja-JP - </floater.string> - <panel label="wrapper_panel" name="wrapper_panel"> - <text name="title_txt"> - 支払い方法を追加してリンデンドルを購入し、Second Lifeをもっと楽しみましょう。 - </text> - <button label="始めましょう" name="continue_btn"/> - <button label="また後で"/> - <icon name="image_left"/> - <icon name="image_center"/> - <icon name="image_right"/> - <text name="image_left_desc"> - お気に入りのアバターを作成しましょう。ストアやSecond Lifeマーケットプレイスにある何百万ものアイテムからお選びください。あなただけのスタイルがここにあります。 - </text> - <text name="image_center_desc"> - お気に入りのパフォーマーやホストに寄付をしましょう。あなたのサポートは、彼らが素晴らしい体験を生み出すのに役立ちます。 - </text> - <text name="image_right_desc"> - あなたの夢の家を作りましょう。何百万ものアイテムを購入できるので、あなただけの住まいを作ることができます。 - </text> - </panel> -</floater> diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml b/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml index 8940ca5bc9..959f827a61 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml @@ -36,12 +36,4 @@ プロキシ設定: </text> <button label="プロキシ設定を調整" label_selected="参照" name="set_proxy"/> - <text name="os_hibernation_mode"> - 離席中でない場合、OS の休止状態を防止: - </text> - <combo_box name="os_hibernation_combobox" tool_tip="ユーザーが離席中でない場合にのみ、OS のスリープを防止します"> - <combo_box.item label="休止状態を許可" name="can_hibernate"/> - <combo_box.item label="休止状態を禁止(画面オフは可)" name="cant_hibernate"/> - <combo_box.item label="休止状態を禁止(画面オフも不可)" name="cant_hibernate_screen"/> - </combo_box> </panel> diff --git a/indra/newview/skins/default/xui/pl/floater_add_payment_method.xml b/indra/newview/skins/default/xui/pl/floater_add_payment_method.xml deleted file mode 100644 index 2ef78d3d35..0000000000 --- a/indra/newview/skins/default/xui/pl/floater_add_payment_method.xml +++ /dev/null @@ -1,19 +0,0 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?> -<floater name="floater_add_payment_method"> - <panel name="wrapper_panel"> - <text name="title_txt"> - Dodaj metodę płatności, aby kupić Lindeny i lepiej doświadczać Second Life. - </text> - <button label="Rozpocznij" name="continue_btn" /> - <button label="Później" name="close_btn" /> - <text name="image_left_desc"> - Stwórz awatara, którego pokochasz. Wybieraj spośród milionów sklepów i Second Life Marketplace. Twój styl jest tutaj. - </text> - <text name="image_center_desc"> - Wspieraj swoich ulubionych wykonawców i gospodarzy. Pomożesz im tworzyć wspaniałe doświadczenia. - </text> - <text name="image_right_desc"> - Stwórz dom swoich marzeń. Miliony przedmiotów dostępnych do kupienia mogą uczynić Twoje gniazdko wyjątkowym. - </text> - </panel> -</floater> diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_setup.xml b/indra/newview/skins/default/xui/pl/panel_preferences_setup.xml index 7147f024cb..bd36f10509 100644 --- a/indra/newview/skins/default/xui/pl/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/pl/panel_preferences_setup.xml @@ -33,12 +33,4 @@ Ustawienia proxy: </text> <button label="Dostosuj ustawienia" label_selected="Przeglądaj" name="set_proxy" /> - <text name="os_hibernation_mode"> - Zapobiegaj hibernacji systemu, gdy użytkownik nie jest AFK: - </text> - <combo_box name="os_hibernation_combobox" tool_tip="Zapobiega usypianiu systemu tylko wtedy, gdy użytkownik nie jest AFK"> - <combo_box.item label="Może hibernować" name="can_hibernate"/> - <combo_box.item label="Nie może hibernować, może wyłączyć ekran" name="cant_hibernate"/> - <combo_box.item label="Nie może hibernować, nie może wyłączyć ekranu" name="cant_hibernate_screen"/> - </combo_box> </panel> diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_setup.xml b/indra/newview/skins/default/xui/pt/panel_preferences_setup.xml index 101f58488d..56fc225bc0 100644 --- a/indra/newview/skins/default/xui/pt/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/pt/panel_preferences_setup.xml @@ -36,12 +36,4 @@ Configurações de proxy: </text> <button label="Ajustar configurações de proxy" label_selected="Procurar" name="set_proxy" width="180"/> - <text name="os_hibernation_mode"> - Impedir que o sistema entre em hibernação se não estiver Ausente: - </text> - <combo_box name="os_hibernation_combobox" tool_tip="Só impede que o sistema entre em suspensão se o utilizador não estiver ausente"> - <combo_box.item label="Pode hibernar" name="can_hibernate"/> - <combo_box.item label="Não pode hibernar, pode desligar o ecrã" name="cant_hibernate"/> - <combo_box.item label="Não pode hibernar, não pode desligar o ecrã" name="cant_hibernate_screen"/> - </combo_box> </panel> diff --git a/indra/newview/skins/default/xui/pt/settings_comments.xml b/indra/newview/skins/default/xui/pt/settings_comments.xml index 22f6487847..63d68a3f5b 100644 --- a/indra/newview/skins/default/xui/pt/settings_comments.xml +++ b/indra/newview/skins/default/xui/pt/settings_comments.xml @@ -1435,8 +1435,6 @@ <string>Número de logins bem-sucedidos no Second Life.</string> <key>NvAPICreateApplicationProfile</key> <string>Criar perfil de aplicativo NVIDIA para configurações otimizadas.</string> - <key>OSHibernationMode</key> - <string>Se deve impedir que o SO hiberne. 0 - pode hibernar; 1 - não pode hibernar, pode desligar a tela; 2 - não pode hibernar, não pode desligar a tela.</string> <key>ObjectCacheEnabled</key> <string>Ativar o cache de objetos.</string> <key>ObjectCostHighColor</key> diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_setup.xml b/indra/newview/skins/default/xui/ru/panel_preferences_setup.xml index cec72ebe21..137e047d97 100644 --- a/indra/newview/skins/default/xui/ru/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/ru/panel_preferences_setup.xml @@ -36,12 +36,4 @@ Настройки прокси-сервера: </text> <button label="Задать настройки" label_selected="Обзор" name="set_proxy"/> - <text name="os_hibernation_mode"> - Предотвращать гибернацию ОС, если пользователь не отошел: - </text> - <combo_box name="os_hibernation_combobox" tool_tip="Предотвращает переход ОС в сон, только если пользователь не отошел"> - <combo_box.item label="Гибернация разрешена" name="can_hibernate"/> - <combo_box.item label="Гибернация запрещена, экран можно выключать" name="cant_hibernate"/> - <combo_box.item label="Гибернация запрещена, экран нельзя выключать" name="cant_hibernate_screen"/> - </combo_box> </panel> diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_setup.xml b/indra/newview/skins/default/xui/tr/panel_preferences_setup.xml index a3d99ac01f..a20d0e5ff1 100644 --- a/indra/newview/skins/default/xui/tr/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/tr/panel_preferences_setup.xml @@ -36,12 +36,4 @@ Proxy Ayarları: </text> <button label="Proxy ayarlarını yap" label_selected="Gözat" name="set_proxy"/> - <text name="os_hibernation_mode"> - Uzakta değilse işletim sisteminin hazırda beklemesini engelle: - </text> - <combo_box name="os_hibernation_combobox" tool_tip="Yalnızca kullanıcı uzakta değilse işletim sisteminin uykuya geçmesini engeller"> - <combo_box.item label="Hazırda bekleyebilir" name="can_hibernate"/> - <combo_box.item label="Hazırda bekleyemez, ekran kapanabilir" name="cant_hibernate"/> - <combo_box.item label="Hazırda bekleyemez, ekran kapanamaz" name="cant_hibernate_screen"/> - </combo_box> </panel> diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_setup.xml b/indra/newview/skins/default/xui/zh/panel_preferences_setup.xml index c83a7512e0..6ef25ad96e 100644 --- a/indra/newview/skins/default/xui/zh/panel_preferences_setup.xml +++ b/indra/newview/skins/default/xui/zh/panel_preferences_setup.xml @@ -36,12 +36,4 @@ 代理伺服器設定: </text> <button label="調整代理伺服器設定" label_selected="瀏覽" name="set_proxy"/> - <text name="os_hibernation_mode"> - 不處於離開狀態時阻止作業系統休眠: - </text> - <combo_box name="os_hibernation_combobox" tool_tip="僅在使用者不處於離開狀態時阻止作業系統睡眠"> - <combo_box.item label="可休眠" name="can_hibernate"/> - <combo_box.item label="不可休眠,可關閉螢幕" name="cant_hibernate"/> - <combo_box.item label="不可休眠,不可關閉螢幕" name="cant_hibernate_screen"/> - </combo_box> </panel> |
