all repos — openbox @ 055aa5cd7411c4563956e376523219afc6198ce1

openbox fork - make it a bit more like ryudo

gracefully handle grabs failing when doing interactive actions
Dana Jansens danakj@orodu.net
commit

055aa5cd7411c4563956e376523219afc6198ce1

parent

7ca410e66357706e36ea740b49d899be832da671

3 files changed, 10 insertions(+), 7 deletions(-)

jump to
M openbox/action.copenbox/action.c

@@ -946,7 +946,8 @@ if (a->data.any.interactive) {

a->data.inter.cancel = cancel; a->data.inter.final = done; if (!(cancel || done)) - keyboard_interactive_grab(state, a->data.any.c, a); + if (!keyboard_interactive_grab(state, a->data.any.c, a)) + continue; /* interactive actions are not queued */ a->func(&a->data);
M openbox/keyboard.copenbox/keyboard.c

@@ -155,8 +155,8 @@

return TRUE; } -void keyboard_interactive_grab(guint state, ObClient *client, - ObAction *action) +gboolean keyboard_interactive_grab(guint state, ObClient *client, + ObAction *action) { ObInteractiveState *s;

@@ -164,10 +164,10 @@ g_assert(action->data.any.interactive);

if (!interactive_states) { if (!grab_keyboard(TRUE)) - return; + return FALSE; if (!grab_pointer(TRUE, OB_CURSOR_NONE)) { grab_keyboard(FALSE); - return; + return FALSE; } }

@@ -178,6 +178,8 @@ s->client = client;

s->actions = g_slist_append(NULL, action); interactive_states = g_slist_append(interactive_states, s); + + return TRUE; } void keyboard_interactive_end(ObInteractiveState *s,
M openbox/keyboard.hopenbox/keyboard.h

@@ -39,8 +39,8 @@

void keyboard_event(struct _ObClient *client, const XEvent *e); void keyboard_reset_chains(); -void keyboard_interactive_grab(guint state, struct _ObClient *client, - struct _ObAction *action); +gboolean keyboard_interactive_grab(guint state, struct _ObClient *client, + struct _ObAction *action); gboolean keyboard_process_interactive_grab(const XEvent *e, struct _ObClient **client);