summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
authorSteven Bennetts <steve@lindenlab.com>2007-01-25 00:18:16 +0000
committerSteven Bennetts <steve@lindenlab.com>2007-01-25 00:18:16 +0000
commit821f998373c59dac9212f91ec967f39ed081663a (patch)
tree3ebff489abf57a57670eb2008d13683fdc92e23b /indra
parentad94bca0d273869d6358719f4dbd515a905acd26 (diff)
merge -r 57058:57111 maintenance.
Diffstat (limited to 'indra')
-rw-r--r--indra/llui/llmenugl.cpp3
-rw-r--r--indra/llwindow/llwindowwin32.cpp37
2 files changed, 28 insertions, 12 deletions
diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp
index 7d2df53f9b..f574d981ef 100644
--- a/indra/llui/llmenugl.cpp
+++ b/indra/llui/llmenugl.cpp
@@ -472,6 +472,7 @@ BOOL LLMenuItemGL::handleMouseUp( S32 x, S32 y, MASK )
}
}
+
void LLMenuItemGL::draw( void )
{
// *FIX: This can be optimized by using switches. Want to avoid
@@ -4104,7 +4105,7 @@ BOOL LLMenuBarGL::handleAcceleratorKey(KEY key, MASK mask)
BOOL LLMenuBarGL::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent)
{
- if(key == KEY_ALT)
+ if(key == KEY_ALT && !gKeyboard->getKeyRepeated(key) && LLUI::sConfigGroup->getBOOL("UseAltKeyForMenus"))
{
mAltKeyTrigger = TRUE;
}
diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp
index daa1a26b3d..42a88b6cc3 100644
--- a/indra/llwindow/llwindowwin32.cpp
+++ b/indra/llwindow/llwindowwin32.cpp
@@ -1950,19 +1950,34 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
// allow system keys, such as ALT-F4 to be processed by Windows
eat_keystroke = FALSE;
case WM_KEYDOWN:
- if (gDebugWindowProc)
- {
- llinfos << "Debug WindowProc WM_KEYDOWN "
- << " key " << S32(w_param)
- << llendl;
- }
- if (gKeyboard->handleKeyDown(w_param, mask) && eat_keystroke)
{
- return 0;
+ if (gDebugWindowProc)
+ {
+ llinfos << "Debug WindowProc WM_KEYDOWN "
+ << " key " << S32(w_param)
+ << llendl;
+ }
+ // lower 15 bits hold key repeat count
+ S32 key_repeat_count = l_param & 0x7fff;
+ if (key_repeat_count > 1)
+ {
+ KEY translated_key;
+ gKeyboard->translateKey(w_param, &translated_key);
+ if (!gKeyboard->getKeyDown(translated_key))
+ {
+ //RN: hack for handling key repeats when we no longer recognize the key as being down
+ //This is necessary because we sometimes ignore the message queue and use getAsyncKeyState
+ // to clear key level flags before we've processed all key repeat messages
+ return 0;
+ }
+ }
+ if(gKeyboard->handleKeyDown(w_param, mask) && eat_keystroke)
+ {
+ return 0;
+ }
+ // pass on to windows if we didn't handle it
+ break;
}
- // pass on to windows if we didn't handle it
- break;
-
case WM_SYSKEYUP:
eat_keystroke = FALSE;
case WM_KEYUP: