mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-19 12:28:22 +01:00
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.
This commit is contained in:
committed by
Carlos R. Mafra
parent
809c536879
commit
3ae34b958c
@@ -52,7 +52,7 @@ typedef struct _Panel {
|
|||||||
WMColor *gray;
|
WMColor *gray;
|
||||||
WMFont *font;
|
WMFont *font;
|
||||||
|
|
||||||
/**/ char capturing;
|
Bool capturing;
|
||||||
char **shortcuts;
|
char **shortcuts;
|
||||||
int actionCount;
|
int actionCount;
|
||||||
} _Panel;
|
} _Panel;
|
||||||
@@ -230,23 +230,27 @@ static void XConvertCase(register KeySym sym, KeySym * lower, KeySym * upper)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static char *captureShortcut(Display * dpy, _Panel * panel)
|
char *capture_shortcut(Display *dpy, Bool *capturing, Bool convert_case)
|
||||||
{
|
{
|
||||||
XEvent ev;
|
XEvent ev;
|
||||||
KeySym ksym, lksym, uksym;
|
KeySym ksym, lksym, uksym;
|
||||||
char buffer[64];
|
char buffer[64];
|
||||||
char *key = NULL;
|
char *key = NULL;
|
||||||
|
|
||||||
while (panel->capturing) {
|
while (*capturing) {
|
||||||
XAllowEvents(dpy, AsyncKeyboard, CurrentTime);
|
XAllowEvents(dpy, AsyncKeyboard, CurrentTime);
|
||||||
WMNextEvent(dpy, &ev);
|
WMNextEvent(dpy, &ev);
|
||||||
if (ev.type == KeyPress && ev.xkey.keycode != 0) {
|
if (ev.type == KeyPress && ev.xkey.keycode != 0) {
|
||||||
ksym = XKeycodeToKeysym(dpy, ev.xkey.keycode, 0);
|
ksym = XKeycodeToKeysym(dpy, ev.xkey.keycode, 0);
|
||||||
if (!IsModifierKey(ksym)) {
|
if (!IsModifierKey(ksym)) {
|
||||||
XConvertCase(ksym, &lksym, &uksym);
|
if (convert_case) {
|
||||||
key = XKeysymToString(uksym);
|
XConvertCase(ksym, &lksym, &uksym);
|
||||||
|
key = XKeysymToString(uksym);
|
||||||
|
} else {
|
||||||
|
key = XKeysymToString(ksym);
|
||||||
|
}
|
||||||
|
|
||||||
panel->capturing = 0;
|
*capturing = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -296,7 +300,7 @@ static void captureClick(WMWidget * w, void *data)
|
|||||||
WMSetLabelText(panel->instructionsL,
|
WMSetLabelText(panel->instructionsL,
|
||||||
_("Press the desired shortcut key(s) or click Cancel to stop capturing."));
|
_("Press the desired shortcut key(s) or click Cancel to stop capturing."));
|
||||||
XGrabKeyboard(dpy, WMWidgetXID(panel->parent), True, GrabModeAsync, GrabModeAsync, CurrentTime);
|
XGrabKeyboard(dpy, WMWidgetXID(panel->parent), True, GrabModeAsync, GrabModeAsync, CurrentTime);
|
||||||
shortcut = captureShortcut(dpy, panel);
|
shortcut = capture_shortcut(dpy, &panel->capturing, 1);
|
||||||
if (shortcut) {
|
if (shortcut) {
|
||||||
int row = WMGetListSelectedItemRow(panel->actLs);
|
int row = WMGetListSelectedItemRow(panel->actLs);
|
||||||
|
|
||||||
|
|||||||
@@ -176,6 +176,8 @@ static Bool shouldRemoveItem(struct WEditMenuDelegate *delegate, WEditMenu * men
|
|||||||
|
|
||||||
static void freeItemData(ItemData * data);
|
static void freeItemData(ItemData * data);
|
||||||
|
|
||||||
|
extern char *capture_shortcut(Display *dpy, Bool *capturing, Bool convert_case);
|
||||||
|
|
||||||
static WEditMenuDelegate menuDelegate = {
|
static WEditMenuDelegate menuDelegate = {
|
||||||
NULL,
|
NULL,
|
||||||
menuItemCloned,
|
menuItemCloned,
|
||||||
@@ -254,58 +256,6 @@ static void browseForFile(WMWidget * self, void *clientData)
|
|||||||
wfree(oldprog);
|
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)
|
static void sgrabClicked(WMWidget * w, void *data)
|
||||||
{
|
{
|
||||||
_Panel *panel = (_Panel *) data;
|
_Panel *panel = (_Panel *) data;
|
||||||
@@ -322,7 +272,7 @@ static void sgrabClicked(WMWidget * w, void *data)
|
|||||||
panel->capturing = 1;
|
panel->capturing = 1;
|
||||||
WMSetButtonText(w, _("Cancel"));
|
WMSetButtonText(w, _("Cancel"));
|
||||||
XGrabKeyboard(dpy, WMWidgetXID(panel->parent), True, GrabModeAsync, GrabModeAsync, CurrentTime);
|
XGrabKeyboard(dpy, WMWidgetXID(panel->parent), True, GrabModeAsync, GrabModeAsync, CurrentTime);
|
||||||
shortcut = captureShortcut(dpy, panel);
|
shortcut = capture_shortcut(dpy, &panel->capturing, 0);
|
||||||
if (shortcut) {
|
if (shortcut) {
|
||||||
WMSetTextFieldText(panel->shortT, shortcut);
|
WMSetTextFieldText(panel->shortT, shortcut);
|
||||||
updateMenuItem(panel, panel->currentItem, panel->shortT);
|
updateMenuItem(panel, panel->currentItem, panel->shortT);
|
||||||
|
|||||||
Reference in New Issue
Block a user