From 0931799f03df4a0d573cc9162f1a81f6e3222d3b Mon Sep 17 00:00:00 2001
From: Kelly Washington <kelly@lindenlab.com>
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(-)

(limited to 'indra')

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<LLView*>(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 <kelly@lindenlab.com>
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(-)

(limited to 'indra')

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<LLView*>(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 <kelly@lindenlab.com>
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(+)

(limited to 'indra')

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<LLUICtrl>("search_text")->getValue().asString(), getChild<LLUICtrl>("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