diff options
| author | Mikael Magnusson <mikachu@comhem.se> | 2005-01-06 18:50:01 +0000 |
|---|---|---|
| committer | Mikael Magnusson <mikachu@comhem.se> | 2005-01-06 18:50:01 +0000 |
| commit | 9f607e25459434deb85c0c1b757af8599f07a9a5 (patch) | |
| tree | a843d43a091c983c689c9340c4f403871a6fea33 /openbox | |
| parent | 4f9ec4cbdb42b7cbed9b5ac7cc9cd8746aea0798 (diff) | |
hopefully fix the 'sticky keys' issue, patch from debian maintainer tore who got it from somewhere
Diffstat (limited to 'openbox')
| -rw-r--r-- | openbox/event.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/openbox/event.c b/openbox/event.c index 16951f75..c997ca59 100644 --- a/openbox/event.c +++ b/openbox/event.c @@ -51,6 +51,9 @@ #ifdef HAVE_SIGNAL_H # include <signal.h> #endif +#ifdef XKB +# include <X11/XKBlib.h> +#endif #ifdef USE_SM #include <X11/ICE/ICElib.h> @@ -259,6 +262,9 @@ static void event_set_lasttime(XEvent *e) static void event_hack_mods(XEvent *e) { +#ifdef XKB + XkbStateRec xkb_state; +#endif KeyCode *kp; gint i, k; @@ -274,6 +280,12 @@ static void event_hack_mods(XEvent *e) STRIP_MODS(e->xkey.state); /* remove from the state the mask of the modifier being released, if it is a modifier key being released (this is a little ugly..) */ +#ifdef XKB + if (XkbGetState(ob_display, XkbUseCoreKbd, &xkb_state) == Success) { + e->xkey.state = xkb_state.compat_state; + break; + } +#endif kp = modmap->modifiermap; for (i = 0; i < mask_table_size; ++i) { for (k = 0; k < modmap->max_keypermod; ++k) { |
