X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Faction.c;h=483ac8dba349e3504681af6b5c2e0e995bf112cd;hb=740c5b2a20d5110435d0874f8cc6a4c9dfd14777;hp=5f60019ecca45d2989fb07e16907170ef545212f;hpb=6f5292c87ece138a2b80d102ba0919b105b1839a;p=chaz%2Fopenbox diff --git a/openbox/action.c b/openbox/action.c index 5f60019e..483ac8db 100644 --- a/openbox/action.c +++ b/openbox/action.c @@ -809,7 +809,7 @@ ObAction *action_from_string(const gchar *name, ObUserAction uact) { ObAction *a = NULL; gboolean exist = FALSE; - int i; + gint i; for (i = 0; actionstrings[i].name; i++) if (!g_ascii_strcasecmp(name, actionstrings[i].name)) { @@ -831,7 +831,7 @@ ObAction *action_from_string(const gchar *name, ObUserAction uact) ObAction *action_parse(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, ObUserAction uact) { - char *actname; + gchar *actname; ObAction *act = NULL; xmlNodePtr n; @@ -891,8 +891,8 @@ ObAction *action_parse(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, if ((n = parse_find_node("dialog", node->xmlChildrenNode))) act->data.cycle.dialog = parse_bool(doc, n); } + INTERACTIVE_LIMIT(act, uact); } - INTERACTIVE_LIMIT(act, uact); g_free(actname); } return act; @@ -946,10 +946,13 @@ void action_run_list(GSList *acts, ObClient *c, ObFrameContext context, 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; - ob_main_loop_queue_action(ob_main_loop, a); + /* interactive actions are not queued */ + a->func(&a->data); + } else + ob_main_loop_queue_action(ob_main_loop, a); } } } @@ -970,7 +973,7 @@ void action_run_string(const gchar *name, struct _ObClient *c) void action_execute(union ActionData *data) { GError *e = NULL; - char *cmd; + gchar *cmd; if (data->execute.path) { cmd = g_filename_from_utf8(data->execute.path, -1, NULL, NULL, NULL); if (cmd) { @@ -992,6 +995,10 @@ void action_activate(union ActionData *data) void action_focus(union ActionData *data) { + /* if using focus_delay, stop the timer now so that focus doesn't go moving + on us */ + event_halt_focus_delay(); + client_focus(data->client.any.c); } @@ -1300,18 +1307,27 @@ void action_toggle_decorations(union ActionData *data) client_action_end(data); } -static guint32 pick_corner(int x, int y, int cx, int cy, int cw, int ch) +static guint32 pick_corner(gint x, gint y, gint cx, gint cy, gint cw, gint ch) { - if (x - cx > cw / 2) { - if (y - cy > ch / 2) + if ((cw / 3 < 1) || (x - cx > cw / 3 * 2)) { + if ((ch / 3 < 1) || (y - cy > ch / 3 * 2)) return prop_atoms.net_wm_moveresize_size_bottomright; - else + else if (y - cy < ch / 3) return prop_atoms.net_wm_moveresize_size_topright; + else + return prop_atoms.net_wm_moveresize_size_right; + } else if (x - cx < cw / 3) { + if (y - cy > ch / 3 * 2) + return prop_atoms.net_wm_moveresize_size_bottomleft; + else if (y - cy < ch / 3) + return prop_atoms.net_wm_moveresize_size_topleft; + else + return prop_atoms.net_wm_moveresize_size_left; } else { if (y - cy > ch / 2) - return prop_atoms.net_wm_moveresize_size_bottomleft; + return prop_atoms.net_wm_moveresize_size_bottom; else - return prop_atoms.net_wm_moveresize_size_topleft; + return prop_atoms.net_wm_moveresize_size_top; } } @@ -1369,6 +1385,10 @@ void action_showmenu(union ActionData *data) void action_cycle_windows(union ActionData *data) { + /* if using focus_delay, stop the timer now so that focus doesn't go moving + on us */ + event_halt_focus_delay(); + focus_cycle(data->cycle.forward, data->cycle.linear, data->cycle.dialog, data->cycle.inter.final, data->cycle.inter.cancel); @@ -1376,6 +1396,10 @@ void action_cycle_windows(union ActionData *data) void action_directional_focus(union ActionData *data) { + /* if using focus_delay, stop the timer now so that focus doesn't go moving + on us */ + event_halt_focus_delay(); + focus_directional_cycle(data->interdiraction.direction, data->interdiraction.dialog, data->interdiraction.inter.final, @@ -1384,7 +1408,7 @@ void action_directional_focus(union ActionData *data) void action_movetoedge(union ActionData *data) { - int x, y; + gint x, y; ObClient *c = data->diraction.any.c; x = c->frame->area.x; @@ -1416,7 +1440,7 @@ void action_movetoedge(union ActionData *data) void action_growtoedge(union ActionData *data) { - int x, y, width, height, dest; + gint x, y, width, height, dest; ObClient *c = data->diraction.any.c; Rect *a;