summaryrefslogtreecommitdiff
path: root/openbox
diff options
context:
space:
mode:
authorMikael Magnusson <mikachu@comhem.se>2005-01-06 18:50:01 +0000
committerMikael Magnusson <mikachu@comhem.se>2005-01-06 18:50:01 +0000
commit9f607e25459434deb85c0c1b757af8599f07a9a5 (patch)
treea843d43a091c983c689c9340c4f403871a6fea33 /openbox
parent4f9ec4cbdb42b7cbed9b5ac7cc9cd8746aea0798 (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.c12
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) {