eekboard: handle AltGr
This commit is contained in:
@ -358,6 +358,7 @@ a11y_keystroke_listener (const AccessibleKeystroke *stroke,
|
|||||||
guint keysym;
|
guint keysym;
|
||||||
guint ignored_keysyms[] = {XK_Shift_L,
|
guint ignored_keysyms[] = {XK_Shift_L,
|
||||||
XK_Shift_R,
|
XK_Shift_R,
|
||||||
|
XK_ISO_Level3_Shift,
|
||||||
XK_Control_L,
|
XK_Control_L,
|
||||||
XK_Control_R,
|
XK_Control_R,
|
||||||
XK_Alt_L,
|
XK_Alt_L,
|
||||||
@ -403,24 +404,35 @@ on_key_pressed (EekKeyboard *keyboard,
|
|||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
Eekboard *eekboard = user_data;
|
Eekboard *eekboard = user_data;
|
||||||
guint keysym;
|
gint group, level;
|
||||||
|
guint keysym, modifiers = 0;
|
||||||
|
|
||||||
keysym = eek_key_get_keysym (key);
|
keysym = eek_key_get_keysym (key);
|
||||||
EEKBOARD_NOTE("%s %X", eek_keysym_to_string (keysym), eekboard->modifiers);
|
EEKBOARD_NOTE("%s %X", eek_keysym_to_string (keysym), eekboard->modifiers);
|
||||||
|
|
||||||
if (keysym == XK_Shift_L || keysym == XK_Shift_R) {
|
switch (keysym) {
|
||||||
gint group, level;
|
case XK_Shift_L:
|
||||||
|
case XK_Shift_R:
|
||||||
eekboard->modifiers ^= ShiftMask;
|
eekboard->modifiers ^= ShiftMask;
|
||||||
|
case XK_ISO_Level3_Shift:
|
||||||
|
eekboard->modifiers ^= Mod5Mask;
|
||||||
eek_keyboard_get_keysym_index (keyboard, &group, &level);
|
eek_keyboard_get_keysym_index (keyboard, &group, &level);
|
||||||
eek_keyboard_set_keysym_index (keyboard, group,
|
eek_keyboard_set_keysym_index (keyboard, group,
|
||||||
eekboard->modifiers & ShiftMask ? 1 : 0);
|
(eekboard->modifiers & Mod5Mask) ? 2 :
|
||||||
} else if (keysym == XK_Control_L || keysym == XK_Control_R) {
|
(eekboard->modifiers & ShiftMask) ? 1 :
|
||||||
|
0);
|
||||||
|
break;
|
||||||
|
case XK_Control_L:
|
||||||
|
case XK_Control_R:
|
||||||
eekboard->modifiers ^= ControlMask;
|
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;
|
eekboard->modifiers ^= Mod1Mask;
|
||||||
} else
|
break;
|
||||||
|
default:
|
||||||
fakekey_press_keysym (eekboard->fakekey, keysym, eekboard->modifiers);
|
fakekey_press_keysym (eekboard->fakekey, keysym, eekboard->modifiers);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|||||||
Reference in New Issue
Block a user