[PATCH weston 01/11] Terminal: Handle keypad symbols

Daniel Stone daniel at fooishbar.org
Tue Nov 6 22:51:35 PST 2012


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 at fooishbar.org>
---
 clients/terminal.c |   63 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 63 insertions(+)

diff --git a/clients/terminal.c b/clients/terminal.c
index 4718a40..1887829 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)
-- 
1.7.10.4



More information about the wayland-devel mailing list