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]
This commit is contained in:
Simon Tatham
2005-05-12 18:25:57 +00:00
parent 8f1c713735
commit 68d27f0526
6 changed files with 82 additions and 43 deletions

18
cube.c
View File

@ -1017,23 +1017,23 @@ static game_state *make_move(game_state *from, game_ui *ui,
struct solid *poly;
/*
* All moves are made with the cursor keys.
* All moves are made with the cursor keys or numeric keypad.
*/
if (button == CURSOR_UP)
if (button == CURSOR_UP || button == (MOD_NUM_KEYPAD | '8'))
direction = UP;
else if (button == CURSOR_DOWN)
else if (button == CURSOR_DOWN || button == (MOD_NUM_KEYPAD | '2'))
direction = DOWN;
else if (button == CURSOR_LEFT)
else if (button == CURSOR_LEFT || button == (MOD_NUM_KEYPAD | '4'))
direction = LEFT;
else if (button == CURSOR_RIGHT)
else if (button == CURSOR_RIGHT || button == (MOD_NUM_KEYPAD | '6'))
direction = RIGHT;
else if (button == CURSOR_UP_LEFT)
else if (button == (MOD_NUM_KEYPAD | '7'))
direction = UP_LEFT;
else if (button == CURSOR_DOWN_LEFT)
else if (button == (MOD_NUM_KEYPAD | '1'))
direction = DOWN_LEFT;
else if (button == CURSOR_UP_RIGHT)
else if (button == (MOD_NUM_KEYPAD | '9'))
direction = UP_RIGHT;
else if (button == CURSOR_DOWN_RIGHT)
else if (button == (MOD_NUM_KEYPAD | '3'))
direction = DOWN_RIGHT;
else
return NULL;