summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2009-12-15 13:48:44 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2009-12-17 09:56:24 +1000
commita11cbb104b7a511d0f1292d169a9738ae4f91476 (patch)
treef960708e477ca5a00145133b994d438e7557e85c
parentdbec45bbd0d594a1f4229f6ad7e7a71890331305 (diff)
downloadxf86-input-wacom-a11cbb104b7a511d0f1292d169a9738ae4f91476.tar.gz
xsetwacom: don't release modifiers unless explicitly stated
modifiers are interpreted as "+keysym" only if the + or - are missing. This allows for configurations like "key shift" to work properly. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r--tools/xsetwacom.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/tools/xsetwacom.c b/tools/xsetwacom.c
index dd69d2e..43a85a0 100644
--- a/tools/xsetwacom.c
+++ b/tools/xsetwacom.c
@@ -1047,6 +1047,30 @@ static char *convert_specialkey(const char *modifier)
return m->converted ? m->converted : (char*)modifier;
}
+static int is_modifier(const char* modifier)
+{
+ const char *modifiers[] = {
+ "Control_L",
+ "Control_R",
+ "Alt_L",
+ "Alt_R",
+ "Shift_L",
+ "Shift_R",
+ NULL,
+ };
+
+ const char **m = modifiers;
+
+ while(*m)
+ {
+ if (strcmp(modifier, *m) == 0)
+ return 1;
+ m++;
+ }
+
+ return 0;
+}
+
/*
Map gibberish like "ctrl alt f2" into the matching AC_KEY values.
Returns 1 on success or 0 otherwise.
@@ -1075,6 +1099,7 @@ static int special_map_keystrokes(int argc, char **argv, unsigned long *ndata, u
key++;
break;
default:
+ need_press = need_release = 1;
break;
}
@@ -1088,6 +1113,9 @@ static int special_map_keystrokes(int argc, char **argv, unsigned long *ndata, u
break;
}
+ if (is_modifier(key) && (need_press && need_release))
+ need_release = 0;
+
} else
need_press = need_release = 1;