From b0fa629769ef17cae28f137aad80f8c4798f7592 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Fri, 22 Jun 2007 14:32:50 +0000 Subject: [PATCH] add the unfocus action --- Makefile.am | 1 + openbox/action.c | 21 ---------------- openbox/actions/all.c | 1 + openbox/actions/all.h | 1 + openbox/actions/unfocus.c | 53 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 56 insertions(+), 21 deletions(-) create mode 100644 openbox/actions/unfocus.c diff --git a/Makefile.am b/Makefile.am index b59fdd34..8f2c7aa0 100644 --- a/Makefile.am +++ b/Makefile.am @@ -171,6 +171,7 @@ openbox_openbox_SOURCES = \ 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 \ diff --git a/openbox/action.c b/openbox/action.c index a56f4cb4..cf1ba86f 100644 --- a/openbox/action.c +++ b/openbox/action.c @@ -454,16 +454,6 @@ ActionString actionstrings[] = 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, @@ -1020,12 +1010,6 @@ void action_run_string(const gchar *name, struct _ObClient *c, Time time) 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); @@ -1033,11 +1017,6 @@ void action_iconify(union ActionData *data) 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) { if (data->client.any.c->shaded) diff --git a/openbox/actions/all.c b/openbox/actions/all.c index c4edc5c3..3b1fb5fe 100644 --- a/openbox/actions/all.c +++ b/openbox/actions/all.c @@ -17,4 +17,5 @@ void action_all_startup() action_raise_startup(); action_lower_startup(); action_raiselower_startup(); + action_unfocus_startup(); } diff --git a/openbox/actions/all.h b/openbox/actions/all.h index 48b6d1c1..69f2a589 100644 --- a/openbox/actions/all.h +++ b/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 diff --git a/openbox/actions/unfocus.c b/openbox/actions/unfocus.c new file mode 100644 index 00000000..d581864e --- /dev/null +++ b/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; +} -- 2.45.2