diff --git a/src/misc.c b/src/misc.c index 3d78c930..93f1be1f 100644 --- a/src/misc.c +++ b/src/misc.c @@ -731,49 +731,28 @@ static char *keysymToString(KeySym keysym, unsigned int state) char *GetShortcutString(const char *shortcut) { char *buffer = NULL; - char *k; - int control = 0; - char *tmp, *text; + char *k, *tmp, *text; tmp = text = wstrdup(shortcut); /* get modifiers */ while ((k = strchr(text, '+')) != NULL) { int mod; + const char *lbl; *k = 0; mod = wXModifierFromKey(text); if (mod < 0) { return wstrdup("bug"); } - - if (strcasecmp(text, "Meta") == 0) { - buffer = wstrappend(buffer, "M+"); - } else if (strcasecmp(text, "Alt") == 0) { - buffer = wstrappend(buffer, "A+"); - } else if (strcasecmp(text, "Shift") == 0) { - buffer = wstrappend(buffer, "Sh+"); - } else if (strcasecmp(text, "Mod1") == 0) { - buffer = wstrappend(buffer, "M1+"); - } else if (strcasecmp(text, "Mod2") == 0) { - buffer = wstrappend(buffer, "M2+"); - } else if (strcasecmp(text, "Mod3") == 0) { - buffer = wstrappend(buffer, "M3+"); - } else if (strcasecmp(text, "Mod4") == 0) { - buffer = wstrappend(buffer, "M4+"); - } else if (strcasecmp(text, "Mod5") == 0) { - buffer = wstrappend(buffer, "M5+"); - } else if (strcasecmp(text, "Control") == 0) { - control = 1; - } else { + lbl = wXModifierToShortcutLabel(mod); + if (lbl) + buffer = wstrappend(buffer, lbl); + else buffer = wstrappend(buffer, text); - } text = k + 1; } - if (control) { - buffer = wstrappend(buffer, "^"); - } buffer = wstrappend(buffer, text); wfree(tmp); diff --git a/src/xmodifier.c b/src/xmodifier.c index e114f650..641a8e35 100644 --- a/src/xmodifier.c +++ b/src/xmodifier.c @@ -262,6 +262,34 @@ static void x_reset_modifier_mapping(Display * display) XFreeModifiermap(x_modifier_keymap); } +const char *wXModifierToShortcutLabel(int mask) +{ + if (mask < 0) + return NULL; + + if (mask == ShiftMask) + return "Sh+"; + if (mask == ControlMask) + return "^"; + if (mask == AltMask) + return "A+"; + if (mask == Mod1Mask) + return "M1+"; + if (mask == Mod2Mask) + return "M2+"; + if (mask == Mod3Mask) + return "M3+"; + if (mask == Mod4Mask) + return "M4+"; + if (mask == Mod5Mask) + return "M5+"; + if (mask == MetaMask) + return "M+"; + + wwarning("Can't convert keymask %d to shortcut label", mask); + return NULL; +} + int wXModifierFromKey(const char *key) { if (strcasecmp(key, "SHIFT") == 0 && ShiftMask != 0) diff --git a/src/xmodifier.h b/src/xmodifier.h index 89e67572..915b1137 100644 --- a/src/xmodifier.h +++ b/src/xmodifier.h @@ -22,5 +22,6 @@ void wXModifierInitialize(void); int wXModifierFromKey(const char *key); +const char *wXModifierToShortcutLabel(int mask); #endif /* _XMODIFIER_H_INCLUDED */