From: Jamie Gadd Date: Sun, 22 Jan 2006 05:04:31 +0000 (+0000) Subject: Distinguish numpad extended keys. Fixes bug #1327720 X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/413553cc60a112af6a0942ebb7ba697ee9d5df7e?ds=inline Distinguish numpad extended keys. Fixes bug #1327720 git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@37047 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/docs/changes.txt b/docs/changes.txt index 9242504877..b31ef765ea 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -77,6 +77,7 @@ wxMSW: columns, if ComCtl32 >= 470. - Fixed problem where using SetValue and wxTE_RICH2 would cause control to show. +- Numpad special keys are now distinguished from normal keys. wxGTK: diff --git a/samples/keyboard/keyboard.cpp b/samples/keyboard/keyboard.cpp index ecece468d0..e6297d161d 100644 --- a/samples/keyboard/keyboard.cpp +++ b/samples/keyboard/keyboard.cpp @@ -448,6 +448,7 @@ void TextWindow::LogEvent(const wxChar *name, wxKeyEvent& event) case WXK_NUMPAD_RIGHT: key = _T("NUMPAD_RIGHT"); break; case WXK_NUMPAD_DOWN: key = _T("NUMPAD_DOWN"); break; case WXK_NUMPAD_PRIOR: key = _T("NUMPAD_PRIOR"); break; + case WXK_NUMPAD_NEXT: key = _T("NUMPAD_NEXT"); break; case WXK_NUMPAD_PAGEUP: key = _T("NUMPAD_PAGEUP"); break; case WXK_NUMPAD_PAGEDOWN: key = _T("NUMPAD_PAGEDOWN"); break; case WXK_NUMPAD_END: key = _T("NUMPAD_END"); break; diff --git a/src/msw/window.cpp b/src/msw/window.cpp index 08567e34a4..d424c7e0f1 100644 --- a/src/msw/window.cpp +++ b/src/msw/window.cpp @@ -5185,19 +5185,9 @@ int wxCharCodeMSWToWX(int keySym, WXLPARAM lParam) case VK_CAPITAL: id = WXK_CAPITAL; break; case VK_SPACE: id = WXK_SPACE; break; case VK_ESCAPE: id = WXK_ESCAPE; break; - case VK_PRIOR: id = WXK_PRIOR; break; - case VK_NEXT : id = WXK_NEXT; break; - case VK_END: id = WXK_END; break; - case VK_HOME : id = WXK_HOME; break; - case VK_LEFT : id = WXK_LEFT; break; - case VK_UP: id = WXK_UP; break; - case VK_RIGHT: id = WXK_RIGHT; break; - case VK_DOWN : id = WXK_DOWN; break; case VK_SELECT: id = WXK_SELECT; break; case VK_PRINT: id = WXK_PRINT; break; case VK_EXECUTE: id = WXK_EXECUTE; break; - case VK_INSERT: id = WXK_INSERT; break; - case VK_DELETE: id = WXK_DELETE; break; case VK_HELP : id = WXK_HELP; break; case VK_NUMPAD0: id = WXK_NUMPAD0; break; case VK_NUMPAD1: id = WXK_NUMPAD1; break; @@ -5261,10 +5251,40 @@ int wxCharCodeMSWToWX(int keySym, WXLPARAM lParam) case VK_APPS: id = WXK_WINDOWS_MENU; break; #endif // VK_APPS defined + // use the "extended" bit (24) of lParam to distinguish extended keys + // from normal keys as the same key is sent + case VK_PRIOR: + id = lParam & (1 << 24) ? WXK_PRIOR : WXK_NUMPAD_PRIOR; + break; + case VK_NEXT: + id = lParam & (1 << 24) ? WXK_NEXT : WXK_NUMPAD_NEXT; + break; + case VK_END: + id = lParam & (1 << 24) ? WXK_END : WXK_NUMPAD_END; + break; + case VK_HOME: + id = lParam & (1 << 24) ? WXK_HOME : WXK_NUMPAD_HOME; + break; + case VK_LEFT: + id = lParam & (1 << 24) ? WXK_LEFT : WXK_NUMPAD_LEFT; + break; + case VK_UP: + id = lParam & (1 << 24) ? WXK_UP : WXK_NUMPAD_UP; + break; + case VK_RIGHT: + id = lParam & (1 << 24) ? WXK_RIGHT : WXK_NUMPAD_RIGHT; + break; + case VK_DOWN: + id = lParam & (1 << 24) ? WXK_DOWN : WXK_NUMPAD_DOWN; + break; + case VK_INSERT: + id = lParam & (1 << 24) ? WXK_INSERT : WXK_NUMPAD_INSERT; + break; + case VK_DELETE: + id = lParam & (1 << 24) ? WXK_DELETE : WXK_NUMPAD_DELETE; + break; + // this order is correct as the numpad enter is the extended key case VK_RETURN: - // the same key is sent for both the "return" key on the main - // keyboard and the numeric keypad but we want to distinguish - // between them: we do this using the "extended" bit (24) of lParam id = lParam & (1 << 24) ? WXK_NUMPAD_ENTER : WXK_RETURN; break;