diff --git a/.gitignore b/.gitignore index 5d51756c32..a8c150ae66 100755 --- a/.gitignore +++ b/.gitignore @@ -51,6 +51,8 @@ indra/newview/pilot.txt indra/newview/pilot.xml indra/newview/res-sdl/ll_icon.* indra/newview/res/ll_icon.* +indra/newview/res-sdl/firestorm_icon.* +indra/newview/res/firestorm_icon.* indra/newview/search_history.txt indra/newview/teleport_history.txt indra/newview/typed_locations.txt diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake index 30f8794577..c0652e556c 100644 --- a/indra/cmake/Copy3rdPartyLibs.cmake +++ b/indra/cmake/Copy3rdPartyLibs.cmake @@ -103,10 +103,26 @@ if(WINDOWS) set(MSVC_VER 120) elseif (MSVC_VERSION GREATER_EQUAL 1910 AND MSVC_VERSION LESS 1920) # Visual Studio 2017 set(MSVC_VER 140) + set(MSVC_TOOLSET_VER 141) + elseif (MSVC_VERSION GREATER_EQUAL 1920 AND MSVC_VERSION LESS 1930) # Visual Studio 2019 + set(MSVC_VER 140) + set(MSVC_TOOLSET_VER 142) else (MSVC80) MESSAGE(WARNING "New MSVC_VERSION ${MSVC_VERSION} of MSVC: adapt Copy3rdPartyLibs.cmake") endif (MSVC80) + # Try using the VC runtime redistributables that came with the VS installation first + if (MSVC_TOOLSET_VER AND DEFINED ENV{VCTOOLSREDISTDIR}) + if(ADDRESS_SIZE EQUAL 32) + set(redist_find_path "$ENV{VCTOOLSREDISTDIR}x86\\Microsoft.VC${MSVC_TOOLSET_VER}.CRT") + else(ADDRESS_SIZE EQUAL 32) + set(redist_find_path "$ENV{VCTOOLSREDISTDIR}x64\\Microsoft.VC${MSVC_TOOLSET_VER}.CRT") + endif(ADDRESS_SIZE EQUAL 32) + get_filename_component(redist_path "${redist_find_path}" ABSOLUTE) + MESSAGE(STATUS "VC Runtime redist path: ${redist_path}") + endif (MSVC_TOOLSET_VER AND DEFINED ENV{VCTOOLSREDISTDIR}) + # + if(ADDRESS_SIZE EQUAL 32) # this folder contains the 32bit DLLs.. (yes really!) set(registry_find_path "[HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Windows;Directory]/SysWOW64") @@ -125,10 +141,19 @@ if(WINDOWS) # Check each of them. foreach(release_msvc_file msvcp${MSVC_VER}.dll - msvcr${MSVC_VER}.dll + #msvcr${MSVC_VER}.dll # Can't build with older VS versions anyway - no need trying to copy this file vcruntime${MSVC_VER}.dll ) - if(EXISTS "${registry_path}/${release_msvc_file}") + # Try using the VC runtime redistributables that came with the VS installation first + if(redist_path AND EXISTS "${redist_path}/${release_msvc_file}") + MESSAGE(STATUS "Copying redist file from ${redist_path}/${release_msvc_file}") + to_staging_dirs( + ${redist_path} + third_party_targets + ${release_msvc_file}) + # + elseif(EXISTS "${registry_path}/${release_msvc_file}") + MESSAGE(STATUS "Copying redist file from ${registry_path}/${release_msvc_file}") to_staging_dirs( ${registry_path} third_party_targets diff --git a/indra/llcommon/llstring.cpp b/indra/llcommon/llstring.cpp index a11378259f..3835d6649e 100644 --- a/indra/llcommon/llstring.cpp +++ b/indra/llcommon/llstring.cpp @@ -1276,6 +1276,58 @@ std::string LLStringUtil::getLocale(void) template<> void LLStringUtil::formatNumber(std::string& numStr, std::string decimals) { +// Windows does not/cannot use UTF8 in char strings(1). So to get valid conversions we need to widen the strings to wchar_t(2) do the formatting in std::wstring, then convert +// down to UTF8 again. +// 1: Since Win 10 Build 17134 (April 2018 Update) Windows can work with UTF8, so using a codepage like Linux/OSX (lang_region.uf8) via (for example) de_DE.UTF-8 +// in language_settings.xml could work. +// 2: The LL way would be to use llwachr/LLWString and thus in UTF32. But std::basic_string< llwchar > is unusable to what seems +// a crt bug (https://stackoverflow.com/questions/48716223/compile-error-for-char-based-stl-stream-containers-in-visual-studio) +// A workaround would be using std::basic_stringstream< char32_t > then using later std::transform to static_cast each code point from char32_t to llwchar (u32) and thus create a LLWString from +// a std::basic_string< char32_t >. +// +// For Linux/OSX the old routinewith std::stringstream should be fine. Those systems use a UTF8 codepage. +#if LL_WINDOWS + std::wstringstream strStream; + S32 intDecimals = 0; + + std::wstring wDecimals = utf8str_to_utf16str(decimals); + std::wstring wNumStr = utf8str_to_utf16str(numStr); + LLStringUtilBase::convertToS32 (wDecimals, intDecimals); + if (!sLocale.empty()) + { + // std::locale() throws if the locale is unknown! (EXT-7926) + try + { + // Use user's system locale setting for number formatting + //strStream.imbue(std::locale(sLocale.c_str())); + strStream.imbue(std::locale("")); + } catch (const std::exception &) + { + LL_WARNS_ONCE("Locale") << "Cannot set locale to " << sLocale << LL_ENDL; + } + } + + if (!intDecimals) + { + S32 intStr; + + if (LLStringUtilBase::convertToS32(wNumStr, intStr)) + { + strStream << intStr; + numStr = wstring_to_utf8str( strStream.str() ); + } + } + else + { + F32 floatStr; + + if (LLStringUtilBase::convertToF32(wNumStr, floatStr)) + { + strStream << std::fixed << std::showpoint << std::setprecision(intDecimals) << floatStr; + numStr = wstring_to_utf8str( strStream.str() ); + } + } +#else std::stringstream strStream; S32 intDecimals = 0; @@ -1285,7 +1337,7 @@ void LLStringUtil::formatNumber(std::string& numStr, std::string decimals) // std::locale() throws if the locale is unknown! (EXT-7926) try { - // FIRE-6070: Use user's system locale setting for number formatting + // Use user's system locale setting for number formatting //strStream.imbue(std::locale(sLocale.c_str())); strStream.imbue(std::locale("")); } catch (const std::exception &) @@ -1302,11 +1354,6 @@ void LLStringUtil::formatNumber(std::string& numStr, std::string decimals) { strStream << intStr; numStr = strStream.str(); - // FIRE-6070: Fix random symbols in formatted numbers in some locales -#ifdef LL_WINDOWS - numStr = ll_convert_string_to_utf8_string(numStr); -#endif - // } } else @@ -1317,13 +1364,9 @@ void LLStringUtil::formatNumber(std::string& numStr, std::string decimals) { strStream << std::fixed << std::showpoint << std::setprecision(intDecimals) << floatStr; numStr = strStream.str(); - // FIRE-6070: Fix random symbols in formatted numbers in some locales -#ifdef LL_WINDOWS - numStr = ll_convert_string_to_utf8_string(numStr); -#endif - // } } +#endif } // static diff --git a/indra/llcommon/llstring.h b/indra/llcommon/llstring.h index 120001e29c..5ebfe1f607 100644 --- a/indra/llcommon/llstring.h +++ b/indra/llcommon/llstring.h @@ -178,6 +178,10 @@ public: static bool isSpace(char elem) { return isspace((unsigned char)elem) != 0; } static bool isSpace(llwchar elem) { return iswspace(elem) != 0; } + // Specialisation needed for correct number formatting +#if LL_WINDOWS + static bool isSpace(wchar_t elem) { return iswspace(elem) != 0; } +#endif static bool isUpper(char elem) { return isupper((unsigned char)elem) != 0; } static bool isUpper(llwchar elem) { return iswupper(elem) != 0; } diff --git a/indra/llinventory/llfoldertype.cpp b/indra/llinventory/llfoldertype.cpp index c9047f48f9..ec4aec10d9 100644 --- a/indra/llinventory/llfoldertype.cpp +++ b/indra/llinventory/llfoldertype.cpp @@ -102,6 +102,8 @@ LLFolderDictionary::LLFolderDictionary() addEntry(LLFolderType::FT_SETTINGS, new FolderEntry("settings", TRUE)); + addEntry(LLFolderType::FT_MY_SUITCASE, new FolderEntry("suitcase", TRUE)); // OpenSim HG-support + addEntry(LLFolderType::FT_NONE, new FolderEntry("-1", FALSE)); }; diff --git a/indra/llinventory/llfoldertype.h b/indra/llinventory/llfoldertype.h index cda18e2237..0f231a76dd 100644 --- a/indra/llinventory/llfoldertype.h +++ b/indra/llinventory/llfoldertype.h @@ -99,6 +99,8 @@ public: FT_RLV = 59, // Folder types for our own virtual system folders + FT_MY_SUITCASE = 100, // OpenSim HG-support + FT_COUNT, FT_NONE = -1 diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp index 7c0e54a973..f1ad9fed5f 100644 --- a/indra/llwindow/llwindowwin32.cpp +++ b/indra/llwindow/llwindowwin32.cpp @@ -430,6 +430,7 @@ LLWindowWin32::LLWindowWin32(LLWindowCallbacks* callbacks, memset(mCurrentGammaRamp, 0, sizeof(mCurrentGammaRamp)); memset(mPrevGammaRamp, 0, sizeof(mPrevGammaRamp)); mCustomGammaSet = FALSE; + mWindowHandle = NULL; // Initialize... if (!SystemParametersInfo(SPI_GETMOUSEVANISH, 0, &mMouseVanish, 0)) { @@ -1141,7 +1142,9 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO << " Height: " << (window_rect.bottom - window_rect.top) << " Fullscreen: " << mFullscreen << LL_ENDL; - if (!destroy_window_handler(mWindowHandle)) + // Only try destroying an existing window + //if (!destroy_window_handler(mWindowHandle)) + if (mWindowHandle && !destroy_window_handler(mWindowHandle)) { LL_WARNS("Window") << "Failed to properly close window before recreating it!" << LL_ENDL; } diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 54a1778485..be7149a090 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -1796,6 +1796,29 @@ if (LINUX) SET_SOURCE_FILES_PROPERTIES(llviewermenu.cpp PROPERTIES COMPILE_FLAGS -fno-var-tracking-assignments) endif() # + + # Replace the icons with the appropriate ones for the channel + # ('test' is the default) + set(ICON_PATH "private") + string(TOLOWER ${VIEWER_CHANNEL} channel_lower) + if(channel_lower MATCHES "release") + set(ICON_PATH "release") + elseif(channel_lower MATCHES "beta") + set(ICON_PATH "beta") + elseif(channel_lower MATCHES "project") + set(ICON_PATH "project") + endif() + + if (OPENSIM) + set(ICON_PATH "${ICON_PATH}-os") + endif (OPENSIM) + + message(STATUS "Copying icons for ${ICON_PATH}") + execute_process( + COMMAND ${CMAKE_COMMAND} -E copy_if_different + "${CMAKE_CURRENT_SOURCE_DIR}/icons/${ICON_PATH}/firestorm_256.bmp" + "${CMAKE_CURRENT_SOURCE_DIR}/res-sdl/firestorm_icon.BMP" + ) endif (LINUX) if (WINDOWS) @@ -1836,18 +1859,25 @@ if (WINDOWS) # Replace the icons with the appropriate ones for the channel # ('test' is the default) set(ICON_PATH "private") - set(VIEWER_MACOSX_PHASE "d") + #set(VIEWER_MACOSX_PHASE "d") # Moved to OSX section string(TOLOWER ${VIEWER_CHANNEL} channel_lower) if(channel_lower MATCHES "release") set(ICON_PATH "release") - set(VIEWER_MACOSX_PHASE "f") + #set(VIEWER_MACOSX_PHASE "f") # Moved to OSX section elseif(channel_lower MATCHES "beta") set(ICON_PATH "beta") - set(VIEWER_MACOSX_PHASE "b") + #set(VIEWER_MACOSX_PHASE "b") # Moved to OSX section elseif(channel_lower MATCHES "project") set(ICON_PATH "project") - set(VIEWER_MACOSX_PHASE "a") + #set(VIEWER_MACOSX_PHASE "a") # Moved to OSX section endif() + + # FIRE-24335: Use different icon for OpenSim version + if (OPENSIM) + set(ICON_PATH "${ICON_PATH}-os") + endif (OPENSIM) + # + message(STATUS "Copying icons for ${ICON_PATH}") execute_process( COMMAND ${CMAKE_COMMAND} -E copy_if_different @@ -2585,6 +2615,18 @@ endif (NOT ENABLE_MEDIA_PLUGINS) endif (LINUX) if (DARWIN) + # Moved from Windows section + set(VIEWER_MACOSX_PHASE "d") + string(TOLOWER ${VIEWER_CHANNEL} channel_lower) + if(channel_lower MATCHES "release") + set(VIEWER_MACOSX_PHASE "f") + elseif(channel_lower MATCHES "beta") + set(VIEWER_MACOSX_PHASE "b") + elseif(channel_lower MATCHES "project") + set(VIEWER_MACOSX_PHASE "a") + endif() + # + # These all get set with PROPERTIES. It's not that the property names are # magically known to CMake -- it's that these names are referenced in the # Info-SecondLife.plist file in the configure_file() directive below. diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt index d613169e88..0438a6cd91 100644 --- a/indra/newview/VIEWER_VERSION.txt +++ b/indra/newview/VIEWER_VERSION.txt @@ -1 +1 @@ -6.4.12 +6.4.13 diff --git a/indra/newview/app_settings/graphic_preset_controls.xml b/indra/newview/app_settings/graphic_preset_controls.xml index 91888f04c1..303463aa3c 100644 --- a/indra/newview/app_settings/graphic_preset_controls.xml +++ b/indra/newview/app_settings/graphic_preset_controls.xml @@ -7,6 +7,11 @@ CameraFocusTransitionTime CameraFNumber FramePerSecondLimit + FSAllowWaterDistortionOcclusion + FSDynamicTextureMemory + FSDynamicTextureMemoryCacheReserve + FSDynamicTextureMemoryGPUReserve + FSDynamicTextureMemoryMinTextureMemory FSLimitFramerate FSRenderDoFUnderwater FSRenderVignette diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 89f5bc2cd0..dbb53bbe34 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -210,6 +210,19 @@ Value 1 + + FSAvatarTurnSpeed + + Comment + Modify the speed at which the avatar responds to turning movements. 0-100 percent of max rate + Persist + 1 + Type + F32 + Value + 0.0 + + FSUseLegacyClienttags Comment @@ -6635,6 +6648,17 @@ Value 0 + FSOpenSimAlwaysForceShowGrid + + Comment + Soft enable/disable the startup behaviour of OpenSim builds to allow gridlist access + Persist + 1 + Type + Boolean + Value + 1 + ForceMandatoryUpdate Comment @@ -9129,6 +9153,28 @@ Backup 0 + FSMeshUploadAutoEnableWeights + + Comment + Automatically set weights enabled for meshes with rigging info + Persist + 1 + Type + Boolean + Value + 1 + + FSMeshUploadAutoShowWeightsWhenEnabled + + Comment + Automatically show weights in preview for meshes with rigging info + Persist + 1 + Type + Boolean + Value + 1 + MeshPreviewCanvasColor Comment @@ -12214,6 +12260,28 @@ Change of this parameter will affect the layout of buttons in notification toast 0 + FSFocusPointLocked + + Comment + Whether the focus point used for DoF is currently Locked in place + Persist + 0 + Type + Boolean + Value + 0 + + FSFocusPointFollowsPointer + + Comment + Allows the Depth of Field focus to actively follow the mouse point + Persist + 0 + Type + Boolean + Value + 0 + CameraDoFResScale diff --git a/indra/newview/fslslbridge.cpp b/indra/newview/fslslbridge.cpp index e67f725c52..ad8c49cc4c 100644 --- a/indra/newview/fslslbridge.cpp +++ b/indra/newview/fslslbridge.cpp @@ -265,14 +265,14 @@ bool FSLSLBridge::lslToViewer(const std::string& message, const LLUUID& fromID, if (gSavedPerAccountSettings.getF32("UseLSLFlightAssist") > 0.f) { viewerToLSL(llformat("UseLSLFlightAssist|%.1f", gSavedPerAccountSettings.getF32("UseLSLFlightAssist")) ); - report_to_nearby_chat(LLTrans::getString("FlightAssistEnabled")); + LLNotificationsUtil::add("FlightAssistEnabled", LLSD()); } // Inform user, if movelock was enabled at login if (gSavedPerAccountSettings.getBOOL("UseMoveLock")) { updateBoolSettingValue("UseMoveLock"); - report_to_nearby_chat(LLTrans::getString("MovelockEnabling")); + LLNotificationsUtil::add("MovelockEnabling", LLSD()); make_ui_sound("UISndMovelockToggle"); } // @@ -291,7 +291,7 @@ bool FSLSLBridge::lslToViewer(const std::string& message, const LLUUID& fromID, { // Don't call for update here and only change setting to 'false', getCommitSignal()->connect->boost in llviewercontrol.cpp will send a message to Bridge anyway gSavedPerAccountSettings.setBOOL("UseMoveLock", false); - report_to_nearby_chat(LLTrans::getString("MovelockDisabling")); + LLNotificationsUtil::add("MovelockDisabling", LLSD()); } else { diff --git a/indra/newview/fsslurl.cpp b/indra/newview/fsslurl.cpp index 4638789e71..22ff350b22 100644 --- a/indra/newview/fsslurl.cpp +++ b/indra/newview/fsslurl.cpp @@ -139,7 +139,7 @@ LLSLURL::LLSLURL(const std::string& slurl) hop = "hop://" + hop; slurl_uri = LLURI(hop); - LL_DEBUGS("SLURL") << "hypergrid slurl " << hop <getGridByProbing(hypergrid); + LL_DEBUGS("SLURL") << "Probing Hypergrid (trimmed): " << hypergrid << "(" << hyper_trimmed << ")" << LL_ENDL; + LL_DEBUGS("SLURL") << "Probing result: " << (probe_grid.empty()?"NOT FOUND":probe_grid.c_str()) << LL_ENDL; if (probe_grid.empty()) { probe_grid = LLGridManager::getInstance()->getGridByProbing(slurl_uri.hostName()); + LL_DEBUGS("SLURL") << "Probing hostName: " << slurl_uri.hostName() << LL_ENDL; + LL_DEBUGS("SLURL") << "Probing result: " << (probe_grid.empty()?"NOT FOUND":probe_grid.c_str()) << LL_ENDL; + LL_DEBUGS("SLURL") << "slurl_uri.hostNameAndPort(): " << slurl_uri.hostNameAndPort() << LL_ENDL; } - LL_DEBUGS("SLURL") << "Probing result: " << probe_grid << LL_ENDL; - LL_DEBUGS("SLURL") << "slurl_uri.hostNameAndPort(): " << slurl_uri.hostNameAndPort() << LL_ENDL; if ((slurl_uri.scheme() == LLSLURL::SLURL_HTTP_SCHEME || slurl_uri.scheme() == LLSLURL::SLURL_HTTPS_SCHEME) && slurl_uri.hostNameAndPort() != probe_grid) { @@ -353,12 +356,17 @@ LLSLURL::LLSLURL(const std::string& slurl) // unlike the stinky maingrid style if (probe_grid.empty()) { + LL_DEBUGS("SLURL") << "Fallback to hostname and port as grid" << LL_ENDL; mGrid = slurl_uri.hostNameAndPort(); } else { mGrid = probe_grid; - mHypergrid = LLGridManager::getInstance()->isHyperGrid(probe_grid); + if(!mHypergrid)// only check if we have not already decided HG is true + { + mHypergrid = LLGridManager::getInstance()->isHyperGrid(probe_grid); + } + LL_DEBUGS("SLURL") << "using probe result: " << mGrid << " hg=" << ((mHypergrid)?"true":"false") << LL_ENDL; } } diff --git a/indra/newview/icons/beta-os/firestorm_256.bmp b/indra/newview/icons/beta-os/firestorm_256.bmp index 9621d199bd..cb83cab458 100644 Binary files a/indra/newview/icons/beta-os/firestorm_256.bmp and b/indra/newview/icons/beta-os/firestorm_256.bmp differ diff --git a/indra/newview/icons/beta/firestorm_256.BMP b/indra/newview/icons/beta/firestorm_256.bmp similarity index 100% rename from indra/newview/icons/beta/firestorm_256.BMP rename to indra/newview/icons/beta/firestorm_256.bmp diff --git a/indra/newview/icons/development-os/firestorm_256.bmp b/indra/newview/icons/development-os/firestorm_256.bmp index 9621d199bd..cb83cab458 100644 Binary files a/indra/newview/icons/development-os/firestorm_256.bmp and b/indra/newview/icons/development-os/firestorm_256.bmp differ diff --git a/indra/newview/icons/development/firestorm_256.BMP b/indra/newview/icons/development/firestorm_256.bmp similarity index 100% rename from indra/newview/icons/development/firestorm_256.BMP rename to indra/newview/icons/development/firestorm_256.bmp diff --git a/indra/newview/icons/nightly-os/firestorm_256.bmp b/indra/newview/icons/nightly-os/firestorm_256.bmp index 9621d199bd..cb83cab458 100644 Binary files a/indra/newview/icons/nightly-os/firestorm_256.bmp and b/indra/newview/icons/nightly-os/firestorm_256.bmp differ diff --git a/indra/newview/icons/nightly/firestorm_256.BMP b/indra/newview/icons/nightly/firestorm_256.bmp similarity index 100% rename from indra/newview/icons/nightly/firestorm_256.BMP rename to indra/newview/icons/nightly/firestorm_256.bmp diff --git a/indra/newview/icons/private-os/firestorm_256.bmp b/indra/newview/icons/private-os/firestorm_256.bmp index 9621d199bd..cb83cab458 100644 Binary files a/indra/newview/icons/private-os/firestorm_256.bmp and b/indra/newview/icons/private-os/firestorm_256.bmp differ diff --git a/indra/newview/icons/private/firestorm_256.BMP b/indra/newview/icons/private/firestorm_256.bmp similarity index 100% rename from indra/newview/icons/private/firestorm_256.BMP rename to indra/newview/icons/private/firestorm_256.bmp diff --git a/indra/newview/icons/project-os/firestorm_256.bmp b/indra/newview/icons/project-os/firestorm_256.bmp index 9621d199bd..cb83cab458 100644 Binary files a/indra/newview/icons/project-os/firestorm_256.bmp and b/indra/newview/icons/project-os/firestorm_256.bmp differ diff --git a/indra/newview/icons/project/firestorm_256.BMP b/indra/newview/icons/project/firestorm_256.bmp similarity index 100% rename from indra/newview/icons/project/firestorm_256.BMP rename to indra/newview/icons/project/firestorm_256.bmp diff --git a/indra/newview/icons/release-os/firestorm_256.bmp b/indra/newview/icons/release-os/firestorm_256.bmp index 9621d199bd..cb83cab458 100644 Binary files a/indra/newview/icons/release-os/firestorm_256.bmp and b/indra/newview/icons/release-os/firestorm_256.bmp differ diff --git a/indra/newview/icons/release/firestorm_256.BMP b/indra/newview/icons/release/firestorm_256.bmp similarity index 100% rename from indra/newview/icons/release/firestorm_256.BMP rename to indra/newview/icons/release/firestorm_256.bmp diff --git a/indra/newview/icons/test-os/firestorm_256.bmp b/indra/newview/icons/test-os/firestorm_256.bmp index 9621d199bd..cb83cab458 100644 Binary files a/indra/newview/icons/test-os/firestorm_256.bmp and b/indra/newview/icons/test-os/firestorm_256.bmp differ diff --git a/indra/newview/icons/test/firestorm_256.BMP b/indra/newview/icons/test/firestorm_256.bmp similarity index 100% rename from indra/newview/icons/test/firestorm_256.BMP rename to indra/newview/icons/test/firestorm_256.bmp diff --git a/indra/newview/installers/windows/firestorm_icon_os.ico b/indra/newview/installers/windows/firestorm_icon_os.ico new file mode 100644 index 0000000000..52ddcf378d Binary files /dev/null and b/indra/newview/installers/windows/firestorm_icon_os.ico differ diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi index 0d6b84e20b..3be82ce9be 100644 --- a/indra/newview/installers/windows/installer_template.nsi +++ b/indra/newview/installers/windows/installer_template.nsi @@ -85,8 +85,12 @@ Name ${INSTNAME} ;SubCaption 0 $(LicenseSubTitleSetup) # Override "license agreement" text -!define MUI_ICON "%%SOURCE%%\installers\windows\firestorm_icon.ico" -!define MUI_UNICON "%%SOURCE%%\installers\windows\firestorm_icon.ico" +# FIRE-24335: Use different icon for OpenSim version +#!define MUI_ICON "%%SOURCE%%\installers\windows\firestorm_icon_os.ico" +#!define MUI_UNICON "%%SOURCE%%\installers\windows\firestorm_icon_os.ico" +!define MUI_ICON "%%SOURCE%%\installers\windows\firestorm_icon${ICON_SUFFIX}.ico" +!define MUI_UNICON "%%SOURCE%%\installers\windows\firestorm_icon${ICON_SUFFIX}.ico" +# BrandingText " " # Bottom of window text Icon "${MUI_ICON}" diff --git a/indra/newview/lfsimfeaturehandler.cpp b/indra/newview/lfsimfeaturehandler.cpp index a8eb3d5b60..ad7c60d2e4 100644 --- a/indra/newview/lfsimfeaturehandler.cpp +++ b/indra/newview/lfsimfeaturehandler.cpp @@ -106,16 +106,32 @@ void LFSimFeatureHandler::setSupportedFeatures() if(extras.has("GridURL")) { - mGridURL = extras["GridURL"].asString(); - auto pos = mGridURL.find("://"); + // If we have GridURL specified in the extras then we use this by default + mHyperGridPrefix = extras["GridURL"].asString(); + auto pos = mHyperGridPrefix.find("://"); if( pos != std::string::npos) { - mGridURL = mGridURL.substr(pos+3,mGridURL.size()-(pos+3)); + // We always strip off the protocol prefix if it exists + // Note: we do not attempt to clear trailing port numbers or / or even directories. + mHyperGridPrefix = mHyperGridPrefix.substr(pos+3,mHyperGridPrefix.size()-(pos+3)); } + LL_DEBUGS() << "Setting HyperGrid URL to \"GridURL\" [" << mHyperGridPrefix << "]" << LL_ENDL; } +#ifdef OPENSIM + else if (LLGridManager::instance().getGatekeeper() != std::string{}) + { + // Note: this is a tentative test pending further use of gatekeeper + // worst case this is checking the login grid and will simply be the same as the fallback + // If the GridURL is not available then we will try to use the Gatekeeper which is expected to be present. + mHyperGridPrefix = LLGridManager::instance().getGatekeeper(); + LL_DEBUGS() << "Setting HyperGrid URL to \"Gatekeeper\" [" << mHyperGridPrefix << "]" << LL_ENDL; + } +#endif else { - mGridURL = LLGridManager::instance().getGridId(); + // Just in case that fails we will default back to the current grid + mHyperGridPrefix = LLGridManager::instance().getGridId(); + LL_DEBUGS() << "Setting HyperGrid URL to fallback of current grid (target grid is misconfigured) [" << mHyperGridPrefix << "]" << LL_ENDL; } if (extras.has("SimulatorFPS") && extras.has("SimulatorFPSFactor") && diff --git a/indra/newview/lfsimfeaturehandler.h b/indra/newview/lfsimfeaturehandler.h index 9a348857e2..e769f1e7bb 100644 --- a/indra/newview/lfsimfeaturehandler.h +++ b/indra/newview/lfsimfeaturehandler.h @@ -88,7 +88,7 @@ public: // Accessors bool simSupportsExport() const { return mSupportsExport; } std::string mapServerURL() const { return mMapServerURL; } - std::string gridURL() const { return mGridURL; } + std::string hyperGridURL() const { return mHyperGridPrefix; } std::string searchURL() const { return mSearchURL; } U32 sayRange() const { return mSayRange; } U32 shoutRange() const { return mShoutRange; } @@ -114,7 +114,7 @@ private: // SignaledTypes SignaledType mSupportsExport; std::string mMapServerURL; - std::string mGridURL; + std::string mHyperGridPrefix; SignaledType mSearchURL; SignaledType mSayRange; SignaledType mShoutRange; diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 8bc90dcb24..abe4f5b065 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -4685,7 +4685,7 @@ bool LLAgent::hasPendingTeleportRequest() void LLAgent::startTeleportRequest() { - LL_INFOS("Telport") << "Agent handling start teleport request." << LL_ENDL; + LL_INFOS("Teleport") << "Agent handling start teleport request." << LL_ENDL; // fix mistyped tag if(LLVoiceClient::instanceExists()) { LLVoiceClient::getInstance()->setHidden(TRUE); diff --git a/indra/newview/llagentui.cpp b/indra/newview/llagentui.cpp index 4ad701f45c..065087cea6 100644 --- a/indra/newview/llagentui.cpp +++ b/indra/newview/llagentui.cpp @@ -67,7 +67,7 @@ void LLAgentUI::buildSLURL(LLSLURL& slurl, const bool escaped /*= true*/) #ifdef OPENSIM if (LLGridManager::instance().isInOpenSim()) { - return_slurl = LLSLURL(LFSimFeatureHandler::getInstance()->gridURL(), regionp->getName(), gAgent.getPositionAgent()); + return_slurl = LLSLURL(LFSimFeatureHandler::getInstance()->hyperGridURL(), regionp->getName(), gAgent.getPositionAgent()); } else #endif diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 2dfd2f21ae..ff3694d4bf 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -2995,16 +2995,19 @@ bool LLAppViewer::initConfiguration() } // -// Set ForceShowGrid to TRUE on first run if we're on an OpenSim build -#ifdef OPENSIM - if (!gSavedSettings.getBOOL("ForceShowGrid")) - gSavedSettings.setBOOL("ForceShowGrid", TRUE); -#endif // OPENSIM -// gSavedSettings.setBOOL("FirstRunThisInstall", FALSE); } +// FIRE-29819 Set ForceShowGrid to TRUE always, unless expressly disabled +// FSOpenSimAlwaysForcesShowGrid is added to allow closed grids to soft disable the default behaviour +#if OPENSIM && !SINGLEGRID + if (!gSavedSettings.getBOOL("ForceShowGrid") && gSavedSettings.getBOOL("FSOpenSimAlwaysForceShowGrid")) + { + gSavedSettings.setBOOL("ForceShowGrid", TRUE); + } +#endif +// // Compatibility with old backups // Put gSavedSettings here, gSavedPerAccountSettings in llstartup.cpp // *TODO: Should we keep these around forever or just three release cycles? diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index e51817a0c3..63dc12f813 100644 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -2157,7 +2157,7 @@ void LLDrawPoolAvatar::updateRiggedFaceVertexBuffer( { LLMatrix4a final_mat; // Use the SSE2 version - LLSkinningUtil::getPerVertexSkinMatrix(weights[j].getF32ptr(), mat, false, final_mat, max_joints); + // LLSkinningUtil::getPerVertexSkinMatrix(weights[j].getF32ptr(), mat, false, final_mat, max_joints); FSSkinningUtil::getPerVertexSkinMatrixSSE(weights[j], mat, false, final_mat, max_joints); // diff --git a/indra/newview/llenvironment.h b/indra/newview/llenvironment.h index a664513de8..49c2ba337e 100644 --- a/indra/newview/llenvironment.h +++ b/indra/newview/llenvironment.h @@ -259,6 +259,9 @@ public: void initialize(); bool isInitialized(); +// [RLVa:KB] - @setenv + virtual bool isTransition() { return false; } +// [/RLVa:KB] void clear(); @@ -318,6 +321,9 @@ public: virtual bool applyTimeDelta(const LLSettingsBase::Seconds& delta) override; virtual void animate() override; +// [RLVa:KB] - @setenv + bool isTransition() override { return true; } +// [/RLVa:KB] protected: LLSettingsSky::ptr_t mStartSky; @@ -327,6 +333,9 @@ public: }; DayInstance::ptr_t getSelectedEnvironmentInstance(); +// [RLVa:KB] - @setenv + DayInstance::ptr_t getCurrentEnvironmentInstance() { return mCurrentEnvironment; } +// [/RLVa:KB] DayInstance::ptr_t getSharedEnvironmentInstance(); protected: diff --git a/indra/newview/llfloaterbuycurrency.cpp b/indra/newview/llfloaterbuycurrency.cpp index ae07b30a1e..dc75df5e50 100644 --- a/indra/newview/llfloaterbuycurrency.cpp +++ b/indra/newview/llfloaterbuycurrency.cpp @@ -41,6 +41,9 @@ #include "llweb.h" #include "llwindow.h" #include "llappviewer.h" +#ifdef OPENSIM +#include "fsgridhandler.h" // FIRE-30481 open sim buy floater fixup +#endif static const S32 STANDARD_BUY_AMOUNT = 2000; static const S32 MINIMUM_BALANCE_AMOUNT = 0; @@ -183,6 +186,16 @@ void LLFloaterBuyCurrencyUI::updateUI() LLSD args; args["TITLE"] = getString("info_cannot_buy"); args["MESSAGE"] = mManager.errorMessage(); +// FIRE-30481 restore access to help/donate link for OpenSim +#ifdef OPENSIM + if( !LLGridManager::getInstance()->isInSecondLife() ) + { + args["LINK"] = mManager.errorURI(); + LLNotificationsUtil::add("CouldNotBuyCurrencyOS", args); + } + else // trailing else required for OS builds +#endif +// LLNotificationsUtil::add("CouldNotBuyCurrency", args); closeFloater(); } diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index cac30efe11..89f3629bb0 100644 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -58,6 +58,7 @@ #include "llsliderctrl.h" #include "llspinctrl.h" #include "lltabcontainer.h" +#include "llcolorswatch.h" // #include "lltrans.h" #include "llcallbacklist.h" #include "llviewertexteditor.h" @@ -193,6 +194,15 @@ BOOL LLFloaterModelPreview::postBuild() getChild("show_joint_overrides")->setCommitCallback(boost::bind(&LLFloaterModelPreview::onViewOptionChecked, this, _1)); getChild("show_joint_positions")->setCommitCallback(boost::bind(&LLFloaterModelPreview::onViewOptionChecked, this, _1)); getChild("show_uv_guide")->setCommitCallback(boost::bind(&LLFloaterModelPreview::onViewOptionChecked, this, _1)); // - Add UV guide overlay to pmesh preview + // support for settings panel of floater + const auto& preview_refresh_cb = [this](LLUICtrl *, const LLSD &){ if(this->mModelPreview){mModelPreview->refresh();}}; + getChild("mesh_preview_canvas_color")->setCommitCallback(preview_refresh_cb); + getChild("mesh_preview_edge_color")->setCommitCallback(preview_refresh_cb); + getChild("mesh_preview_physics_edge_color")->setCommitCallback(preview_refresh_cb); + getChild("mesh_preview_physics_fill_color")->setCommitCallback(preview_refresh_cb); + getChild("mesh_preview_degenerate_edge_color")->setCommitCallback(preview_refresh_cb); + getChild("mesh_preview_degenerate_fill_color")->setCommitCallback(preview_refresh_cb); + // childDisable("upload_skin"); childDisable("upload_joints"); @@ -560,11 +570,13 @@ void add_row_to_list(LLScrollListCtrl *listp, cell_params.column = "model_name"; cell_params.value = name; + cell_params.font_halign = LLFontGL::LEFT; // Fix ugly alignment item_params.columns.add(cell_params); cell_params.column = "axis_x"; cell_params.value = vx; + cell_params.font_halign = LLFontGL::RIGHT; // Fix ugly alignment item_params.columns.add(cell_params); cell_params.column = "axis_y"; diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 32f581a98e..82279fae67 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -815,7 +815,7 @@ BOOL LLFloaterPreference::postBuild() // [/SL:KB] // -#if !defined(OPENSIM) || defined(SINGLEGRID)// +#if !defined(OPENSIM) || defined(SINGLEGRID) // Hide the opensim tab if opensim isn't enabled LLTabContainer* tab_container = getChild("pref core"); if (tab_container) @@ -824,9 +824,11 @@ BOOL LLFloaterPreference::postBuild() if (opensim_panel) tab_container->removeTabPanel(opensim_panel); } +#endif +#if defined(OPENSIM) && !defined(SINGLEGRID) + childSetEnabled("show_grid_selection_check", !gSavedSettings.getBOOL("FSOpenSimAlwaysForceShowGrid")); +#endif // -#endif // OPENSIM // - // Pie menu gSavedSettings.getControl("OverridePieColors")->getSignal()->connect(boost::bind(&LLFloaterPreference::onPieColorsOverrideChanged, this)); diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 93e4c45747..30f1c1bf0d 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -3844,7 +3844,12 @@ LLFolderType::EType LLFolderBridge::getPreferredType() const LLViewerInventoryCategory* cat = getCategory(); if(cat) { - // Special virtual system folder icons + // Special virtual system folder icons; Since these folders can be user-created + // and not protected, we will assign the folder type here instead of in + // LLFolderDictionary. By latter and not declaring them as protected so the user + // could delete them if they desire, they would not show up within the list of + // protected folders in inventory, by underneath them among the other normal + // folders, which is not desired. //preferred_type = cat->getPreferredType(); std::string catName(cat->getName()); if (catName == ROOT_FIRESTORM_FOLDER) preferred_type = LLFolderType::FT_FIRESTORM; diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp index 776f31b929..cb488df598 100644 --- a/indra/newview/llinventoryfilter.cpp +++ b/indra/newview/llinventoryfilter.cpp @@ -49,6 +49,9 @@ // Firestorm includes #include "llappearancemgr.h" // needed to query whether we are in COF +#ifdef OPENSIM +#include "fsgridhandler.h" // need to check if in opensim +#endif LLTrace::BlockTimerStatHandle FT_FILTER_CLIPBOARD("Filter Clipboard"); @@ -283,6 +286,14 @@ bool LLInventoryFilter::checkFolder(const LLUUID& folder_id) const if (!cat) return folder_id.isNull(); LLFolderType::EType cat_type = cat->getPreferredType(); +// FIRE-30501 suitcase missing on 32 bit viewer. +#ifdef OPENSIM + if (LLGridManager::getInstance()->isInOpenSim() && cat_type == LLFolderType::FT_MY_SUITCASE) + { + return true; // suitcase will always be shown + } +#endif +// if (cat_type != LLFolderType::FT_NONE && (1LL << cat_type & mFilterOps.mFilterCategoryTypes) == U64(0)) return false; } diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp index 9769ca4c9d..bba1f00eb2 100644 --- a/indra/newview/llinventoryfunctions.cpp +++ b/indra/newview/llinventoryfunctions.cpp @@ -2707,7 +2707,15 @@ void LLInventoryAction::doToSelected(LLInventoryModel* model, LLFolderView* root if (folder_item) { LLInvFVBridge* bridge = dynamic_cast(folder_item->getViewModelItem()); - if (!bridge || !bridge->isMultiPreviewAllowed()) + // FIRE-30518: Multi-preview not working for contents of rezzed objects + // This should prevent multi-previews of settings, but for object inventory items + // this check is always false, since content items in object inventories + // have LLTaskInvFVBridges instead of LLInvFVBridges. Since settings can't be + // opened from inside objects anyway, so restrict the check for actions performed + // on avatar inventories. + //if (!bridge || !bridge->isMultiPreviewAllowed()) + if ("open" == action && (!bridge || !bridge->isMultiPreviewAllowed())) + // { open_multi_preview = false; break; diff --git a/indra/newview/llmodelpreview.cpp b/indra/newview/llmodelpreview.cpp index 293876692c..3cbe727461 100644 --- a/indra/newview/llmodelpreview.cpp +++ b/indra/newview/llmodelpreview.cpp @@ -1084,7 +1084,9 @@ void LLModelPreview::loadModelCallback(S32 loaded_lod) { fmp->enableViewOption("show_joint_overrides"); mViewOption["show_joint_overrides"] = true; + fmp->childSetValue("show_joint_overrides", true); // make sure option appears checked, when value is being forced true fmp->enableViewOption("show_joint_positions"); + fmp->childSetValue("show_joint_positions", true); // make sure option appears checked, when value is being forced true mViewOption["show_joint_positions"] = true; fmp->childSetValue("upload_joints", true); } @@ -2998,6 +3000,8 @@ BOOL LLModelPreview::render() static LLCachedControl deg_fill_col(gSavedSettings, "MeshPreviewDegenerateFillColor"); static LLCachedControl deg_edge_width(gSavedSettings, "MeshPreviewDegenerateEdgeWidth"); static LLCachedControl deg_point_size(gSavedSettings, "MeshPreviewDegeneratePointSize"); + static LLCachedControl auto_enable_weight_upload(gSavedSettings, "FSMeshUploadAutoEnableWeights"); + static LLCachedControl auto_enable_show_weights(gSavedSettings, "FSMeshUploadAutoShowWeightsWhenEnabled"); // S32 width = getWidth(); @@ -3078,17 +3082,39 @@ BOOL LLModelPreview::render() { // auto enable weight upload if weights are present // (note: all these UI updates need to be somewhere that is not render) - mViewOption["show_skin_weight"] = true; - skin_weight = true; - fmp->childSetValue("upload_skin", true); + // BUG-229632 auto enable weights slows manual workflow + // mViewOption["show_skin_weight"] = true; + // skin_weight = true; + // fmp->childSetValue("upload_skin", true); + LL_DEBUGS("MeshUpload") << "FSU auto_enable_weights_upload = " << auto_enable_weight_upload() << LL_ENDL; + LL_DEBUGS("MeshUpload") << "FSU auto_enable_show_weights = " << auto_enable_show_weights() << LL_ENDL; + upload_skin=auto_enable_weight_upload(); + fmp->childSetValue("upload_skin", upload_skin); + + skin_weight = upload_skin && auto_enable_show_weights(); + mViewOption["show_skin_weight"] = skin_weight; + mFMP->childSetValue("show_skin_weight", skin_weight); + fmp->setViewOptionEnabled("show_skin_weight", upload_skin); + fmp->setViewOptionEnabled("show_joint_overrides", upload_skin); + fmp->setViewOptionEnabled("show_joint_positions", upload_skin); + // mFirstSkinUpdate = false; } - - fmp->enableViewOption("show_skin_weight"); - fmp->setViewOptionEnabled("show_joint_overrides", skin_weight); - fmp->setViewOptionEnabled("show_joint_positions", skin_weight); + // BUG-229632 auto enable weights slows manual workflow + // fmp->enableViewOption("show_skin_weight"); + // fmp->setViewOptionEnabled("show_joint_overrides", skin_weight); + // fmp->setViewOptionEnabled("show_joint_posi + else + { + LL_DEBUGS("MeshUpload") << "NOT FSU auto_enable_weights_upload = " << auto_enable_weight_upload() << LL_ENDL; + LL_DEBUGS("MeshUpload") << "NOT FSU auto_enable_show_weights = " << auto_enable_show_weights() << LL_ENDL; + fmp->setViewOptionEnabled("show_skin_weight", upload_skin); + fmp->setViewOptionEnabled("show_joint_overrides", upload_skin); + fmp->setViewOptionEnabled("show_joint_positions", upload_skin); + } + // mFMP->childEnable("upload_skin"); - mFMP->childSetValue("show_skin_weight", skin_weight); + // mFMP->childSetValue("show_skin_weight", skin_weight); // BUG-229632 } else if ((flags & LEGACY_RIG_FLAG_TOO_MANY_JOINTS) > 0) @@ -3099,6 +3125,12 @@ BOOL LLModelPreview::render() { mFMP->childSetVisible("skin_unknown_joint", true); } + // defensive code to wanr for incorrect flags - no behavioural change + else + { + LL_WARNS("MeshUpload") << "Unexpected flags combination on weights check" << LL_ENDL; + } + // } } else diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp index 40f4bb9981..157fa4e182 100644 --- a/indra/newview/llpanelobject.cpp +++ b/indra/newview/llpanelobject.cpp @@ -471,6 +471,7 @@ void LLPanelObject::getState( ) root_objectp = objectp; } } + deactivateMeshFields(); } LLCalc* calcp = LLCalc::getInstance(); diff --git a/indra/newview/llscriptfloater.cpp b/indra/newview/llscriptfloater.cpp index c4d54afc40..16b52a2d0b 100644 --- a/indra/newview/llscriptfloater.cpp +++ b/indra/newview/llscriptfloater.cpp @@ -559,10 +559,11 @@ void LLScriptFloaterManager::onAddNotification(const LLUUID& notification_id) if(it != mNotifications.end()) { + auto old_id = it->first; // store UUID to prevent use after free - Rye LLChicletPanel * chiclet_panelp = LLChicletBar::getInstance()->getChicletPanel(); if (NULL != chiclet_panelp) { - LLIMChiclet * chicletp = chiclet_panelp->findChiclet(it->first); + LLIMChiclet * chicletp = chiclet_panelp->findChiclet(old_id); // avoid use after free - Rye if (NULL != chicletp) { // Pass the new_message icon state further. @@ -571,14 +572,14 @@ void LLScriptFloaterManager::onAddNotification(const LLUUID& notification_id) } } - LLScriptFloater* floater = LLFloaterReg::findTypedInstance("script_floater", it->first); + LLScriptFloater* floater = LLFloaterReg::findTypedInstance("script_floater", old_id); // avoid use after free - Rye if (floater) { // Generate chiclet with a "new message" indicator if a docked window was opened but not in focus. See EXT-3142. set_new_message |= !floater->hasFocus(); } - removeNotification(it->first); + removeNotification(old_id); } } diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index 4763f1e263..e50f137fbb 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -5639,9 +5639,18 @@ void LLSelectMgr::processObjectProperties(LLMessageSystem* msg, void** user_data } else { - if (node->mInventorySerial != inv_serial && node->getObject()) + // FIRE-19738 Object content caching improvement + // if (node->mInventorySerial != inv_serial && node->getObject()) + // { + // node->getObject()->dirtyInventory(); + if ( node->mInventorySerial != inv_serial ) { - node->getObject()->dirtyInventory(); + auto obj = node->getObject(); + if( obj && obj->getInventorySerial() != inv_serial ) + { + obj->dirtyInventory(); + } + // } // save texture data as soon as we get texture perms first time diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index 21ba829ac0..a342399d53 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -1286,8 +1286,6 @@ BOOL LLToolPie::handleTooltipObject( LLViewerObject* hover_object, std::string l final_name = LLTrans::getString("TooltipPerson");; } - // *HACK: We may select this object, so pretend it was clicked - mPick = mHoverPick; // [RLVa:KB] - Checked: RLVa-1.2.0 if ( (!RlvActions::isRlvEnabled()) || ( (RlvActions::canInteract(hover_object, mHoverPick.mObjectOffset)) && (RlvActions::canShowName(RlvActions::SNC_DEFAULT, hover_object->getID())) ) ) @@ -1558,8 +1556,6 @@ BOOL LLToolPie::handleTooltipObject( LLViewerObject* hover_object, std::string l if (show_all_object_tips || needs_tip) { - // We may select this object, so pretend it was clicked - mPick = mHoverPick; // [RLVa:KB] - Checked: RLVa-1.2.1 if ( (!RlvActions::isRlvEnabled()) || (RlvActions::canInteract(hover_object, mHoverPick.mObjectOffset)) ) { diff --git a/indra/newview/llviewerfoldertype.cpp b/indra/newview/llviewerfoldertype.cpp index 9142301f38..3348ae35b4 100644 --- a/indra/newview/llviewerfoldertype.cpp +++ b/indra/newview/llviewerfoldertype.cpp @@ -181,6 +181,9 @@ LLViewerFolderDictionary::LLViewerFolderDictionary() addEntry(LLFolderType::FT_RLV, new ViewerFolderEntry("RLV", "Inv_RLVOpen", "Inv_RLVClosed", FALSE, true)); // Special Firestorm folder + // OpenSim HG-support + addEntry(LLFolderType::FT_MY_SUITCASE, new ViewerFolderEntry("My Suitcase", "Inv_SuitcaseOpen", "Inv_SuitcaseClosed", FALSE, true)); + for (U32 type = (U32)LLFolderType::FT_ENSEMBLE_START; type <= (U32)LLFolderType::FT_ENSEMBLE_END; ++type) { addEntry((LLFolderType::EType)type, new ViewerFolderEntry("New Folder", "Inv_FolderOpen", "Inv_FolderClosed", FALSE, false)); diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 2cbb6504a4..8054e5eeff 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -4644,11 +4644,11 @@ class FSSelfToggleMoveLock : public view_listener_t gSavedPerAccountSettings.setBOOL("UseMoveLock", new_value); if (new_value) { - report_to_nearby_chat(LLTrans::getString("MovelockEnabling")); + LLNotificationsUtil::add("MovelockEnabling", LLSD()); } else { - report_to_nearby_chat(LLTrans::getString("MovelockDisabling")); + LLNotificationsUtil::add("MovelockDisabling", LLSD()); } } #ifdef OPENSIM diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index d9a8951207..1ef53c5db2 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -5294,7 +5294,7 @@ LLViewerObject* LLViewerWindow::cursorIntersect(S32 mouse_x, S32 mouse_y, F32 de LLVector3 mouse_world_start = mouse_point_global; LLVector3 mouse_world_end = mouse_point_global + mouse_direction_global * depth; - if (!LLViewerJoystick::getInstance()->getOverrideCamera()) + if (!LLViewerJoystick::getInstance()->getOverrideCamera() && !gPipeline.FSFocusPointFollowsPointer) // FIRE-16728 Add free aim mouse and focus lock { //always set raycast intersection to mouse_world_end unless //flycam is on (for DoF effect) gDebugRaycastIntersection.load3(mouse_world_end.mV); diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 65108f84cf..caa6765758 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -4779,7 +4779,12 @@ void LLVOAvatar::updateOrientation(LLAgent& agent, F32 speed, F32 delta_time) } else { - pelvis_lag_time = PELVIS_LAG_WALKING; + // FIRE-29581 remove stones from wet sack for Willow + // pelvis_lag_time = PELVIS_LAG_WALKING; + static constexpr F32 turn_rate_delta{0.0019f}; // linear scale + static LLCachedControl turn_speed(gSavedSettings, "FSAvatarTurnSpeed", 0.0f); // 0 is default. We can't go slower. + pelvis_lag_time = llmax(PELVIS_LAG_WALKING - (llclamp(turn_speed(), 0.f, 100.f) * turn_rate_delta), F_ALMOST_ZERO); + // } F32 u = llclamp((delta_time / pelvis_lag_time), 0.0f, 1.0f); diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index 22f4d0ef94..87a03836a7 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -759,7 +759,7 @@ BOOL LLVOAvatarSelf::buildMenus() item = LLUICtrlFactory::create(item_params); gDetachScreenPieMenu->addChild(item); // FIRE-7893: "Detach" sub-menu on inspect menu without function - gInspectSelfDetachScreenMenu->addChild(item); + gInspectSelfDetachScreenMenu->addChild(LLUICtrlFactory::create(item_params)); // Pie menu slice_params.name =(slice_params.label ); diff --git a/indra/newview/piemenu.cpp b/indra/newview/piemenu.cpp index 814e915680..4b802811e8 100644 --- a/indra/newview/piemenu.cpp +++ b/indra/newview/piemenu.cpp @@ -272,11 +272,13 @@ void PieMenu::draw() gl_rect_2d(0, r.getHeight(), r.getWidth(), 0, LLColor4::white, FALSE); #endif + LLUIColorTable& colortable = LLUIColorTable::instance(); + // set up pie menu colors - LLColor4 lineColor = LLUIColorTable::instance().getColor("PieMenuLineColor"); - LLColor4 selectedColor = LLUIColorTable::instance().getColor("PieMenuSelectedColor"); - LLColor4 textColor = LLUIColorTable::instance().getColor("PieMenuTextColor"); - LLColor4 bgColor = LLUIColorTable::instance().getColor("PieMenuBgColor"); + LLColor4 lineColor = colortable.getColor("PieMenuLineColor"); + LLColor4 selectedColor = colortable.getColor("PieMenuSelectedColor"); + LLColor4 textColor = colortable.getColor("PieMenuTextColor"); + LLColor4 bgColor = colortable.getColor("PieMenuBgColor"); LLColor4 borderColor = bgColor % 0.3f; // if the user wants their own colors, apply them here @@ -285,9 +287,9 @@ void PieMenu::draw() { static LLCachedControl sPieMenuOpacity(gSavedSettings, "PieMenuOpacity"); static LLCachedControl sPieMenuFade(gSavedSettings, "PieMenuFade"); - bgColor = LLUIColorTable::instance().getColor("PieMenuBgColorOverride") % sPieMenuOpacity; + bgColor = colortable.getColor("PieMenuBgColorOverride") % sPieMenuOpacity; borderColor = bgColor % (1.f - sPieMenuFade); - selectedColor = LLUIColorTable::instance().getColor("PieMenuSelectedColorOverride"); + selectedColor = colortable.getColor("PieMenuSelectedColorOverride"); } static LLCachedControl sPieMenuPopupFontEffect(gSavedSettings, "PieMenuPopupFontEffect"); static LLCachedControl sPieMenuOuterRingShade(gSavedSettings, "PieMenuOuterRingShade"); @@ -300,11 +302,8 @@ void PieMenu::draw() S32 steps = 100; - // remember to take the UI scaling into account - LLVector2 scale = gViewerWindow->getDisplayScale(); - // move origin point to the center of our rectangle - gGL.translatef(r.getWidth() / 2.f * scale.mV[VX], r.getHeight() / 2.f * scale.mV[VY], 0.f); + LLUI::instance().translate(r.getWidth() / 2.f, r.getHeight() / 2.f); // draw the general pie background gl_washer_2d(PIE_OUTER_SIZE * factor, PIE_INNER_SIZE, steps, bgColor, borderColor); diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 9ff89a4651..06225f21c1 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -185,6 +185,10 @@ bool LLPipeline::RenderDepthOfFieldInEditMode; // FIRE-16251: Depth of field does not work underwater bool LLPipeline::FSRenderDepthOfFieldUnderwater; // FIRE-16251 +// FIRE-16728 Add free aim mouse and focus lock +bool LLPipeline::FSFocusPointLocked; +bool LLPipeline::FSFocusPointFollowsPointer; +// F32 LLPipeline::CameraFocusTransitionTime; F32 LLPipeline::CameraFNumber; F32 LLPipeline::CameraFocalLength; @@ -658,6 +662,10 @@ void LLPipeline::init() connectRefreshCachedSettingsSafe("RenderAttachedLights"); connectRefreshCachedSettingsSafe("RenderAttachedParticles"); // + // FIRE-16728 Add free aim mouse and focus lock + connectRefreshCachedSettingsSafe("FSFocusPointLocked"); + connectRefreshCachedSettingsSafe("FSFocusPointFollowsPointer"); + // } LLPipeline::~LLPipeline() @@ -805,7 +813,10 @@ void LLPipeline::requestResizeShadowTexture() void LLPipeline::resizeShadowTexture() { releaseShadowTargets(); - allocateShadowBuffer(mScreenWidth, mScreenHeight); + // FIRE-30538 don;t pass zero screen size to shadow buff allocator + // allocateShadowBuffer(mScreenWidth, mScreenHeight); + allocateShadowBuffer( mScreen.getWidth(), mScreen.getHeight() ); + // gResizeShadowTexture = FALSE; } @@ -1227,6 +1238,10 @@ void LLPipeline::refreshCachedSettings() // FIRE-16251: Depth of Field does not work underwater FSRenderDepthOfFieldUnderwater = gSavedSettings.getBOOL("FSRenderDoFUnderwater"); // FIRE-16251 + // FIRE-16728 Add free aim mouse and focus lock + FSFocusPointLocked = gSavedSettings.getBOOL("FSFocusPointLocked"); + FSFocusPointFollowsPointer = gSavedSettings.getBOOL("FSFocusPointFollowsPointer"); + // CameraFocusTransitionTime = gSavedSettings.getF32("CameraFocusTransitionTime"); CameraFNumber = gSavedSettings.getF32("CameraFNumber"); CameraFocalLength = gSavedSettings.getF32("CameraFocalLength"); @@ -4252,11 +4267,6 @@ void LLPipeline::renderHighlights() glStencilFunc(GL_ALWAYS, 0, 0xFFFFFFFF); glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE); - if (canUseVertexShaders()) - { - gHighlightProgram.bind(); - } - gGL.setColorMask(false, false); if (LLGLSLShader::sNoFixedFunction) @@ -7915,6 +7925,15 @@ void LLPipeline::renderFinalize() LLVector3 focus_point; + // FIRE-16728 focus point lock & free focus DoF - based on a feature developed by NiranV Dean + static LLVector3 last_focus_point{}; + if( LLPipeline::FSFocusPointLocked && !last_focus_point.isExactlyZero() ) + { + focus_point = last_focus_point; + } + else + { + // LLViewerObject *obj = LLViewerMediaFocus::getInstance()->getFocusedObject(); if (obj && obj->mDrawable && obj->isSelected()) { // focus on selected media object @@ -7928,10 +7947,11 @@ void LLPipeline::renderFinalize() } } } + }// support focus point lock if (focus_point.isExactlyZero()) { - if (LLViewerJoystick::getInstance()->getOverrideCamera()) + if (LLViewerJoystick::getInstance()->getOverrideCamera() || LLPipeline::FSFocusPointFollowsPointer) // FIRE-16728 Add free aim mouse and focus lock { // focus on point under cursor focus_point.set(gDebugRaycastIntersection.getF32ptr()); } @@ -7954,7 +7974,9 @@ void LLPipeline::renderFinalize() } } } - + // FIRE-16728 Add free aim mouse and focus lock + last_focus_point = focus_point; + // LLVector3 eye = LLViewerCamera::getInstance()->getOrigin(); F32 target_distance = 16.f; if (!focus_point.isExactlyZero()) @@ -8957,24 +8979,6 @@ void LLPipeline::renderDeferredLighting(LLRenderTarget *screen_target) // send light color to shader in linear space LLColor3 col = volume->getLightLinearColor(); - // fade also works as flicker prevention during reparenting - // because reparenting causes distance to jump temporary - F32 fade = iter->fade; - if (fade < LIGHT_FADE_TIME) - { - // fade in/out light - if (fade >= 0.f) - { - fade = fade / LIGHT_FADE_TIME; - } - else - { - fade = 1.f + fade / LIGHT_FADE_TIME; - } - fade = llclamp(fade, 0.f, 1.f); - col *= fade; - } - if (col.magVecSquared() < 0.001f) { continue; diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index 9e4fb5e7c5..75e2410147 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -958,6 +958,10 @@ public: // FIRE-16251: Depth of Field does not work underwater static bool FSRenderDepthOfFieldUnderwater; // FIRE-16251 + // FIRE-16728 + static bool FSFocusPointLocked; + static bool FSFocusPointFollowsPointer; + // static F32 CameraFocusTransitionTime; static F32 CameraFNumber; static F32 CameraFocalLength; diff --git a/indra/newview/quickprefs.cpp b/indra/newview/quickprefs.cpp index afe9251a31..81570ce6e7 100644 --- a/indra/newview/quickprefs.cpp +++ b/indra/newview/quickprefs.cpp @@ -1372,8 +1372,6 @@ void FloaterQuickPrefs::updateControl(const std::string& controlName, ControlEnt if (var) { widget->setValue(var->getValue()); - widget->setToolTip(var->getComment()); - label_textbox->setToolTip(var->getComment()); } else { diff --git a/indra/newview/res-sdl/firestorm_icon.BMP b/indra/newview/res-sdl/firestorm_icon.BMP deleted file mode 100644 index 066b6244b0..0000000000 Binary files a/indra/newview/res-sdl/firestorm_icon.BMP and /dev/null differ diff --git a/indra/newview/res/firestorm_icon.BMP b/indra/newview/res/firestorm_icon.BMP deleted file mode 100644 index 066b6244b0..0000000000 Binary files a/indra/newview/res/firestorm_icon.BMP and /dev/null differ diff --git a/indra/newview/res/firestorm_icon.ico b/indra/newview/res/firestorm_icon.ico deleted file mode 100644 index 8f59ecd435..0000000000 Binary files a/indra/newview/res/firestorm_icon.ico and /dev/null differ diff --git a/indra/newview/rlvactions.cpp b/indra/newview/rlvactions.cpp index 5fde3943e7..fd77515434 100644 --- a/indra/newview/rlvactions.cpp +++ b/indra/newview/rlvactions.cpp @@ -368,9 +368,11 @@ bool RlvActions::isLocalTp(const LLVector3d& posGlobal) // WindLight // -bool RlvActions::canChangeEnvironment() +bool RlvActions::canChangeEnvironment(const LLUUID& idRlvObject) { - return !gRlvHandler.hasBehaviour(RLV_BHVR_SETENV); + // User can (partially) change their environment settings if: + // - not specifically restricted from changing their environment (by any object other than the one specified) + return (idRlvObject.isNull()) ? !gRlvHandler.hasBehaviour(RLV_BHVR_SETENV) : !gRlvHandler.hasBehaviourExcept(RLV_BHVR_SETENV, idRlvObject); } // ============================================================================ diff --git a/indra/newview/rlvactions.h b/indra/newview/rlvactions.h index 060dc1a9c3..c1f2f46ec8 100644 --- a/indra/newview/rlvactions.h +++ b/indra/newview/rlvactions.h @@ -219,9 +219,9 @@ public: // ========= public: /* - * Returns true if the user can make changes to their WindLight environment + * Returns true if the user can make changes to their WindLight environment */ - static bool canChangeEnvironment(); + static bool canChangeEnvironment(const LLUUID& idRlvObject = LLUUID::null); // ================= diff --git a/indra/newview/rlvenvironment.cpp b/indra/newview/rlvenvironment.cpp index 91e043da23..e1bce306de 100644 --- a/indra/newview/rlvenvironment.cpp +++ b/indra/newview/rlvenvironment.cpp @@ -472,11 +472,43 @@ LLEnvironment::EnvSelection_t RlvEnvironment::getTargetEnvironment() return RlvActions::canChangeEnvironment() ? LLEnvironment::ENV_LOCAL : LLEnvironment::ENV_EDIT; } +// static +LLSettingsSky::ptr_t RlvEnvironment::getTargetSky(bool forSetCmd) +{ + LLEnvironment* pEnv = LLEnvironment::getInstance(); + + if (forSetCmd) + { + LLEnvironment::EnvSelection_t targetEnv = getTargetEnvironment(); + bool isSharedEnv = !pEnv->getEnvironmentFixedSky(targetEnv), + hasLocalDayCycle = !isSharedEnv && pEnv->getEnvironmentDay(targetEnv), + isLocalTransition = !hasLocalDayCycle && pEnv->getCurrentEnvironmentInstance()->isTransition(); + if ( (isSharedEnv) || (hasLocalDayCycle) || (isLocalTransition) ) + { + LLSettingsSky::ptr_t pSky = (isSharedEnv) ? pEnv->getEnvironmentFixedSky(LLEnvironment::ENV_PARCEL, true)->buildClone() + : (hasLocalDayCycle) ? pEnv->getEnvironmentFixedSky(targetEnv)->buildClone() + : pEnv->getEnvironmentFixedSky(targetEnv); + pEnv->setEnvironment(targetEnv, pSky); + pEnv->setSelectedEnvironment(targetEnv, LLEnvironment::TRANSITION_INSTANT); + pEnv->updateEnvironment(LLEnvironment::TRANSITION_INSTANT); + } + } + + return pEnv->getCurrentSky(); +} + + // static bool RlvEnvironment::onHandleCommand(const RlvCommand& rlvCmd, ERlvCmdRet& cmdRet, const std::string& strCmdPrefix, const handler_map_t& fnLookup, const legacy_handler_map_t& legacyFnLookup) { if ( (rlvCmd.getBehaviour().length() > strCmdPrefix.length() + 2) && (boost::starts_with(rlvCmd.getBehaviour(), strCmdPrefix)) ) { + if ( (RLV_TYPE_FORCE == rlvCmd.getParamType()) && (!RlvActions::canChangeEnvironment(rlvCmd.getObjectID())) ) + { + cmdRet = RLV_RET_FAILED_LOCK; + return true; + } + std::string strEnvCommand = rlvCmd.getBehaviour().substr(strCmdPrefix.length()); handler_map_t::const_iterator itFnEntry = fnLookup.find(strEnvCommand); @@ -517,21 +549,21 @@ bool RlvEnvironment::onForceCommand(const RlvCommand& rlvCmd, ERlvCmdRet& cmdRet template<> std::string RlvEnvironment::handleGetFn(const std::function& fn) { - LLSettingsSky::ptr_t pSky = LLEnvironment::instance().getCurrentSky(); + LLSettingsSky::ptr_t pSky = getTargetSky(); return std::to_string(fn(pSky)); } template<> std::string RlvEnvironment::handleGetFn(const std::function& fn) { - LLSettingsSky::ptr_t pSky = LLEnvironment::instance().getCurrentSky(); + LLSettingsSky::ptr_t pSky = getTargetSky(); return fn(pSky).asString(); } template<> std::string RlvEnvironment::handleGetFn(const std::function& fn) { - LLSettingsSky::ptr_t pSky = LLEnvironment::instance().getCurrentSky(); + LLSettingsSky::ptr_t pSky = getTargetSky(); LLVector2 replyVec = fn(pSky); return llformat("%f/%f", replyVec.mV[VX], replyVec.mV[VY]); } @@ -539,7 +571,7 @@ std::string RlvEnvironment::handleGetFn(const std::function std::string RlvEnvironment::handleGetFn(const std::function& fn) { - LLSettingsSky::ptr_t pSky = LLEnvironment::instance().getCurrentSky(); + LLSettingsSky::ptr_t pSky = getTargetSky(); LLColor3 replyColor = fn(pSky); return llformat("%f/%f/%f", replyColor.mV[VX], replyColor.mV[VY], replyColor.mV[VZ]); } @@ -551,7 +583,7 @@ ERlvCmdRet RlvEnvironment::handleSetFn(const std::string& strRlvOption, const st if (!RlvCommandOptionHelper::parseOption(strRlvOption, optionValue)) return RLV_RET_FAILED_PARAM; - LLSettingsSky::ptr_t pSky = LLEnvironment::instance().getCurrentSky(); + LLSettingsSky::ptr_t pSky = getTargetSky(true); fn(pSky, optionValue); pSky->update(); return RLV_RET_SUCCESS; @@ -562,7 +594,7 @@ std::string RlvEnvironment::handleLegacyGetFn(const std::function= 2) return LLStringUtil::null; - return std::to_string(getFn(LLEnvironment::instance().getCurrentSky()).mV[idxComponent]); + return std::to_string(getFn(getTargetSky()).mV[idxComponent]); } template<> @@ -570,11 +602,11 @@ std::string RlvEnvironment::handleLegacyGetFn(const std::function= VRED) && (idxComponent <= VBLUE) ) { - return std::to_string(getFn(LLEnvironment::instance().getCurrentSky()).mV[idxComponent]); + return std::to_string(getFn(getTargetSky()).mV[idxComponent]); } else if (idxComponent == VALPHA) { - const LLColor3& clr = getFn(LLEnvironment::instance().getCurrentSky()); + const LLColor3& clr = getFn(getTargetSky()); return std::to_string(llmax(clr.mV[VRED], clr.mV[VGREEN], clr.mV[VBLUE])); } return LLStringUtil::null; @@ -586,7 +618,7 @@ ERlvCmdRet RlvEnvironment::handleLegacySetFn(float optionValue, LLVec if (idxComponent >= 2) return RLV_RET_FAILED_UNKNOWN; - LLSettingsSky::ptr_t pSky = LLEnvironment::instance().getCurrentSky(); + LLSettingsSky::ptr_t pSky = getTargetSky(true); curValue.mV[idxComponent] = optionValue; setFn(pSky, curValue); pSky->update(); @@ -597,7 +629,7 @@ ERlvCmdRet RlvEnvironment::handleLegacySetFn(float optionValue, LLVec template<> ERlvCmdRet RlvEnvironment::handleLegacySetFn(float optionValue, LLColor3 curValue, const std::function& setFn, U32 idxComponent) { - LLSettingsSky::ptr_t pSky = LLEnvironment::instance().getCurrentSky(); + LLSettingsSky::ptr_t pSky = getTargetSky(true); if ( (idxComponent >= VRED) && (idxComponent <= VBLUE) ) { curValue.mV[idxComponent] = optionValue; @@ -691,7 +723,7 @@ void RlvEnvironment::registerLegacySkyFn(const std::string& strFnName, const std float optionValue; if (!RlvCommandOptionHelper::parseOption(strRlvOption, optionValue)) return RLV_RET_FAILED_PARAM; - return handleLegacySetFn(optionValue, getFn(LLEnvironment::instance().getCurrentSky()), setFn, idxComponent);; + return handleLegacySetFn(optionValue, getFn(getTargetSky(true)), setFn, idxComponent);; })); } diff --git a/indra/newview/rlvenvironment.h b/indra/newview/rlvenvironment.h index 2d19ab2341..146160ea79 100644 --- a/indra/newview/rlvenvironment.h +++ b/indra/newview/rlvenvironment.h @@ -34,6 +34,7 @@ public: bool onForceCommand(const RlvCommand& rlvCmd, ERlvCmdRet& cmdRet) override; protected: static LLEnvironment::EnvSelection_t getTargetEnvironment(); + static LLSettingsSky::ptr_t getTargetSky(bool forSetCmd = false); typedef std::map> handler_map_t; typedef std::map> legacy_handler_map_t; static bool onHandleCommand(const RlvCommand& rlvCmd, ERlvCmdRet& cmdRet, const std::string& strCmdPrefix, const handler_map_t& fnLookup, const legacy_handler_map_t& legacyFnLookup); diff --git a/indra/newview/rlvhandler.cpp b/indra/newview/rlvhandler.cpp index e3e803ca09..92170975ed 100644 --- a/indra/newview/rlvhandler.cpp +++ b/indra/newview/rlvhandler.cpp @@ -2518,7 +2518,7 @@ void RlvBehaviourToggleHandler::onCommandToggle(ERlvBehaviour template<> template<> void RlvBehaviourToggleHandler::onCommandToggle(ERlvBehaviour eBhvr, bool fHasBhvr) { - if (LLApp::isExiting()) + if (LLApp::isExiting() || gDoDisconnect) return; // Nothing to do if the viewer is shutting down // Update the shownames context @@ -2530,10 +2530,10 @@ void RlvBehaviourToggleHandler::onCommandToggle(ERlvBehaviou //RLV_ASSERT( (pPeoplePanel) && (pPeoplePanel->getNearbyList()) ); //if ( (pPeoplePanel) && (pPeoplePanel->getNearbyList()) ) // pPeoplePanel->getNearbyList()->updateAvatarNames(); - FSRadar* pRadar = FSRadar::getInstance(); - RLV_ASSERT( (pRadar) ); - if ( (pRadar) ) - pRadar->updateNames(); + if (FSRadar::instanceExists()) + { + FSRadar::instance().updateNames(); + } // [Standalone radar] // Refresh the speaker list diff --git a/indra/newview/skins/ansastorm/textures/textures.xml b/indra/newview/skins/ansastorm/textures/textures.xml index 0ad1b8233b..efce37cd02 100644 --- a/indra/newview/skins/ansastorm/textures/textures.xml +++ b/indra/newview/skins/ansastorm/textures/textures.xml @@ -86,6 +86,9 @@ + + + diff --git a/indra/newview/skins/default/textures/legacy/inv_folder_suitcase.tga b/indra/newview/skins/default/textures/legacy/inv_folder_suitcase.tga new file mode 100644 index 0000000000..9f207af30c Binary files /dev/null and b/indra/newview/skins/default/textures/legacy/inv_folder_suitcase.tga differ diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index 1a2399378c..911a0dda77 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -394,6 +394,9 @@ with the same filename but different name + + + diff --git a/indra/newview/skins/default/xui/de/floater_model_preview.xml b/indra/newview/skins/default/xui/de/floater_model_preview.xml index 5485b6d70a..6e9572fd8e 100644 --- a/indra/newview/skins/default/xui/de/floater_model_preview.xml +++ b/indra/newview/skins/default/xui/de/floater_model_preview.xml @@ -359,18 +359,35 @@ - - - Hinweis: -Zu viele Objekte nutzen unnötigerweise den Standard-Anhängepunkt (Rechte Hand). - -Bitte ziehen Sie einen anderen Anhängepunkt nahe der Objektposition in Betracht. - - + + + Modell-Upload-Verhaltenseinstellungen: + + + + + Farben für Modell-Upload: + + + Allgemein: + + + + + Physik: + + + + + Physik-Probleme: + + + +