aboutsummaryrefslogtreecommitdiff
path: root/windows.c
diff options
context:
space:
mode:
authorSimon Tatham <anakin@pobox.com>2005-05-12 18:25:57 +0000
committerSimon Tatham <anakin@pobox.com>2005-05-12 18:25:57 +0000
commit68d27f05262b7928b4d755d2e27868cfc51b3007 (patch)
treeaae64cd5bea2dd7c44230cb0ed9d68a76c937395 /windows.c
parent8f1c713735316422cfe041400ccc49999d563d8b (diff)
downloadpuzzles-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.c60
1 files changed, 44 insertions, 16 deletions
diff --git a/windows.c b/windows.c
index f503bdc..414c7cc 100644
--- a/windows.c
+++ b/windows.c
@@ -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) {