From 350598dc55d2e72e916d765582024f51a740602c Mon Sep 17 00:00:00 2001 From: Daiki Ueno Date: Fri, 20 Aug 2010 18:39:06 +0900 Subject: [PATCH] eekboard: handle AltGr --- src/eekboard.c | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/eekboard.c b/src/eekboard.c index 3b7ec39a..c8ca8fa4 100644 --- a/src/eekboard.c +++ b/src/eekboard.c @@ -358,6 +358,7 @@ a11y_keystroke_listener (const AccessibleKeystroke *stroke, guint keysym; guint ignored_keysyms[] = {XK_Shift_L, XK_Shift_R, + XK_ISO_Level3_Shift, XK_Control_L, XK_Control_R, XK_Alt_L, @@ -403,24 +404,35 @@ on_key_pressed (EekKeyboard *keyboard, gpointer user_data) { Eekboard *eekboard = user_data; - guint keysym; + gint group, level; + guint keysym, modifiers = 0; keysym = eek_key_get_keysym (key); EEKBOARD_NOTE("%s %X", eek_keysym_to_string (keysym), eekboard->modifiers); - - if (keysym == XK_Shift_L || keysym == XK_Shift_R) { - gint group, level; + switch (keysym) { + case XK_Shift_L: + case XK_Shift_R: eekboard->modifiers ^= ShiftMask; + case XK_ISO_Level3_Shift: + eekboard->modifiers ^= Mod5Mask; eek_keyboard_get_keysym_index (keyboard, &group, &level); eek_keyboard_set_keysym_index (keyboard, group, - eekboard->modifiers & ShiftMask ? 1 : 0); - } else if (keysym == XK_Control_L || keysym == XK_Control_R) { + (eekboard->modifiers & Mod5Mask) ? 2 : + (eekboard->modifiers & ShiftMask) ? 1 : + 0); + break; + case XK_Control_L: + case XK_Control_R: eekboard->modifiers ^= ControlMask; - } else if (keysym == XK_Alt_L || keysym == XK_Alt_R) { + break; + case XK_Alt_L: + case XK_Alt_R: eekboard->modifiers ^= Mod1Mask; - } else + break; + default: fakekey_press_keysym (eekboard->fakekey, keysym, eekboard->modifiers); + } } static void