From 0931799f03df4a0d573cc9162f1a81f6e3222d3b Mon Sep 17 00:00:00 2001 From: Kelly Washington Date: Fri, 24 Sep 2010 15:57:17 -0700 Subject: VWR-21377 Script editor ctrl-f fix. let some LLViews handle shortcut keys if they want. reviewed with ambroff --- indra/llui/llfocusmgr.cpp | 14 ++++++++++++++ indra/llui/llfocusmgr.h | 2 ++ indra/llui/llview.h | 5 +++++ indra/newview/llpreviewscript.h | 2 ++ indra/newview/llviewerwindow.cpp | 11 ++++++++++- 5 files changed, 33 insertions(+), 1 deletion(-) diff --git a/indra/llui/llfocusmgr.cpp b/indra/llui/llfocusmgr.cpp index 1f16d12add..7fbfd80d8d 100644 --- a/indra/llui/llfocusmgr.cpp +++ b/indra/llui/llfocusmgr.cpp @@ -315,6 +315,20 @@ void LLFocusMgr::removeKeyboardFocusWithoutCallback( const LLFocusableElement* f } } +bool LLFocusMgr::keyboardFocusHasMenus() const +{ + LLView* focus_view = dynamic_cast(mKeyboardFocus); + while( focus_view ) + { + if(focus_view->hasMenus()) + { + return true; + } + + focus_view = focus_view->getParent(); + } + return false; +} void LLFocusMgr::setMouseCapture( LLMouseHandler* new_captor ) { diff --git a/indra/llui/llfocusmgr.h b/indra/llui/llfocusmgr.h index eef82a3b5a..e09bad0187 100644 --- a/indra/llui/llfocusmgr.h +++ b/indra/llui/llfocusmgr.h @@ -118,6 +118,8 @@ public: void unlockFocus(); BOOL focusLocked() const { return mLockedView != NULL; } + bool keyboardFocusHasMenus() const; + private: LLUICtrl* mLockedView; diff --git a/indra/llui/llview.h b/indra/llui/llview.h index 6bcee98f26..706858e65c 100644 --- a/indra/llui/llview.h +++ b/indra/llui/llview.h @@ -273,6 +273,11 @@ public: BOOL focusNextRoot(); BOOL focusPrevRoot(); + // Normally we want the app menus to get priority on modified keys + // However, if this item claims to have menus then we want to give + // it first chance at handling them. (eg. the script editor) + virtual bool hasMenus() const { return false; }; + // delete all children. Override this function if you need to // perform any extra clean up such as cached pointers to selected // children, etc. diff --git a/indra/newview/llpreviewscript.h b/indra/newview/llpreviewscript.h index ef4f0d9c20..3207da4e00 100644 --- a/indra/newview/llpreviewscript.h +++ b/indra/newview/llpreviewscript.h @@ -87,6 +87,8 @@ public: static void onBtnInsertSample(void*); static void onBtnInsertFunction(LLUICtrl*, void*); + virtual bool hasMenus() const { return true; } + private: void onBtnHelp(); void onBtnDynamicHelp(); diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index b2ff39bbd2..dbc9317613 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -2136,10 +2136,20 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask) return TRUE; } + LLFocusableElement* keyboard_focus = gFocusMgr.getKeyboardFocus(); + // give menus a chance to handle modified (Ctrl, Alt) shortcut keys before current focus // as long as focus isn't locked if (mask & (MASK_CONTROL | MASK_ALT) && !gFocusMgr.focusLocked()) { + // Check the current floater's menu first, if it has one. + if (gFocusMgr.keyboardFocusHasMenus() + && keyboard_focus + && keyboard_focus->handleKey(key,mask,FALSE)) + { + return TRUE; + } + if ((gMenuBarView && gMenuBarView->handleAcceleratorKey(key, mask)) ||(gLoginMenuBarView && gLoginMenuBarView->handleAcceleratorKey(key, mask))) { @@ -2175,7 +2185,6 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask) } // Traverses up the hierarchy - LLFocusableElement* keyboard_focus = gFocusMgr.getKeyboardFocus(); if( keyboard_focus ) { LLLineEditor* chat_editor = LLBottomTray::instanceExists() ? LLBottomTray::getInstance()->getNearbyChatBar()->getChatBox() : NULL; -- cgit v1.2.3 From f3b01596ddde08a178276fadc44f430928582748 Mon Sep 17 00:00:00 2001 From: Kelly Washington Date: Fri, 24 Sep 2010 16:31:43 -0700 Subject: VWR-21377 Script editor ctrl-f fix. change to better / more consistent naming --- indra/llui/llfocusmgr.cpp | 4 ++-- indra/llui/llfocusmgr.h | 2 +- indra/llui/llview.h | 8 ++++---- indra/newview/llpreviewscript.h | 2 +- indra/newview/llviewerwindow.cpp | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/indra/llui/llfocusmgr.cpp b/indra/llui/llfocusmgr.cpp index 7fbfd80d8d..43e5f6b051 100644 --- a/indra/llui/llfocusmgr.cpp +++ b/indra/llui/llfocusmgr.cpp @@ -315,12 +315,12 @@ void LLFocusMgr::removeKeyboardFocusWithoutCallback( const LLFocusableElement* f } } -bool LLFocusMgr::keyboardFocusHasMenus() const +bool LLFocusMgr::keyboardFocusHasAccelerators() const { LLView* focus_view = dynamic_cast(mKeyboardFocus); while( focus_view ) { - if(focus_view->hasMenus()) + if(focus_view->hasAccelerators()) { return true; } diff --git a/indra/llui/llfocusmgr.h b/indra/llui/llfocusmgr.h index e09bad0187..22c1895075 100644 --- a/indra/llui/llfocusmgr.h +++ b/indra/llui/llfocusmgr.h @@ -118,7 +118,7 @@ public: void unlockFocus(); BOOL focusLocked() const { return mLockedView != NULL; } - bool keyboardFocusHasMenus() const; + bool keyboardFocusHasAccelerators() const; private: LLUICtrl* mLockedView; diff --git a/indra/llui/llview.h b/indra/llui/llview.h index 706858e65c..33d345beff 100644 --- a/indra/llui/llview.h +++ b/indra/llui/llview.h @@ -273,10 +273,10 @@ public: BOOL focusNextRoot(); BOOL focusPrevRoot(); - // Normally we want the app menus to get priority on modified keys - // However, if this item claims to have menus then we want to give - // it first chance at handling them. (eg. the script editor) - virtual bool hasMenus() const { return false; }; + // Normally we want the app menus to get priority on accelerated keys + // However, sometimes we want to give specific views a first chance + // iat handling them. (eg. the script editor) + virtual bool hasAccelerators() const { return false; }; // delete all children. Override this function if you need to // perform any extra clean up such as cached pointers to selected diff --git a/indra/newview/llpreviewscript.h b/indra/newview/llpreviewscript.h index 3207da4e00..f4b31e5962 100644 --- a/indra/newview/llpreviewscript.h +++ b/indra/newview/llpreviewscript.h @@ -87,7 +87,7 @@ public: static void onBtnInsertSample(void*); static void onBtnInsertFunction(LLUICtrl*, void*); - virtual bool hasMenus() const { return true; } + virtual bool hasAccelerators() const { return true; } private: void onBtnHelp(); diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index dbc9317613..983a2d25c8 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -2143,7 +2143,7 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask) if (mask & (MASK_CONTROL | MASK_ALT) && !gFocusMgr.focusLocked()) { // Check the current floater's menu first, if it has one. - if (gFocusMgr.keyboardFocusHasMenus() + if (gFocusMgr.keyboardFocusHasAccelerators() && keyboard_focus && keyboard_focus->handleKey(key,mask,FALSE)) { -- cgit v1.2.3 From 753238d70e0db62faaf5ccb50e62cdf96ed4f344 Mon Sep 17 00:00:00 2001 From: Kelly Washington Date: Fri, 24 Sep 2010 16:54:28 -0700 Subject: VWR-21377 Script editor ctrl-f fix. make ctrl-f work from the script search box itself. --- indra/newview/llpreviewscript.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index 627010bb53..cf2ea38288 100644 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -138,6 +138,9 @@ public: LLScriptEdCore* getEditorCore() { return mEditorCore; } static LLFloaterScriptSearch* getInstance() { return sInstance; } + virtual bool hasAccelerators() const; + virtual BOOL handleKeyHere(KEY key, MASK mask); + private: LLScriptEdCore* mEditorCore; @@ -242,7 +245,24 @@ void LLFloaterScriptSearch::handleBtnReplaceAll() mEditorCore->mEditor->replaceTextAll(getChild("search_text")->getValue().asString(), getChild("replace_text")->getValue().asString(), caseChk->get()); } +bool LLFloaterScriptSearch::hasAccelerators() const +{ + if (mEditorCore) + { + return mEditorCore->hasAccelerators(); + } + return FALSE; +} + +BOOL LLFloaterScriptSearch::handleKeyHere(KEY key, MASK mask) +{ + if (mEditorCore) + { + return mEditorCore->handleKeyHere(key, mask); + } + return FALSE; +} /// --------------------------------------------------------------------------- /// LLScriptEdCore -- cgit v1.2.3