summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stone <daniel@fooishbar.org>2012-11-07 17:51:35 +1100
committerKristian Høgsberg <krh@bitplanet.net>2012-11-08 14:08:53 -0500
commita84687174ced9bd5b2149ef893ee85514c2c7c40 (patch)
tree122044b008247689749bef5e40bd5790f45b0d68
parent4eb445abba77f8393d17c5deef9bc872af0675bb (diff)
downloadweston-a84687174ced9bd5b2149ef893ee85514c2c7c40.tar.gz
Terminal: Handle keypad symbols
XKB provides keypad symbols in a separate namespace. We don't care about the distinction, so map them to normal symbols before starting processing. Signed-off-by: Daniel Stone <daniel@fooishbar.org>
-rw-r--r--clients/terminal.c63
1 files changed, 63 insertions, 0 deletions
diff --git a/clients/terminal.c b/clients/terminal.c
index 4718a40b..18878291 100644
--- a/clients/terminal.c
+++ b/clients/terminal.c
@@ -2126,6 +2126,69 @@ key_handler(struct window *window, struct input *input, uint32_t time,
handle_bound_key(terminal, input, sym, time))
return;
+ /* Map keypad symbols to 'normal' equivalents before processing */
+ switch (sym) {
+ case XKB_KEY_KP_Space:
+ sym = XKB_KEY_space;
+ break;
+ case XKB_KEY_KP_Tab:
+ sym = XKB_KEY_Tab;
+ break;
+ case XKB_KEY_KP_Enter:
+ sym = XKB_KEY_Return;
+ break;
+ case XKB_KEY_KP_Left:
+ sym = XKB_KEY_Left;
+ break;
+ case XKB_KEY_KP_Up:
+ sym = XKB_KEY_Up;
+ break;
+ case XKB_KEY_KP_Right:
+ sym = XKB_KEY_Right;
+ break;
+ case XKB_KEY_KP_Down:
+ sym = XKB_KEY_Down;
+ break;
+ case XKB_KEY_KP_Equal:
+ sym = XKB_KEY_equal;
+ break;
+ case XKB_KEY_KP_Multiply:
+ sym = XKB_KEY_asterisk;
+ break;
+ case XKB_KEY_KP_Add:
+ sym = XKB_KEY_plus;
+ break;
+ case XKB_KEY_KP_Separator:
+ /* Note this is actually locale-dependent and should mostly be
+ * a comma. But leave it as period until we one day start
+ * doing the right thing. */
+ sym = XKB_KEY_period;
+ break;
+ case XKB_KEY_KP_Subtract:
+ sym = XKB_KEY_minus;
+ break;
+ case XKB_KEY_KP_Decimal:
+ sym = XKB_KEY_period;
+ break;
+ case XKB_KEY_KP_Divide:
+ sym = XKB_KEY_slash;
+ break;
+ case XKB_KEY_KP_0:
+ case XKB_KEY_KP_1:
+ case XKB_KEY_KP_2:
+ case XKB_KEY_KP_3:
+ case XKB_KEY_KP_4:
+ case XKB_KEY_KP_5:
+ case XKB_KEY_KP_6:
+ case XKB_KEY_KP_7:
+ case XKB_KEY_KP_8:
+ case XKB_KEY_KP_9:
+ sym = (sym - XKB_KEY_KP_0) + XKB_KEY_0;
+ break;
+ default:
+ break;
+ }
+
switch (sym) {
case XKB_KEY_BackSpace:
if (modifiers & MOD_ALT_MASK)