XKB modifiers are strange things, and i don't know how to read them properly in modkeys.c and convert it all to the x core stuff. so we use this to get the state of the modifiers, otherwise we end up missing them sometimes (like on PPC)

This commit is contained in:
Dana Jansens 2008-01-11 13:05:11 -05:00
parent 5a468756c0
commit 162a97e158

View file

@ -247,6 +247,10 @@ static void event_set_curtime(XEvent *e)
static void event_hack_mods(XEvent *e)
{
#ifdef XKB
XkbStateRec xkb_state;
#endif
switch (e->type) {
case ButtonPress:
case ButtonRelease:
@ -256,10 +260,22 @@ static void event_hack_mods(XEvent *e)
e->xkey.state = modkeys_only_modifier_masks(e->xkey.state);
break;
case KeyRelease:
e->xkey.state = modkeys_only_modifier_masks(e->xkey.state);
/* remove from the state the mask of the modifier key being released,
if it is a modifier key being released that is */
e->xkey.state &= ~modkeys_keycode_to_mask(e->xkey.keycode);
#ifdef XKB
/* If XKB is present, then the modifiers are all strange from its
magic. Our X core protocol stuff won't work, so we use this to
find what the modifier state is instead. */
if (XkbGetState(ob_display, XkbUseCoreKbd, &xkb_state) == Success) {
e->xkey.state = xkb_state.compat_state;
break;
}
else
#endif
{
e->xkey.state = modkeys_only_modifier_masks(e->xkey.state);
/* remove from the state the mask of the modifier key being
released, if it is a modifier key being released that is */
e->xkey.state &= ~modkeys_keycode_to_mask(e->xkey.keycode);
}
break;
case MotionNotify:
e->xmotion.state = modkeys_only_modifier_masks(e->xmotion.state);