summaryrefslogtreecommitdiff
path: root/src/keyboard.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/keyboard.c')
-rw-r--r--src/keyboard.c44
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);
}