Distinguish numpad extended keys. Fixes bug #1327720

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@37047 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Jamie Gadd
2006-01-22 05:04:31 +00:00
parent 9d309aad76
commit 413553cc60
3 changed files with 35 additions and 13 deletions

View 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:

View 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;

View 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;