diff --git a/src/event.c b/src/event.c index f5014e3b..bfcead1c 100644 --- a/src/event.c +++ b/src/event.c @@ -1852,21 +1852,7 @@ static void handleKeyPress(XEvent * event) case WKBD_RUN: { - char *cmdline; - - cmdline = ExpandOptions(scr, _("exec %A(Run,Type command to run:)")); - - if (cmdline) { - XGrabPointer(dpy, scr->root_win, True, 0, - GrabModeAsync, GrabModeAsync, None, wPreferences.cursor[WCUR_WAIT], CurrentTime); - XSync(dpy, False); - - ExecuteShellCommand(scr, cmdline); - wfree(cmdline); - - XUngrabPointer(dpy, CurrentTime); - XSync(dpy, False); - } + ExecuteInputCommand(scr, _("exec %A(Run, Type command:)")); break; } diff --git a/src/misc.c b/src/misc.c index 33e0bcc1..9d82423d 100644 --- a/src/misc.c +++ b/src/misc.c @@ -679,6 +679,24 @@ char *ExpandOptions(WScreen *scr, const char *cmdline) return NULL; } +void ExecuteInputCommand(WScreen *scr, const char *cmdline) +{ + char *cmd; + + cmd = ExpandOptions(scr, cmdline); + if (cmd) { + XGrabPointer(dpy, scr->root_win, True, 0, + GrabModeAsync, GrabModeAsync, None, wPreferences.cursor[WCUR_WAIT], CurrentTime); + XSync(dpy, False); + + ExecuteShellCommand(scr, cmd); + wfree(cmd); + + XUngrabPointer(dpy, CurrentTime); + XSync(dpy, False); + } +} + void ParseWindowName(WMPropList *value, char **winstance, char **wclass, const char *where) { char *name; diff --git a/src/misc.h b/src/misc.h index c4b98254..fb360380 100644 --- a/src/misc.h +++ b/src/misc.h @@ -45,6 +45,7 @@ void SendHelperMessage(WScreen *scr, char type, int workspace, const char *msg); char *ShrinkString(WMFont *font, const char *string, int width); char *FindImage(const char *paths, const char *file); char *ExpandOptions(WScreen * scr, const char *cmdline); +void ExecuteInputCommand(WScreen *scr, const char *cmdline); char *GetShortcutString(const char *text); char *GetShortcutKey(WShortKey key); char *EscapeWM_CLASS(const char *name, const char *class); diff --git a/src/rootmenu.c b/src/rootmenu.c index ee2f6199..e31e7ff9 100644 --- a/src/rootmenu.c +++ b/src/rootmenu.c @@ -148,20 +148,7 @@ static Shortcut *shortcutList = NULL; static void execCommand(WMenu * menu, WMenuEntry * entry) { - char *cmdline; - - cmdline = ExpandOptions(menu->frame->screen_ptr, (char *)entry->clientdata); - - XGrabPointer(dpy, menu->frame->screen_ptr->root_win, True, 0, - GrabModeAsync, GrabModeAsync, None, wPreferences.cursor[WCUR_WAIT], CurrentTime); - XSync(dpy, 0); - - if (cmdline) { - ExecuteShellCommand(menu->frame->screen_ptr, cmdline); - wfree(cmdline); - } - XUngrabPointer(dpy, CurrentTime); - XSync(dpy, 0); + ExecuteInputCommand(menu->frame->screen_ptr, (char *)entry->clientdata); } static void exitCommand(WMenu * menu, WMenuEntry * entry)