summaryrefslogtreecommitdiff
path: root/indra/newview/llviewerwindow.cpp
diff options
context:
space:
mode:
authorBrad Linden <brad@lindenlab.com>2022-12-12 17:59:34 -0800
committerBrad Linden <brad@lindenlab.com>2022-12-12 17:59:34 -0800
commiteb526fec0aadcaf30363fdfb1e253a609bf83acc (patch)
tree6071628f41ca793007b645aa30d255044ddbfe43 /indra/newview/llviewerwindow.cpp
parentc9c611fd12f55ac6d6717ba17139ba61a6db581f (diff)
parenta0c3d69c620a92d73a1008f218680fb4d0ef9255 (diff)
Merge remote-tracking branch 'origin/main' into DRTVWR-559
Diffstat (limited to 'indra/newview/llviewerwindow.cpp')
-rw-r--r--indra/newview/llviewerwindow.cpp47
1 files changed, 41 insertions, 6 deletions
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 5bbb18ed30..aecfd40b25 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -263,6 +263,8 @@ static const F32 MIN_UI_SCALE = 0.75f;
static const F32 MAX_UI_SCALE = 7.0f;
static const F32 MIN_DISPLAY_SCALE = 0.75f;
+static const char KEY_MOUSELOOK = 'M';
+
static LLCachedControl<std::string> sSnapshotBaseName(LLCachedControl<std::string>(gSavedPerAccountSettings, "SnapshotBaseName", "Snapshot"));
static LLCachedControl<std::string> sSnapshotDir(LLCachedControl<std::string>(gSavedPerAccountSettings, "SnapshotBaseDir", ""));
@@ -2196,31 +2198,36 @@ void LLViewerWindow::initWorldUI()
// Force gFloaterTools to initialize
LLFloaterReg::getInstance("build");
-
// Status bar
LLPanel* status_bar_container = getRootView()->getChild<LLPanel>("status_bar_container");
gStatusBar = new LLStatusBar(status_bar_container->getLocalRect());
- gStatusBar->setFollowsAll();
+ gStatusBar->setFollows(FOLLOWS_LEFT | FOLLOWS_TOP | FOLLOWS_RIGHT);
gStatusBar->setShape(status_bar_container->getLocalRect());
// sync bg color with menu bar
gStatusBar->setBackgroundColor( gMenuBarView->getBackgroundColor().get() );
// add InBack so that gStatusBar won't be drawn over menu
- status_bar_container->addChildInBack(gStatusBar);
- status_bar_container->setVisible(TRUE);
+ status_bar_container->addChildInBack(gStatusBar, 2/*tab order, after menu*/);
+ status_bar_container->setVisible(TRUE);
// Navigation bar
- LLPanel* nav_bar_container = getRootView()->getChild<LLPanel>("nav_bar_container");
+ LLView* nav_bar_container = getRootView()->getChild<LLView>("nav_bar_container");
LLNavigationBar* navbar = LLNavigationBar::getInstance();
navbar->setShape(nav_bar_container->getLocalRect());
navbar->setBackgroundColor(gMenuBarView->getBackgroundColor().get());
nav_bar_container->addChild(navbar);
nav_bar_container->setVisible(TRUE);
-
+
+
if (!gSavedSettings.getBOOL("ShowNavbarNavigationPanel"))
{
navbar->setVisible(FALSE);
}
+ else
+ {
+ reshapeStatusBarContainer();
+ }
+
// Top Info bar
LLPanel* topinfo_bar_container = getRootView()->getChild<LLPanel>("topinfo_bar_container");
@@ -2847,6 +2854,13 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask)
if (keyboard_focus
&& !gFocusMgr.getKeystrokesOnly())
{
+ //Most things should fall through, but mouselook is an exception,
+ //don't switch to mouselook if any floater has focus
+ if ((key == KEY_MOUSELOOK) && !(mask & (MASK_CONTROL | MASK_ALT)))
+ {
+ return TRUE;
+ }
+
LLUICtrl* cur_focus = dynamic_cast<LLUICtrl*>(keyboard_focus);
if (cur_focus && cur_focus->acceptsTextInput())
{
@@ -5949,6 +5963,27 @@ LLRect LLViewerWindow::getChatConsoleRect()
return console_rect;
}
+
+void LLViewerWindow::reshapeStatusBarContainer()
+{
+ LLPanel* status_bar_container = getRootView()->getChild<LLPanel>("status_bar_container");
+ LLView* nav_bar_container = getRootView()->getChild<LLView>("nav_bar_container");
+
+ S32 new_height = status_bar_container->getRect().getHeight();
+ S32 new_width = status_bar_container->getRect().getWidth();
+
+ if (gSavedSettings.getBOOL("ShowNavbarNavigationPanel"))
+ {
+ // Navigation bar is outside visible area, expand status_bar_container to show it
+ new_height += nav_bar_container->getRect().getHeight();
+ }
+ else
+ {
+ // collapse status_bar_container
+ new_height -= nav_bar_container->getRect().getHeight();
+ }
+ status_bar_container->reshape(new_width, new_height, TRUE);
+}
//----------------------------------------------------------------------------