summaryrefslogtreecommitdiff
path: root/openbox/translate.c
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2007-05-04 01:10:03 +0000
committerDana Jansens <danakj@orodu.net>2007-05-04 01:10:03 +0000
commit7e946f68d9f8ec7c880664b437edbbaa5d49ac10 (patch)
treedf9979455e26627815642071bd4bc43bcc721db8 /openbox/translate.c
parent5784f11132cb2ee64af23695867aca9f4ebe0b9b (diff)
make the modifier key code a lot better...
1) it can handle more user cases. 2) it can handle binding more modifier keys with their keysym names like Hyper and Super. W is a shortcut for Super, cuz the windows key is generally bound to it. 3) if you change your keymap bindings and reconfigure openbox it will learn your changes. and i dunno.. its just nice and stuff now.. you can actually read it I think..
Diffstat (limited to 'openbox/translate.c')
-rw-r--r--openbox/translate.c42
1 files changed, 30 insertions, 12 deletions
diff --git a/openbox/translate.c b/openbox/translate.c
index a7cac557..1ef8e7d5 100644
--- a/openbox/translate.c
+++ b/openbox/translate.c
@@ -19,6 +19,7 @@
#include "openbox.h"
#include "mouse.h"
+#include "modkeys.h"
#include "gettext.h"
#include <glib.h>
#include <string.h>
@@ -26,20 +27,37 @@
static guint translate_modifier(gchar *str)
{
- if (!g_ascii_strcasecmp("Mod1", str) ||
- !g_ascii_strcasecmp("A", str)) return Mod1Mask;
- else if (!g_ascii_strcasecmp("Mod2", str)) return Mod2Mask;
- else if (!g_ascii_strcasecmp("Mod3", str) ||
- !g_ascii_strcasecmp("M", str)) return Mod3Mask;
- else if (!g_ascii_strcasecmp("Mod4", str) ||
- !g_ascii_strcasecmp("W", str)) return Mod4Mask;
- else if (!g_ascii_strcasecmp("Mod5", str)) return Mod5Mask;
+ guint mask = 0;
+
+ if (!g_ascii_strcasecmp("Mod1", str)) mask = Mod1Mask;
+ else if (!g_ascii_strcasecmp("Mod2", str)) mask = Mod2Mask;
+ else if (!g_ascii_strcasecmp("Mod3", str)) mask = Mod3Mask;
+ else if (!g_ascii_strcasecmp("Mod4", str)) mask = Mod4Mask;
+ else if (!g_ascii_strcasecmp("Mod5", str)) mask = Mod5Mask;
+
else if (!g_ascii_strcasecmp("Control", str) ||
- !g_ascii_strcasecmp("C", str)) return ControlMask;
+ !g_ascii_strcasecmp("C", str))
+ mask = modkeys_key_to_mask(OB_MODKEY_KEY_CONTROL);
+ else if (!g_ascii_strcasecmp("Alt", str) ||
+ !g_ascii_strcasecmp("A", str))
+ mask = modkeys_key_to_mask(OB_MODKEY_KEY_ALT);
+ else if (!g_ascii_strcasecmp("Meta", str) ||
+ !g_ascii_strcasecmp("M", str))
+ mask = modkeys_key_to_mask(OB_MODKEY_KEY_META);
+ /* W = windows key, is linked to the Super_L/R buttons */
+ else if (!g_ascii_strcasecmp("Super", str) ||
+ !g_ascii_strcasecmp("W", str))
+ mask = modkeys_key_to_mask(OB_MODKEY_KEY_SUPER);
else if (!g_ascii_strcasecmp("Shift", str) ||
- !g_ascii_strcasecmp("S", str)) return ShiftMask;
- g_message(_("Invalid modifier key '%s' in key/pointer binding"), str);
- return 0;
+ !g_ascii_strcasecmp("S", str))
+ mask = modkeys_key_to_mask(OB_MODKEY_KEY_SHIFT);
+ else if (!g_ascii_strcasecmp("Hyper", str) ||
+ !g_ascii_strcasecmp("H", str))
+ mask = modkeys_key_to_mask(OB_MODKEY_KEY_HYPER);
+ else
+ g_message(_("Invalid modifier key '%s' in key/pointer binding"), str);
+
+ return mask;
}
gboolean translate_button(const gchar *str, guint *state, guint *button)