add the unfocus action
Dana Jansens danakj@orodu.net
5 files changed,
56 insertions(+),
21 deletions(-)
M
Makefile.am
→
Makefile.am
@@ -171,6 +171,7 @@ openbox/actions/reconfigure.c \
openbox/actions/restart.c \ openbox/actions/showdesktop.c \ openbox/actions/showmenu.c \ + openbox/actions/unfocus.c \ openbox/actions.c \ openbox/actions.h \ openbox/client.c \
M
openbox/action.c
→
openbox/action.c
@@ -455,16 +455,6 @@ action_directional_focus,
setup_action_directional_focus_northwest }, { - "unfocus", - action_unfocus, - setup_client_action - }, - { - "focustobottom", - action_focus_order_to_bottom, - setup_client_action - }, - { "kill", action_kill, setup_client_action@@ -1020,22 +1010,11 @@
action_run(l, c, 0, time); } -void action_unfocus (union ActionData *data) -{ - if (data->client.any.c == focus_client) - focus_fallback(FALSE, FALSE, TRUE); -} - void action_iconify(union ActionData *data) { client_action_start(data); client_iconify(data->client.any.c, TRUE, TRUE, FALSE); client_action_end(data, config_focus_under_mouse); -} - -void action_focus_order_to_bottom(union ActionData *data) -{ - focus_order_to_bottom(data->client.any.c); } void action_unshaderaise(union ActionData *data)
M
openbox/actions/all.c
→
openbox/actions/all.c
@@ -17,4 +17,5 @@ action_focus_startup();
action_raise_startup(); action_lower_startup(); action_raiselower_startup(); + action_unfocus_startup(); }
M
openbox/actions/all.h
→
openbox/actions/all.h
@@ -18,5 +18,6 @@ void action_focus_startup();
void action_raise_startup(); void action_lower_startup(); void action_raiselower_startup(); +void action_unfocus_startup(); #endif
A
openbox/actions/unfocus.c
@@ -0,0 +1,53 @@
+#include "openbox/actions.h" +#include "openbox/focus.h" + +typedef struct { + gboolean tobottom; +} Options; + +static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node); +static void free_func(gpointer options); +static gboolean run_func(ObActionsData *data, gpointer options); + +void action_unfocus_startup() +{ + actions_register("Unfocus", + setup_func, + free_func, + run_func, + NULL, NULL); +} + +static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) +{ + xmlNodePtr n; + Options *o; + + o = g_new0(Options, 1); + o->tobottom = TRUE; + + if ((n = parse_find_node("tobottom", node))) + o->tobottom = parse_bool(doc, n); + return o; +} + +static void free_func(gpointer options) +{ + Options *o = options; + + g_free(o); +} + +/* Always return FALSE because its not interactive */ +static gboolean run_func(ObActionsData *data, gpointer options) +{ + Options *o = options; + + if (data->client && data->client == focus_client) { + if (o->tobottom) + focus_order_to_bottom(data->client); + focus_fallback(FALSE, FALSE, TRUE); + } + + return FALSE; +}