X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Faction.c;h=d394b95b793a6b9c3d6a506b81a7d54bbc1ed3ce;hb=f85a85541790a6095eb583ddb8684eece8dcc0c6;hp=e0f411e0fa2a1b47ca1dc211c072f69a20224acc;hpb=78282959f970d28131e6aa8d66adce359aa145dc;p=chaz%2Fopenbox diff --git a/openbox/action.c b/openbox/action.c index e0f411e0..d394b95b 100644 --- a/openbox/action.c +++ b/openbox/action.c @@ -698,6 +698,9 @@ ObAction *action_from_string(char *name, ObUserAction uact) a = action_new(actionstrings[i].func, uact); if (actionstrings[i].setup) actionstrings[i].setup(&a, uact); + /* only key bindings can be interactive. thus saith the xor. */ + if (uact != OB_USER_ACTION_KEYBOARD_KEY) + a->data.any.interactive = FALSE; break; } if (!exist) @@ -720,7 +723,7 @@ ObAction *action_parse(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, if (act->func == action_execute || act->func == action_restart) { if ((n = parse_find_node("execute", node->xmlChildrenNode))) { gchar *s = parse_string(doc, n); - act->data.execute.path = ob_expand_tilde(s); + act->data.execute.path = parse_expand_tilde(s); g_free(s); } } else if (act->func == action_showmenu) { @@ -764,7 +767,6 @@ ObAction *action_parse(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, } void action_run_full(ObAction *a, struct _ObClient *c, - ObFrameContext context, guint state, guint button, gint x, gint y, gboolean cancel, gboolean done) { @@ -781,7 +783,7 @@ void action_run_full(ObAction *a, struct _ObClient *c, a->data.inter.cancel = cancel; a->data.inter.final = done; if (!(cancel || done)) - keyboard_interactive_grab(state, c, context, a); + keyboard_interactive_grab(state, c, a); } a->func(&a->data); @@ -798,6 +800,7 @@ void action_execute(union ActionData *data) g_warning("failed to execute '%s': %s", cmd, e->message); } + g_free(cmd); } else { g_warning("failed to convert '%s' from utf8", data->execute.path); } @@ -866,9 +869,11 @@ void action_raise(union ActionData *data) void action_unshaderaise(union ActionData *data) { if (data->client.any.c) { - if (data->client.any.c->shaded) + if (data->client.any.c->shaded) { + grab_pointer(TRUE, OB_CURSOR_NONE); client_shade(data->client.any.c, FALSE); - else + grab_pointer(FALSE, OB_CURSOR_NONE); + } else stacking_raise(CLIENT_AS_WINDOW(data->client.any.c)); } } @@ -878,8 +883,11 @@ void action_shadelower(union ActionData *data) if (data->client.any.c) { if (data->client.any.c->shaded) stacking_lower(CLIENT_AS_WINDOW(data->client.any.c)); - else + else { + grab_pointer(TRUE, OB_CURSOR_NONE); client_shade(data->client.any.c, TRUE); + grab_pointer(FALSE, OB_CURSOR_NONE); + } } } @@ -903,20 +911,29 @@ void action_kill(union ActionData *data) void action_shade(union ActionData *data) { - if (data->client.any.c) + if (data->client.any.c) { + grab_pointer(TRUE, OB_CURSOR_NONE); client_shade(data->client.any.c, TRUE); + grab_pointer(FALSE, OB_CURSOR_NONE); + } } void action_unshade(union ActionData *data) { - if (data->client.any.c) + if (data->client.any.c) { + grab_pointer(TRUE, OB_CURSOR_NONE); client_shade(data->client.any.c, FALSE); + grab_pointer(FALSE, OB_CURSOR_NONE); + } } void action_toggle_shade(union ActionData *data) { - if (data->client.any.c) + if (data->client.any.c) { + grab_pointer(TRUE, OB_CURSOR_NONE); client_shade(data->client.any.c, !data->client.any.c->shaded); + grab_pointer(FALSE, OB_CURSOR_NONE); + } } void action_toggle_omnipresent(union ActionData *data) @@ -1150,7 +1167,7 @@ void action_restart(union ActionData *data) void action_exit(union ActionData *data) { - ob_exit(); + ob_exit(0); } void action_showmenu(union ActionData *data) @@ -1215,11 +1232,12 @@ void action_growtoedge(union ActionData *data) { int x, y, width, height, dest; ObClient *c = data->diraction.any.c; - Rect *a = screen_area(c->desktop); + Rect *a; if (!c) return; + a = screen_area(c->desktop); x = c->frame->area.x; y = c->frame->area.y; width = c->frame->area.width;