From 118beb2c60ce065c9a7461b159bda18eb4c375e2 Mon Sep 17 00:00:00 2001 From: David Maciejak Date: Mon, 1 Sep 2014 12:48:36 +0700 Subject: [PATCH] wmaker: improve key shortcut labelling This patch is improving the key shortcut labelling in the root menu. It modifies the GetShortcutString function to save some cycles as wXModifierFromKey is already doing all the string comparisons. This patch introduces a new function called wXModifierToShortcutLabel that is checking the return value from wXModifierFromKey. Not sure why Control was set as a special key, as keyboards could have 2 controls but also 2 shift keys. Signed-off-by: Carlos R. Mafra --- src/misc.c | 33 ++++++--------------------------- src/xmodifier.c | 28 ++++++++++++++++++++++++++++ src/xmodifier.h | 1 + 3 files changed, 35 insertions(+), 27 deletions(-) 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 */