diff options
Diffstat (limited to 'src/keyboard.c')
-rw-r--r-- | src/keyboard.c | 44 |
1 files changed, 32 insertions, 12 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); } |