LLViewerWindow::handleKey(): Partial Fix for Issue 704: Keyboard shortcuts that should be passed to focused text fields are instead passed to selected prims when building

All edit keys now work, but Ctrl-A still doesn't work right, it must be grabbed by something else...
Adds LLFocusMgr::keyboardFocusHasAccelerators()
Adds virtual bool LLView::hasAccelerators() which returns false by default, overrides returning true placed in LLPreviewScript and LLPreviewNotecard
Shortcut keys added to notecard and script menu xmls

I'm thinking Qarl's Align tool handling may be receiving the Ctrl-A, we do seem to handle it differently than Exodus and Firestorm something modern could have broken the old way..
Come to think of it, those two features(Align and Select all prims) have a longstanding shortcut conflict in shortcuts... that's pretty nasty
This commit is contained in:
Inusaito Sayori
2013-10-22 23:35:53 -04:00
parent 574d0dab8d
commit fd42029a61
9 changed files with 63 additions and 79 deletions

View File

@@ -366,6 +366,20 @@ void LLFocusMgr::removeKeyboardFocusWithoutCallback( const LLFocusableElement* f
}
}
bool LLFocusMgr::keyboardFocusHasAccelerators() const
{
LLView* focus_view = dynamic_cast<LLView*>(mKeyboardFocus);
while(focus_view)
{
if (focus_view->hasAccelerators())
{
return true;
}
focus_view = focus_view->getParent();
}
return false;
}
void LLFocusMgr::setMouseCapture( LLMouseHandler* new_captor )
{

View File

@@ -121,6 +121,7 @@ public:
void unlockFocus();
BOOL focusLocked() const { return mLockedView != NULL; }
bool keyboardFocusHasAccelerators() const;
struct Impl;

View File

@@ -357,6 +357,11 @@ public:
BOOL focusNextRoot();
BOOL focusPrevRoot();
// Normally we want the app menus to get priority on accelerated keys
// However, sometimes we want to give specific views a first chance
// at handling them. (eg. the script editor)
virtual bool hasAccelerators() const { return false; }
virtual void deleteAllChildren();
virtual void setTentative(BOOL b);

View File

@@ -66,6 +66,7 @@ public:
// llview
virtual void draw();
virtual bool hasAccelerators() const { return true; }
virtual BOOL handleKeyHere(KEY key, MASK mask);
virtual void setEnabled( BOOL enabled );
virtual void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);

View File

@@ -128,6 +128,8 @@ public:
static BOOL enableSelectAllMenu(void* userdata);
static BOOL enableDeselectMenu(void* userdata);
virtual bool hasAccelerators() const { return true; }
private:
static bool onHelpWebDialog(const LLSD& notification, const LLSD& response);
static void onBtnHelp(void* userdata);

View File

@@ -2723,7 +2723,6 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask)
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())
@@ -2736,13 +2735,14 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask)
return TRUE;
}
/* Singu Note: This caused a bug where the menu ate keys before parents of keyboard_focus for some reason, breaking multifloaters usage of ctrl-w to close their selected child floater
if ((gMenuBarView && gMenuBarView->handleAcceleratorKey(key, mask))
|| (gLoginMenuBarView && gLoginMenuBarView->handleAcceleratorKey(key, mask)))
{
return TRUE;
}
*/
}
*/
// give floaters first chance to handle TAB key
// so frontmost floater gets focus

View File

@@ -24,30 +24,18 @@
<menu_bar bottom="-56" drop_shadow="false" enabled="true" follows="left|top|right"
height="18" left="8" mouse_opaque="false" name="motecard_menu" opaque="false"
tear_off="false" width="220">
<menu bottom_delta="16" left="0" drop_shadow="true" enabled="true" height="198" width="150"
mouse_opaque="false" name="Edit" opaque="true" tear_off="false">
<menu_item_call bottom_delta="-30" enabled="false" height="20" label="Undo" left="0"
mouse_opaque="true" name="Undo" width="139" />
<menu_item_call bottom_delta="-50" enabled="false" height="20" label="Redo" left="0"
mouse_opaque="true" name="Redo" width="139" />
<menu_item_separator bottom_delta="-58" enabled="true" height="8" label="-----------" left="0"
mouse_opaque="true" name="separator1" width="139" />
<menu_item_call bottom_delta="-78" enabled="false" height="20" label="Cut" left="0"
mouse_opaque="true" name="Cut" width="139" />
<menu_item_call bottom_delta="-98" enabled="false" height="20" label="Copy" left="0"
mouse_opaque="true" name="Copy" width="139" />
<menu_item_call bottom_delta="-118" enabled="false" height="20" label="Paste" left="0"
mouse_opaque="true" name="Paste" width="139" />
<menu_item_separator bottom_delta="-126" enabled="true" height="8" label="-----------" left="0"
mouse_opaque="true" name="separator2" width="139" />
<menu_item_call bottom_delta="-146" enabled="true" height="20" label="Select All" left="0"
mouse_opaque="true" name="Select All" width="139" />
<menu_item_call bottom_delta="-166" enabled="false" height="20" label="Deselect" left="0"
mouse_opaque="true" name="Deselect" width="139" />
<menu_item_separator bottom_delta="-174" enabled="true" height="8" label="-----------" left="0"
mouse_opaque="true" name="separator3" width="139" />
<menu_item_call bottom_delta="-194" enabled="true" height="20" label="Search / Replace..."
left="0" mouse_opaque="true" name="Search / Replace..." width="139" />
<menu label="Edit" name="Edit" tear_off="false">
<menu_item_call label="Undo" name="Undo" shortcut="control|Z"/>
<menu_item_call label="Redo" name="Redo" shortcut="control|Y"/>
<menu_item_separator/>
<menu_item_call label="Cut" name="Cut" shortcut="control|X"/>
<menu_item_call label="Copy" name="Copy" shortcut="control|C"/>
<menu_item_call label="Paste" name="Paste" shortcut="control|V"/>
<menu_item_separator/>
<menu_item_call label="Select All" name="Select All" shortcut="control|A"/>
<menu_item_call label="Deselect" name="Deselect" shortcut="control|E"/>
<menu_item_separator/>
<menu_item_call label="Search / Replace..." name="Search / Replace..." shortcut="control|F"/>
</menu>
</menu_bar>
<text_editor type="string" length="1" bottom="-344" embedded_items="true" enabled="true"

View File

@@ -20,30 +20,18 @@
<menu_bar bottom="-56" drop_shadow="false" enabled="true" follows="left|top|right"
height="18" left="8" mouse_opaque="false" name="motecard_menu" opaque="false"
tear_off="false" width="220">
<menu bottom_delta="16" left="0" drop_shadow="true" enabled="true" height="198" width="150"
mouse_opaque="false" name="Edit" opaque="true" tear_off="false">
<menu_item_call bottom_delta="-30" enabled="false" height="20" label="Undo" left="0"
mouse_opaque="true" name="Undo" width="139" />
<menu_item_call bottom_delta="-50" enabled="false" height="20" label="Redo" left="0"
mouse_opaque="true" name="Redo" width="139" />
<menu_item_separator bottom_delta="-58" enabled="true" height="8" label="-----------" left="0"
mouse_opaque="true" name="separator1" width="139" />
<menu_item_call bottom_delta="-78" enabled="false" height="20" label="Cut" left="0"
mouse_opaque="true" name="Cut" width="139" />
<menu_item_call bottom_delta="-98" enabled="false" height="20" label="Copy" left="0"
mouse_opaque="true" name="Copy" width="139" />
<menu_item_call bottom_delta="-118" enabled="false" height="20" label="Paste" left="0"
mouse_opaque="true" name="Paste" width="139" />
<menu_item_separator bottom_delta="-126" enabled="true" height="8" label="-----------" left="0"
mouse_opaque="true" name="separator2" width="139" />
<menu_item_call bottom_delta="-146" enabled="true" height="20" label="Select All" left="0"
mouse_opaque="true" name="Select All" width="139" />
<menu_item_call bottom_delta="-166" enabled="false" height="20" label="Deselect" left="0"
mouse_opaque="true" name="Deselect" width="139" />
<menu_item_separator bottom_delta="-174" enabled="true" height="8" label="-----------" left="0"
mouse_opaque="true" name="separator3" width="139" />
<menu_item_call bottom_delta="-194" enabled="true" height="20" label="Search / Replace..."
left="0" mouse_opaque="true" name="Search / Replace..." width="139" />
<menu label="Edit" name="Edit" tear_off="false">
<menu_item_call label="Undo" name="Undo" shortcut="control|Z"/>
<menu_item_call label="Redo" name="Redo" shortcut="control|Y"/>
<menu_item_separator/>
<menu_item_call label="Cut" name="Cut" shortcut="control|X"/>
<menu_item_call label="Copy" name="Copy" shortcut="control|C"/>
<menu_item_call label="Paste" name="Paste" shortcut="control|V"/>
<menu_item_separator/>
<menu_item_call label="Select All" name="Select All" shortcut="control|A"/>
<menu_item_call label="Deselect" name="Deselect" shortcut="control|E"/>
<menu_item_separator/>
<menu_item_call label="Search / Replace..." name="Search / Replace..." shortcut="control|F"/>
</menu>
</menu_bar>
<text_editor type="string" length="1" bottom="-344" embedded_items="true" enabled="true"

View File

@@ -32,38 +32,23 @@
<menu bottom="0" drop_shadow="true" enabled="true" height="62"
left="0" mouse_opaque="false" name="File" opaque="true" tear_off="false"
width="138">
<menu_item_call bottom_delta="-30" height="20" label="Save" left="0" mouse_opaque="true"
name="Save" width="138" />
<menu_item_separator bottom_delta="-38" height="8" left="0" mouse_opaque="true" name="separator"
width="138" />
<menu_item_call label="Save" name="Save" shortcut="control|S"/>
<menu_item_separator/>
<menu_item_call bottom_delta="-58" height="20" label="Revert All Changes" left="0"
mouse_opaque="true" name="Revert All Changes" width="138" />
</menu>
<menu bottom="665" drop_shadow="true" enabled="true" height="198"
left="222" mouse_opaque="false" name="Edit" opaque="true" tear_off="false"
width="139">
<menu_item_call bottom_delta="-30" enabled="false" height="20" label="Undo" left="0"
mouse_opaque="true" name="Undo" width="139" />
<menu_item_call bottom_delta="-50" enabled="false" height="20" label="Redo" left="0"
mouse_opaque="true" name="Redo" width="139" />
<menu_item_separator bottom_delta="-58" enabled="true" height="8" label="-----------" left="0"
mouse_opaque="true" name="separator" width="139" />
<menu_item_call bottom_delta="-78" enabled="false" height="20" label="Cut" left="0"
mouse_opaque="true" name="Cut" width="139" />
<menu_item_call bottom_delta="-98" enabled="false" height="20" label="Copy" left="0"
mouse_opaque="true" name="Copy" width="139" />
<menu_item_call bottom_delta="-118" enabled="false" height="20" label="Paste" left="0"
mouse_opaque="true" name="Paste" width="139" />
<menu_item_separator bottom_delta="-126" enabled="true" height="8" label="-----------" left="0"
mouse_opaque="true" name="separator2" width="139" />
<menu_item_call bottom_delta="-146" enabled="true" height="20" label="Select All" left="0"
mouse_opaque="true" name="Select All" width="139" />
<menu_item_call bottom_delta="-166" enabled="false" height="20" label="Deselect" left="0"
mouse_opaque="true" name="Deselect" width="139" />
<menu_item_separator bottom_delta="-174" enabled="true" height="8" label="-----------" left="0"
mouse_opaque="true" name="separator3" width="139" />
<menu_item_call bottom_delta="-194" enabled="true" height="20" label="Search / Replace..."
left="0" mouse_opaque="true" name="Search / Replace..." width="139" />
<menu label="Edit" name="Edit" tear_off="false">
<menu_item_call label="Undo" name="Undo" shortcut="control|Z"/>
<menu_item_call label="Redo" name="Redo" shortcut="control|Y"/>
<menu_item_separator/>
<menu_item_call label="Cut" name="Cut" shortcut="control|X"/>
<menu_item_call label="Copy" name="Copy" shortcut="control|C"/>
<menu_item_call label="Paste" name="Paste" shortcut="control|V"/>
<menu_item_separator/>
<menu_item_call label="Select All" name="Select All" shortcut="control|A"/>
<menu_item_call label="Deselect" name="Deselect" shortcut="control|E"/>
<menu_item_separator/>
<menu_item_call label="Search / Replace..." name="Search / Replace..." shortcut="control|F"/>
</menu>
<menu bottom="-18" drop_shadow="true" enabled="true" height="34"
left="0" mouse_opaque="false" name="Help" opaque="true" tear_off="false"