aboutsummaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
Diffstat (limited to 'common')
-rw-r--r--common/util.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/common/util.c b/common/util.c
index ed6d033f..b5037d35 100644
--- a/common/util.c
+++ b/common/util.c
@@ -13,3 +13,41 @@ int numlen(int n) {
if (n >= 10) return 2;
return 1;
}
+
+static struct modifier_key {
+ char *name;
+ uint32_t mod;
+} modifiers[] = {
+ { XKB_MOD_NAME_SHIFT, WLC_BIT_MOD_SHIFT },
+ { XKB_MOD_NAME_CAPS, WLC_BIT_MOD_CAPS },
+ { XKB_MOD_NAME_CTRL, WLC_BIT_MOD_CTRL },
+ { "Ctrl", WLC_BIT_MOD_CTRL },
+ { XKB_MOD_NAME_ALT, WLC_BIT_MOD_ALT },
+ { "Alt", WLC_BIT_MOD_ALT },
+ { XKB_MOD_NAME_NUM, WLC_BIT_MOD_MOD2 },
+ { "Mod3", WLC_BIT_MOD_MOD3 },
+ { XKB_MOD_NAME_LOGO, WLC_BIT_MOD_LOGO },
+ { "Mod5", WLC_BIT_MOD_MOD5 },
+};
+
+uint32_t get_modifier_mask_by_name(const char *name) {
+ int i;
+ for (i = 0; i < (int)(sizeof(modifiers) / sizeof(struct modifier_key)); ++i) {
+ if (strcasecmp(modifiers[i].name, name) == 0) {
+ return modifiers[i].mod;
+ }
+ }
+
+ return 0;
+}
+
+const char *get_modifier_name_by_mask(uint32_t modifier) {
+ int i;
+ for (i = 0; i < (int)(sizeof(modifiers) / sizeof(struct modifier_key)); ++i) {
+ if (modifiers[i].mod == modifier) {
+ return modifiers[i].name;
+ }
+ }
+
+ return NULL;
+}