diff options
author | Steven Bennetts <steve@lindenlab.com> | 2007-01-25 00:18:16 +0000 |
---|---|---|
committer | Steven Bennetts <steve@lindenlab.com> | 2007-01-25 00:18:16 +0000 |
commit | 821f998373c59dac9212f91ec967f39ed081663a (patch) | |
tree | 3ebff489abf57a57670eb2008d13683fdc92e23b | |
parent | ad94bca0d273869d6358719f4dbd515a905acd26 (diff) |
merge -r 57058:57111 maintenance.
-rw-r--r-- | indra/llui/llmenugl.cpp | 3 | ||||
-rw-r--r-- | indra/llwindow/llwindowwin32.cpp | 37 |
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: |