diff --git a/indra/llui/llbutton.h b/indra/llui/llbutton.h index 8e21ce4d54..43a7cd6b3b 100644 --- a/indra/llui/llbutton.h +++ b/indra/llui/llbutton.h @@ -415,7 +415,10 @@ private: protected: virtual std::string _getSearchText() const override { - return getLabelUnselected() + getToolTip(); + // Look in name attributes, making search independent from localization + // return getLabelUnselected() + getToolTip(); + return getLabelUnselected() + getToolTip() + getName(); + // } }; diff --git a/indra/llui/llcheckboxctrl.h b/indra/llui/llcheckboxctrl.h index 0cde54326f..4d138b6156 100644 --- a/indra/llui/llcheckboxctrl.h +++ b/indra/llui/llcheckboxctrl.h @@ -143,7 +143,10 @@ private: protected: virtual std::string _getSearchText() const { - return getLabel() + getToolTip(); + // Look in name attributes, making search independent from localization + // return getLabel() + getToolTip(); + return getLabel() + getToolTip() + getName(); + // } virtual void onSetHighlight() const // When highlight, really do highlight the label diff --git a/indra/llui/llcombobox.cpp b/indra/llui/llcombobox.cpp index fdfa0aa45a..a704527568 100644 --- a/indra/llui/llcombobox.cpp +++ b/indra/llui/llcombobox.cpp @@ -1220,7 +1220,10 @@ std::string LLComboBox::_getSearchText() const iter++; } } - return res + getToolTip(); + // Look in name attributes, making search independent from localization + // return res + getToolTip(); + return res + getToolTip() + getName(); + // } //virtual diff --git a/indra/llui/llsliderctrl.h b/indra/llui/llsliderctrl.h index 311377a61f..30b03c6e3d 100644 --- a/indra/llui/llsliderctrl.h +++ b/indra/llui/llsliderctrl.h @@ -140,7 +140,10 @@ protected: std::string strLabel; if( mLabelBox ) strLabel = mLabelBox->getLabel(); - return strLabel + getToolTip(); + // Look in name attributes, making search independent from localization + // return strLabel + getToolTip(); + return strLabel + getToolTip() + getName(); + // } virtual void onSetHighlight() const // When highlight, really do highlight the label { diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h index 6d12190981..0282174607 100644 --- a/indra/llui/lltextbase.h +++ b/indra/llui/lltextbase.h @@ -728,7 +728,10 @@ protected: // virtual std::string _getSearchText() const override { - return mLabel.getString() + getToolTip(); + // Look in name attributes, making search independent from localization + // return mLabel.getString() + getToolTip(); + return mLabel.getString() + getToolTip() + getName(); + // } std::vector getSelectionRects(); diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 4637c807af..dde130a6b7 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -2253,7 +2253,7 @@ Type U32 Value - 120 + 60 BackgroundYieldTime @@ -24151,7 +24151,7 @@ Change of this parameter will affect the layout of buttons in notification toast Type Boolean Value - 0 + 1 FSSoundCacheLocation @@ -25997,6 +25997,17 @@ Change of this parameter will affect the layout of buttons in notification toast Value 1 + FSShowWhitelistReminder + + Comment + Show the whitelist reminder on first install. + Persist + 1 + Type + Boolean + Value + 1 + FSLimitTextureVRAMUsage Comment diff --git a/indra/newview/fsfloaterperformance.cpp b/indra/newview/fsfloaterperformance.cpp index 7576ff5eb9..81279fc469 100644 --- a/indra/newview/fsfloaterperformance.cpp +++ b/indra/newview/fsfloaterperformance.cpp @@ -315,7 +315,7 @@ void FSFloaterPerformance::draw() args["FPSCAP"] = llformat("%02u", (U32)fpsCap); args["FPSTARGET"] = llformat("%02u", (U32)targetFPS); S32 refresh_rate = gViewerWindow->getWindow()->getRefreshRate(); - args["VSYNCFREQ"] = llformat("%02d", (U32)refresh_rate); + args["VSYNCFREQ"] = llformat("%03d", (U32)refresh_rate); auto textbox = getChild("fps_warning"); // Note: the ordering of these is important. // 1) background_yield should override others diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index c81f62ff8d..a0202677c1 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -3336,8 +3336,13 @@ void login_show() //LLPanelLogin::show( gViewerWindow->getWindowRectScaled(), login_callback, NULL ); FSPanelLogin::show( gViewerWindow->getWindowRectScaled(), login_callback, NULL ); // [FS Login Panel] - - LLNotificationsUtil::add("WhitelistReminder"); // Whitelist reminder + // Whitelist reminder + if( gSavedSettings.getBOOL("FSShowWhitelistReminder") ) + { + LLNotificationsUtil::add("WhitelistReminder"); + gSavedSettings.setBOOL("FSShowWhitelistReminder", false); + } + // } // Callback for when login screen is closed. Option 0 = connect, option 1 = quit. diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp index 5284d40d86..f6e682dd5e 100644 --- a/indra/newview/llstatusbar.cpp +++ b/indra/newview/llstatusbar.cpp @@ -63,10 +63,12 @@ #include "llresmgr.h" #include "llworld.h" #include "llstatgraph.h" +#include "llurlaction.h" #include "llviewermedia.h" #include "llviewermenu.h" // for gMenuBarView #include "llviewerparcelmgr.h" #include "llviewerthrottle.h" +#include "llwindow.h" #include "lluictrlfactory.h" #include "lltoolmgr.h" @@ -483,7 +485,11 @@ bool LLStatusBar::postBuild() mBalancePanel = getChild("balance_bg"); mTimeMediaPanel = getChild("time_and_media_bg"); + // Make FPS a clickable button with contextual colour + // mFPSText = getChild("FPSText"); mFPSText = getChild("FPSText"); + mFPSText->setClickedCallback(std::bind(&LLUrlAction::executeSLURL, "secondlife:///app/openfloater/preferences?search=limitframerate", true)); + // mVolumeIconsWidth = mBtnVolume->getRect().mRight - mStreamToggle->getRect().mLeft; initParcelIcons(); @@ -598,8 +604,52 @@ void LLStatusBar::refresh() static LLCachedControl fsStatusBarShowFPS(gSavedSettings, "FSStatusBarShowFPS"); if (fsStatusBarShowFPS && mFPSUpdateTimer.getElapsedTimeF32() > 1.f) { + static LLCachedControl max_fps(gSavedSettings, "FramePerSecondLimit"); + static LLCachedControl limit_fps_enabled(gSavedSettings, "FSLimitFramerate"); + static LLCachedControl vsync_enabled(gSavedSettings, "RenderVSyncEnable"); + + static const auto fps_below_limit_color = LLUIColorTable::instance().getColor("Yellow"); + static const auto fps_limit_reached_color = LLUIColorTable::instance().getColor("Green"); + static const auto vsync_limit_reached_color = LLUIColorTable::instance().getColor("Green"); + static const auto fps_uncapped_color = LLUIColorTable::instance().getColor("White"); + static const auto fps_unfocussed_color = LLUIColorTable::instance().getColor("Gray"); + static auto current_fps_color = fps_uncapped_color; + mFPSUpdateTimer.reset(); - mFPSText->setText(llformat("%.1f", LLTrace::get_frame_recording().getPeriodMedianPerSec(LLStatViewer::FPS))); + const auto fps = LLTrace::get_frame_recording().getPeriodMedianPerSec(LLStatViewer::FPS); + mFPSText->setText(llformat("%.1f", fps)); + + // if background, go grey, else go white unless we have a cap (checked next) + auto fps_color{ fps_uncapped_color }; + auto window = gViewerWindow ? gViewerWindow->getWindow() : nullptr; + if ((window && !window->getVisible()) || !gFocusMgr.getAppHasFocus()) + { + fps_color = fps_unfocussed_color; + } + else + { + S32 vsync_freq{ -1 }; + if (window) + { + vsync_freq = window->getRefreshRate(); + } + + if (limit_fps_enabled && max_fps > 0) + { + fps_color = (fps >= max_fps - 1) ? fps_limit_reached_color : fps_below_limit_color; + } + // use vsync if enabled and the freq is lower than the max_fps + if (vsync_enabled && vsync_freq > 0 && (!limit_fps_enabled || vsync_freq < (S32)max_fps)) + { + fps_color = (fps >= vsync_freq - 1) ? vsync_limit_reached_color : fps_below_limit_color; + } + } + + if (current_fps_color != fps_color) + { + mFPSText->setColor(fps_color); + current_fps_color = fps_color; + } } // diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index 0f80fc3ddb..c5eb17e125 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -2352,6 +2352,7 @@ bool LLToolPie::handleRightClickPick() } else { + gMenuObject->setItemVisible("Take Multiple", (LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() > 1)); gMenuObject->show(x, y); } // diff --git a/indra/newview/skins/default/xui/az/menu_pie_object.xml b/indra/newview/skins/default/xui/az/menu_pie_object.xml index 6893e78964..740bc1c4fe 100644 --- a/indra/newview/skins/default/xui/az/menu_pie_object.xml +++ b/indra/newview/skins/default/xui/az/menu_pie_object.xml @@ -14,6 +14,7 @@ + diff --git a/indra/newview/skins/default/xui/az/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/az/panel_preferences_graphics1.xml index 4131ddb6d3..b664af7fe6 100644 --- a/indra/newview/skins/default/xui/az/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/az/panel_preferences_graphics1.xml @@ -100,7 +100,6 @@ - @@ -127,6 +126,8 @@ Dünya yeniləməsi: + + Teksturların çəkilişi: @@ -150,7 +151,6 @@ - diff --git a/indra/newview/skins/default/xui/de/menu_object.xml b/indra/newview/skins/default/xui/de/menu_object.xml index 89b728e5f1..3f8d5ee08a 100644 --- a/indra/newview/skins/default/xui/de/menu_object.xml +++ b/indra/newview/skins/default/xui/de/menu_object.xml @@ -41,9 +41,9 @@ - - - + + + diff --git a/indra/newview/skins/default/xui/de/menu_pie_object.xml b/indra/newview/skins/default/xui/de/menu_pie_object.xml index 305e989e7b..22ddce44dd 100644 --- a/indra/newview/skins/default/xui/de/menu_pie_object.xml +++ b/indra/newview/skins/default/xui/de/menu_pie_object.xml @@ -18,6 +18,7 @@ + diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml index 88c0d57f9e..1c07d8e3a6 100644 --- a/indra/newview/skins/default/xui/de/notifications.xml +++ b/indra/newview/skins/default/xui/de/notifications.xml @@ -5864,6 +5864,5 @@ Einige Antivirus-Programme können fälschlicherweise Teile von [APP_NAME] block Detaillierte Instruktionen zum whitelisten von [APP_NAME] - inklusive einer Liste von Dateien und Verzeichnissen - finden Sie in unserem Ratgeber: https://wiki.firestormviewer.org/antivirus_whitelisting - diff --git a/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml index 31514236e6..7011f62114 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml @@ -139,7 +139,6 @@ - S3TC aktivieren: @@ -193,6 +192,8 @@ Welt-Aktualisierung: + + Textur-Darstellung: @@ -229,7 +230,6 @@ - diff --git a/indra/newview/skins/default/xui/en/menu_object.xml b/indra/newview/skins/default/xui/en/menu_object.xml index 2124fc2deb..202039183a 100644 --- a/indra/newview/skins/default/xui/en/menu_object.xml +++ b/indra/newview/skins/default/xui/en/menu_object.xml @@ -290,31 +290,31 @@ - - - - - - - + - - - - + + + + + + @@ -339,8 +348,6 @@ - - diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 064f22177d..e6ba3ea4b4 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -14674,10 +14674,6 @@ Some antivirus programs may mistakenly block parts of [APP_NAME], slowing down i For detailed instructions on how to whitelist [APP_NAME] - including a list of files and folders to exclude - please visit our guide: https://wiki.firestormviewer.org/antivirus_whitelisting - diff --git a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml index 393ae7f62a..7b037da902 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml @@ -961,17 +961,6 @@ tool_tip="This checkbox enables anisotropic filtering, which is a method to enhance the quality of textures when they are viewed at relatively large angles in relation to your camera position. Usually makes them look less blurry at greater distances." top="20" width="256" /> - + + + + + - - 200.0 diff --git a/indra/newview/skins/default/xui/es/menu_pie_object.xml b/indra/newview/skins/default/xui/es/menu_pie_object.xml index ce6cae3d85..20b25e23ae 100644 --- a/indra/newview/skins/default/xui/es/menu_pie_object.xml +++ b/indra/newview/skins/default/xui/es/menu_pie_object.xml @@ -14,6 +14,7 @@ + diff --git a/indra/newview/skins/default/xui/fr/floater_fs_poser.xml b/indra/newview/skins/default/xui/fr/floater_fs_poser.xml new file mode 100644 index 0000000000..8cb140afa9 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/floater_fs_poser.xml @@ -0,0 +1,285 @@ + + + Corps + Front/sourcils + Yeux/Paupières + Joues/Lèvres + Main gauche + Bras gauche + Main droite + Bras droit + Jambes + Queue + Membres postérieurs + Ailes + Oreilles/nez + Tout l'avatar + Torse + Poitrine + Cou + Tête + Oeil droit + Oeil gauche + Front, côté gauche + Front, côté droit + Sourcil, extérieur gauche + Sourcil, milieu gauche + Sourcil, intérieur gauche + Sourcil, extérieur droit + Sourcil, milieu droit + Sourcil, intérieur droit + Paupière, en haut à gauche + Paupière, en bas à gauche + Paupière, en haut à droite + Paupière en bas à droite + Oreille en haut à gauche + Oreille en bas à gauche + Oreille en haut à droite + Oreille en bas à droite + Nez à gauche + Nez au milieu + Nez à droite + Bas de la joue gauche + Haut de la joue gauche + Bas de la joue droite + Haut de la joue droite + Mâchoire + Dents du bas + Lèvre du bas à gauche + Lèvre du bas à droite + Lèvre du bas au milieu + Base de la langue + Extrémité de la langue + Forme de la mâchoire + Milieu du front + Base du nez + Dents du haut + Lèvre supérieure à gauche + Lèvre supérieure à droite + Coin gauche de la bouche + Coin droit de la bouche + Milieu de la lèvre supérieure + Coin interne gauche de l'œil + Coin interne droit de l'œil + Arête du nez + Col + Bras entier + Avant-bras + Poignet + Base du majeur + Milieu du majeur + Extrémité du majeur + Base de l'index + Milieu de l'index + Extrémité de l'index + Base de l'annulaire + Milieu de l'annulaire + Extrémité de l'annulaire + Base de l'auriculaire + Milieu de l'auriculaire + Extrémité de l'auriculaire + Base du pouce + Milieu du pouce + Extrémité du pouce + Col + Bras entier + Avant-bras + Poignet + Base du majeur + Milieu du majeur + Extrémité du majeur + Base de l'index + Milieu de l'index + Extrémité de l'index + Base de l'annulaire + Milieu de l'annulaire + Extrémité de l'annulaire + Base de l'auriculaire + Milieu de l'auriculaire + Extrémité de l'auriculaire + Base du pouce + Milieu du pouce + Extrémité du pouce + Articulations + Gauche 1 + Gauche 2 + Gauche 3 + Gauche 4 + Pale gauche + Droite 1 + Droite 2 + Droite 3 + Droite 4 + Pale droit + Jambe droite + Genou droit + Cheville droite + Pied droit + Orteil droit + Jambe gauche + Genou gauche + Cheville gauche + Pied gauche + Orteil gauche + Base de la queue + Queue 2 + Queue 3 + Queue 4 + Queue 5 + Extrémité de la queue + Entrejambe + Membres postérieurs + Pied gauche + Gauche 2 + Gauche 3 + Gauche 4 + Pied droit + Droite 2 + Droite 3 + Droite 4 + Fesses + Ventre + Sein gauche + Sein droit + Base gauche + Base droite + Pointe gauche + Pointe droite + + + + + + + + Haut/bas : + + + + Gauche/droite : + + + + Avant/arrière : + + + + + + + + + + + + + + + + + + + + + + +