From a47ebd7864f6dceedd52ceef56a30786f38a00c2 Mon Sep 17 00:00:00 2001 From: McCabe Maxsted Date: Tue, 15 Mar 2011 17:12:51 -0700 Subject: Don't use the build window keyboard shortcuts when the UI has focus (except for the chatbar) --- linden/indra/newview/lltoolmgr.cpp | 21 +++++++++++++++++---- linden/indra/newview/llviewerwindow.cpp | 10 ++++++++++ linden/indra/newview/llviewerwindow.h | 3 +++ 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/linden/indra/newview/lltoolmgr.cpp b/linden/indra/newview/lltoolmgr.cpp index 8204374..764ca9d 100644 --- a/linden/indra/newview/lltoolmgr.cpp +++ b/linden/indra/newview/lltoolmgr.cpp @@ -34,6 +34,8 @@ #include "lltoolmgr.h" +#include "llchatbar.h" +#include "llfloatertools.h" #include "lltool.h" // tools and manipulators #include "llmanipscale.h" @@ -191,11 +193,22 @@ LLTool* LLToolMgr::getCurrentTool() else { // due to window management weirdness we can get here with gToolNull - bool can_override = mBaseTool && (mBaseTool != gToolNull); - mOverrideTool = can_override ? mBaseTool->getOverrideTool(override_mask) : NULL; + // Don't use keyboard overrides when the edit window doesn't have focus. The chatbar is an unfortunate exception -- MC + if (gViewerWindow && gViewerWindow->getUIHasFocus() + && gFloaterTools && !gFloaterTools->hasFocus() + && gChatBar && !gChatBar->getVisible()) + { + cur_tool = mBaseTool; + } + else + { + bool can_override = mBaseTool && (mBaseTool != gToolNull) ; + + mOverrideTool = can_override ? mBaseTool->getOverrideTool(override_mask) : NULL; - // use keyboard-override tool if available otherwise drop back to base tool - cur_tool = mOverrideTool ? mOverrideTool : mBaseTool; + // use keyboard-override tool if available otherwise drop back to base tool + cur_tool = mOverrideTool ? mOverrideTool : mBaseTool; + } } LLTool* prev_tool = mSelectedTool; diff --git a/linden/indra/newview/llviewerwindow.cpp b/linden/indra/newview/llviewerwindow.cpp index b4ef3ff..8423f4b 100644 --- a/linden/indra/newview/llviewerwindow.cpp +++ b/linden/indra/newview/llviewerwindow.cpp @@ -5011,6 +5011,16 @@ LLRect LLViewerWindow::getChatConsoleRect() return console_rect; } + +bool LLViewerWindow::getUIHasFocus() +{ + return gFocusMgr.getKeyboardFocus() != NULL + || LLMenuGL::getKeyboardMode() + || (gMenuBarView && gMenuBarView->getHighlightedItem() && gMenuBarView->getHighlightedItem()->isActive()) + || gFocusMgr.childHasKeyboardFocus(mRootView); +} + + //---------------------------------------------------------------------------- diff --git a/linden/indra/newview/llviewerwindow.h b/linden/indra/newview/llviewerwindow.h index fd159e1..6b8e2b7 100644 --- a/linden/indra/newview/llviewerwindow.h +++ b/linden/indra/newview/llviewerwindow.h @@ -195,6 +195,9 @@ public: S32 getWindowDisplayHeight() const; S32 getWindowDisplayWidth() const; + // Returns true when the UI has focus, false when the 3D world does + bool getUIHasFocus(); + // Window in scaled pixels (via UI scale), use this for // UI elements checking size. const LLRect& getVirtualWindowRect() const { return mVirtualWindowRect; }; -- cgit v1.1