diff options
author | Peter Hutterer <peter.hutterer@who-t.net> | 2009-12-15 13:48:44 +1000 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2009-12-17 09:56:24 +1000 |
commit | a11cbb104b7a511d0f1292d169a9738ae4f91476 (patch) | |
tree | f960708e477ca5a00145133b994d438e7557e85c | |
parent | dbec45bbd0d594a1f4229f6ad7e7a71890331305 (diff) | |
download | xf86-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.c | 28 |
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; |