summaryrefslogtreecommitdiff
path: root/src/keyboard.c
diff options
context:
space:
mode:
authorOlivier Fourdan <fourdan@xfce.org>2016-04-30 19:13:07 +0200
committerOlivier Fourdan <fourdan@xfce.org>2016-04-30 19:16:21 +0200
commit7f498183106547e9682828b66f4cbc527453158f (patch)
tree05e438120e108fea6d202177c5b4ea54861a3079 /src/keyboard.c
parent0361b55582f7f052a396e9a5db9702656bdee121 (diff)
downloadxfwm4-7f498183106547e9682828b66f4cbc527453158f.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>
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);
}