diff options
author | Olivier Fourdan <fourdan@xfce.org> | 2016-04-30 19:13:07 +0200 |
---|---|---|
committer | Olivier Fourdan <fourdan@xfce.org> | 2016-04-30 19:16:59 +0200 |
commit | 867ab66ceae1b75f9ea1df4591a1b73588221d89 (patch) | |
tree | 7e152f88cd369558bdaae1ecc5646504d5dcf540 | |
parent | 322f0bbb93d2d03df1e02b4e4acd69ab7f936c80 (diff) | |
download | xfwm4-867ab66ceae1b75f9ea1df4591a1b73588221d89.tar.gz |
keyboard: Ignore unsupported modifiers
Bug: 10760
If a given keyboard modifier is not supported, ignore the shortcut.
Signed-off-by: Olivier Fourdan <fourdan@xfce.org>
-rw-r--r-- | src/keyboard.c | 44 | ||||
-rw-r--r-- | src/keyboard.h | 3 | ||||
-rw-r--r-- | src/settings.c | 6 |
3 files changed, 39 insertions, 14 deletions
diff --git a/src/keyboard.c b/src/keyboard.c index fa3526518..c32ed1874 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -73,29 +73,44 @@ getKeycode (Display *dpy, const char *str) return XKeysymToKeycode (dpy, keysym); } -guint -getModifierMap (const char *str) +static gboolean +addModifierMap (guint *map, guint mask) { - guint map; + if (!mask) + { + return FALSE; + } + + *map |= mask; - gtk_accelerator_parse (str, NULL, &map); + return TRUE; +} - if ((map & GDK_SUPER_MASK) == GDK_SUPER_MASK) +gboolean +getModifierMap (const char *str, guint *map) +{ + gboolean ret; + + ret = TRUE; + gtk_accelerator_parse (str, NULL, map); + + ret = TRUE; + if ((*map & GDK_SUPER_MASK) == GDK_SUPER_MASK) { - map |= SuperMask; + ret &= addModifierMap (map, SuperMask); } - if ((map & GDK_HYPER_MASK) == GDK_HYPER_MASK) + if ((*map & GDK_HYPER_MASK) == GDK_HYPER_MASK) { - map |= HyperMask; + ret &= addModifierMap (map, HyperMask); } - if ((map & GDK_META_MASK) == GDK_META_MASK) + if ((*map & GDK_META_MASK) == GDK_META_MASK) { - map |= MetaMask; + ret &= addModifierMap (map, MetaMask); } - return map & MODIFIER_MASK & ~IGNORE_MASK; + return ret; } void @@ -119,8 +134,13 @@ parseKeyString (Display * dpy, MyKey * key, const char *str) return; } + if (!getModifierMap (str, &key->modifier)) + { + g_message (_("Unsupported keyboard modifier '%s'"), str); + key->modifier = 0; + return; + } key->keycode = getKeycode (dpy, str); - key->modifier = getModifierMap (str); TRACE ("keycode = 0x%x, modifier = 0x%x", key->keycode, key->modifier); } diff --git a/src/keyboard.h b/src/keyboard.h index f50583207..1e8210bd8 100644 --- a/src/keyboard.h +++ b/src/keyboard.h @@ -45,7 +45,8 @@ extern unsigned int ScrollLockMask; extern unsigned int SuperMask; extern unsigned int HyperMask; -guint getModifierMap (const char *); +gboolean getModifierMap (const char *, + guint *); void parseKeyString (Display *, MyKey *, const char *); diff --git a/src/settings.c b/src/settings.c index 20348b085..ce2f8c04f 100644 --- a/src/settings.c +++ b/src/settings.c @@ -155,7 +155,11 @@ set_easy_click (ScreenInfo *screen_info, const char *modifier) else { modstr = g_strdup_printf ("<%s>", modifier); - screen_info->params->easy_click = getModifierMap (modstr); + if (!getModifierMap (modstr, &screen_info->params->easy_click)) + { + g_message (_("Unsupported keyboard modifier '%s'"), modstr); + screen_info->params->easy_click = 0; + } g_free (modstr); } } |