diff options
| -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: | 
