]> git.saurik.com Git - wxWidgets.git/commitdiff
Distinguish numpad extended keys. Fixes bug #1327720
authorJamie Gadd <jrgadd2@cs.latrobe.edu.au>
Sun, 22 Jan 2006 05:04:31 +0000 (05:04 +0000)
committerJamie Gadd <jrgadd2@cs.latrobe.edu.au>
Sun, 22 Jan 2006 05:04:31 +0000 (05:04 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@37047 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
samples/keyboard/keyboard.cpp
src/msw/window.cpp

index 9242504877fc07173fd27061a67f3ce32f1b4c60..b31ef765ea6e1f2c2ffecb0543473f8fee03960d 100644 (file)
@@ -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:
 
index ecece468d08c175e05cf28acbc35246309d4f3e5..e6297d161d96cdfb075ecb016f51f1b0a86a13c9 100644 (file)
@@ -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;
index 08567e34a4507132a99a1393038082f4964e4134..d424c7e0f182c52eae4a80401758c3c049cf9cb8 100644 (file)
@@ -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;