diff options
Diffstat (limited to 'src/events.c')
-rw-r--r-- | src/events.c | 30 |
1 files changed, 24 insertions, 6 deletions
diff --git a/src/events.c b/src/events.c index 0937b0b..7a6de8c 100644 --- a/src/events.c +++ b/src/events.c @@ -372,8 +372,13 @@ handle_key (screen_info *s) if ((key_action = find_keybinding (keysym, mod))) { + char *result; XSetInputFocus (dpy, fwin, revert, CurrentTime); - command (key_action->data); + result = command (1, key_action->data); + + /* Gobble the result. */ + if (result) + free (result); } else { @@ -436,9 +441,10 @@ key_press (XEvent *ev) text. This text is passed back using the RP_COMMAND_RESULT Atom. The client will wait for this property change so something must be returned. */ -static void +static char * execute_remote_command (Window w) { + char *result = NULL; Atom type_ret; int format_ret; unsigned long nitems; @@ -458,7 +464,7 @@ execute_remote_command (Window w) if (req) { PRINT_DEBUG ("command: %s\n", req); - command (req); + result = command (0, req); } XFree (req); } @@ -466,6 +472,8 @@ execute_remote_command (Window w) { PRINT_DEBUG ("Couldn't get RP_COMMAND Property\n"); } + + return result; } /* Command requests are posted as a property change using the @@ -476,6 +484,7 @@ execute_remote_command (Window w) static void receive_command () { + char *result; Atom type_ret; int format_ret; unsigned long nitems; @@ -497,9 +506,18 @@ receive_command () w = *(Window *)prop_return; XFree (prop_return); - execute_remote_command (w); - XChangeProperty (dpy, w, rp_command_result, XA_STRING, - 8, PropModeReplace, "Success", 8); + result = execute_remote_command (w); + if (result) + { + XChangeProperty (dpy, w, rp_command_result, XA_STRING, + 8, PropModeReplace, result, strlen (result)); + free (result); + } + else + { + XChangeProperty (dpy, w, rp_command_result, XA_STRING, + 8, PropModeReplace, NULL, 0); + } } else { |