diff options
| author | Simon Tatham <anakin@pobox.com> | 2005-05-12 18:25:57 +0000 |
|---|---|---|
| committer | Simon Tatham <anakin@pobox.com> | 2005-05-12 18:25:57 +0000 |
| commit | 68d27f05262b7928b4d755d2e27868cfc51b3007 (patch) | |
| tree | aae64cd5bea2dd7c44230cb0ed9d68a76c937395 /windows.c | |
| parent | 8f1c713735316422cfe041400ccc49999d563d8b (diff) | |
| download | puzzles-68d27f05262b7928b4d755d2e27868cfc51b3007.zip puzzles-68d27f05262b7928b4d755d2e27868cfc51b3007.tar.gz puzzles-68d27f05262b7928b4d755d2e27868cfc51b3007.tar.bz2 puzzles-68d27f05262b7928b4d755d2e27868cfc51b3007.tar.xz | |
I've had two complaints that Solo ought to recognise the numeric
keypad. The reason it doesn't is because front ends were carefully
translating the numeric keypad into 8-way directional keys for the
benefit of Cube. Therefore, a policy change:
- front ends process the numeric keypad by sending MOD_NUM_KEYPAD |
'3' and similar
- front ends running on a platform with Num Lock SHOULD do this
_irrespective_ of the state of Num Lock
- back ends do whatever they see fit with numeric keypad keys.
Result: the numeric keypad now works in Solo, and also works in OS X
Cube (which it previously didn't because I forgot to implement that
bit of the front end!).
[originally from svn r5774]
Diffstat (limited to 'windows.c')
| -rw-r--r-- | windows.c | 60 |
1 files changed, 44 insertions, 16 deletions
@@ -1035,36 +1035,64 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, int key = -1; switch (wParam) { - case VK_LEFT: key = CURSOR_LEFT; break; - case VK_RIGHT: key = CURSOR_RIGHT; break; - case VK_UP: key = CURSOR_UP; break; - case VK_DOWN: key = CURSOR_DOWN; break; + case VK_LEFT: + if (!(lParam & 0x01000000)) + key = MOD_NUM_KEYPAD | '4'; + else + key = CURSOR_LEFT; + break; + case VK_RIGHT: + if (!(lParam & 0x01000000)) + key = MOD_NUM_KEYPAD | '6'; + else + key = CURSOR_RIGHT; + break; + case VK_UP: + if (!(lParam & 0x01000000)) + key = MOD_NUM_KEYPAD | '8'; + else + key = CURSOR_UP; + break; + case VK_DOWN: + if (!(lParam & 0x01000000)) + key = MOD_NUM_KEYPAD | '2'; + else + key = CURSOR_DOWN; + break; /* * Diagonal keys on the numeric keypad. */ case VK_PRIOR: - if (!(lParam & 0x01000000)) key = CURSOR_UP_RIGHT; + if (!(lParam & 0x01000000)) key = MOD_NUM_KEYPAD | '9'; break; case VK_NEXT: - if (!(lParam & 0x01000000)) key = CURSOR_DOWN_RIGHT; + if (!(lParam & 0x01000000)) key = MOD_NUM_KEYPAD | '3'; break; case VK_HOME: - if (!(lParam & 0x01000000)) key = CURSOR_UP_LEFT; + if (!(lParam & 0x01000000)) key = MOD_NUM_KEYPAD | '7'; break; case VK_END: - if (!(lParam & 0x01000000)) key = CURSOR_DOWN_LEFT; + if (!(lParam & 0x01000000)) key = MOD_NUM_KEYPAD | '1'; + break; + case VK_INSERT: + if (!(lParam & 0x01000000)) key = MOD_NUM_KEYPAD | '0'; + break; + case VK_CLEAR: + if (!(lParam & 0x01000000)) key = MOD_NUM_KEYPAD | '5'; break; /* * Numeric keypad keys with Num Lock on. */ - case VK_NUMPAD4: key = CURSOR_LEFT; break; - case VK_NUMPAD6: key = CURSOR_RIGHT; break; - case VK_NUMPAD8: key = CURSOR_UP; break; - case VK_NUMPAD2: key = CURSOR_DOWN; break; - case VK_NUMPAD9: key = CURSOR_UP_RIGHT; break; - case VK_NUMPAD3: key = CURSOR_DOWN_RIGHT; break; - case VK_NUMPAD7: key = CURSOR_UP_LEFT; break; - case VK_NUMPAD1: key = CURSOR_DOWN_LEFT; break; + case VK_NUMPAD4: key = MOD_NUM_KEYPAD | '4'; break; + case VK_NUMPAD6: key = MOD_NUM_KEYPAD | '6'; break; + case VK_NUMPAD8: key = MOD_NUM_KEYPAD | '8'; break; + case VK_NUMPAD2: key = MOD_NUM_KEYPAD | '2'; break; + case VK_NUMPAD5: key = MOD_NUM_KEYPAD | '5'; break; + case VK_NUMPAD9: key = MOD_NUM_KEYPAD | '9'; break; + case VK_NUMPAD3: key = MOD_NUM_KEYPAD | '3'; break; + case VK_NUMPAD7: key = MOD_NUM_KEYPAD | '7'; break; + case VK_NUMPAD1: key = MOD_NUM_KEYPAD | '1'; break; + case VK_NUMPAD0: key = MOD_NUM_KEYPAD | '0'; break; } if (key != -1) { |