From 3ae34b958c8519618f0fbd648eee10118a783ed2 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rodolfo=20Garc=C3=ADa=20Pe=C3=B1as=20=28kix=29?= Date: Tue, 17 Jan 2012 21:43:58 +0100 Subject: [PATCH] WPrefs: Remove duplicated function captureShortcut() The function captureShortcut() is implemented in both files KeyboardShortcuts.c and Menu.c, with just a minor difference regarding the conversion to upper case. To unify them, define a new function which includes a new boolean paramenter to dictate whether the upper case conversion should be done or not. --- WPrefs.app/KeyboardShortcuts.c | 20 +++++++++------ WPrefs.app/Menu.c | 56 +++--------------------------------------- 2 files changed, 15 insertions(+), 61 deletions(-) diff --git a/WPrefs.app/KeyboardShortcuts.c b/WPrefs.app/KeyboardShortcuts.c index 4ea7fa4c..4fd5305c 100644 --- a/WPrefs.app/KeyboardShortcuts.c +++ b/WPrefs.app/KeyboardShortcuts.c @@ -52,7 +52,7 @@ typedef struct _Panel { WMColor *gray; WMFont *font; - /**/ char capturing; + Bool capturing; char **shortcuts; int actionCount; } _Panel; @@ -230,23 +230,27 @@ static void XConvertCase(register KeySym sym, KeySym * lower, KeySym * upper) } #endif -static char *captureShortcut(Display * dpy, _Panel * panel) +char *capture_shortcut(Display *dpy, Bool *capturing, Bool convert_case) { XEvent ev; KeySym ksym, lksym, uksym; char buffer[64]; char *key = NULL; - while (panel->capturing) { + while (*capturing) { XAllowEvents(dpy, AsyncKeyboard, CurrentTime); WMNextEvent(dpy, &ev); if (ev.type == KeyPress && ev.xkey.keycode != 0) { ksym = XKeycodeToKeysym(dpy, ev.xkey.keycode, 0); if (!IsModifierKey(ksym)) { - XConvertCase(ksym, &lksym, &uksym); - key = XKeysymToString(uksym); - - panel->capturing = 0; + if (convert_case) { + XConvertCase(ksym, &lksym, &uksym); + key = XKeysymToString(uksym); + } else { + key = XKeysymToString(ksym); + } + + *capturing = 0; break; } } @@ -296,7 +300,7 @@ static void captureClick(WMWidget * w, void *data) WMSetLabelText(panel->instructionsL, _("Press the desired shortcut key(s) or click Cancel to stop capturing.")); XGrabKeyboard(dpy, WMWidgetXID(panel->parent), True, GrabModeAsync, GrabModeAsync, CurrentTime); - shortcut = captureShortcut(dpy, panel); + shortcut = capture_shortcut(dpy, &panel->capturing, 1); if (shortcut) { int row = WMGetListSelectedItemRow(panel->actLs); diff --git a/WPrefs.app/Menu.c b/WPrefs.app/Menu.c index 21a9fe13..6784c477 100644 --- a/WPrefs.app/Menu.c +++ b/WPrefs.app/Menu.c @@ -176,6 +176,8 @@ static Bool shouldRemoveItem(struct WEditMenuDelegate *delegate, WEditMenu * men static void freeItemData(ItemData * data); +extern char *capture_shortcut(Display *dpy, Bool *capturing, Bool convert_case); + static WEditMenuDelegate menuDelegate = { NULL, menuItemCloned, @@ -254,58 +256,6 @@ static void browseForFile(WMWidget * self, void *clientData) wfree(oldprog); } -static char *captureShortcut(Display * dpy, _Panel * panel) -{ - XEvent ev; - KeySym ksym; - char buffer[64]; - char *key = NULL; - - while (panel->capturing) { - XAllowEvents(dpy, AsyncKeyboard, CurrentTime); - WMNextEvent(dpy, &ev); - if (ev.type == KeyPress && ev.xkey.keycode != 0) { - ksym = XKeycodeToKeysym(dpy, ev.xkey.keycode, 0); - if (!IsModifierKey(ksym)) { - key = XKeysymToString(ksym); - panel->capturing = 0; - break; - } - } - WMHandleEvent(&ev); - } - - if (!key) - return NULL; - - buffer[0] = 0; - - if (ev.xkey.state & ControlMask) { - strcat(buffer, "Control+"); - } - if (ev.xkey.state & ShiftMask) { - strcat(buffer, "Shift+"); - } - if (ev.xkey.state & Mod1Mask) { - strcat(buffer, "Mod1+"); - } - if (ev.xkey.state & Mod2Mask) { - strcat(buffer, "Mod2+"); - } - if (ev.xkey.state & Mod3Mask) { - strcat(buffer, "Mod3+"); - } - if (ev.xkey.state & Mod4Mask) { - strcat(buffer, "Mod4+"); - } - if (ev.xkey.state & Mod5Mask) { - strcat(buffer, "Mod5+"); - } - strcat(buffer, key); - - return wstrdup(buffer); -} - static void sgrabClicked(WMWidget * w, void *data) { _Panel *panel = (_Panel *) data; @@ -322,7 +272,7 @@ static void sgrabClicked(WMWidget * w, void *data) panel->capturing = 1; WMSetButtonText(w, _("Cancel")); XGrabKeyboard(dpy, WMWidgetXID(panel->parent), True, GrabModeAsync, GrabModeAsync, CurrentTime); - shortcut = captureShortcut(dpy, panel); + shortcut = capture_shortcut(dpy, &panel->capturing, 0); if (shortcut) { WMSetTextFieldText(panel->shortT, shortcut); updateMenuItem(panel, panel->currentItem, panel->shortT); -- 2.11.4.GIT