all repos — openbox @ b0fa629769ef17cae28f137aad80f8c4798f7592

openbox fork - make it a bit more like ryudo

add the unfocus action
Dana Jansens danakj@orodu.net
commit

b0fa629769ef17cae28f137aad80f8c4798f7592

parent

a5c2aadf2778d6ab4105abd457cd2ab21a1172ec

5 files changed, 56 insertions(+), 21 deletions(-)

jump to
M Makefile.amMakefile.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.copenbox/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.copenbox/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.hopenbox/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; +}