all repos — openbox @ ddea4dcedd81d8890f85c4cd49e4c95ee5e8f01b

openbox fork - make it a bit more like ryudo

split decorations into decorate/undecorate/toggledecorations
Dana Jansens danakj@orodu.net
commit

ddea4dcedd81d8890f85c4cd49e4c95ee5e8f01b

parent

6c538915c86b0330bd78e8d8f3e77d78cf0c5680

1 files changed, 23 insertions(+), 38 deletions(-)

jump to
M openbox/actions/decorations.copenbox/actions/decorations.c

@@ -1,62 +1,47 @@

#include "openbox/actions.h" #include "openbox/client.h" -typedef struct { - gboolean toggle; - gboolean on; -} 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); +static gboolean run_func_on(ObActionsData *data, gpointer options); +static gboolean run_func_off(ObActionsData *data, gpointer options); +static gboolean run_func_toggle(ObActionsData *data, gpointer options); void action_decorations_startup() { - actions_register("Decorations", - setup_func, - free_func, - run_func, + actions_register("Decorate", NULL, NULL, run_func_on, NULL, NULL); + actions_register("Undecorate", NULL, NULL, run_func_off, NULL, NULL); + actions_register("ToggleDecorations", NULL, NULL, run_func_toggle, NULL, NULL); } -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) +/* Always return FALSE because its not interactive */ +static gboolean run_func_on(ObActionsData *data, gpointer options) { - xmlNodePtr n; - Options *o; - - o = g_new0(Options, 1); - o->toggle = TRUE; - - if ((n = parse_find_node("state", node))) { - gchar *s = parse_string(doc, n); - if (g_ascii_strcasecmp(s, "toggle")) { - o->toggle = FALSE; - o->on = parse_bool(doc, n); - } - g_free(s); + if (data->client) { + actions_client_move(data, TRUE); + client_set_undecorated(data->client, TRUE); + actions_client_move(data, FALSE); } - - return o; + return FALSE; } -static void free_func(gpointer options) +/* Always return FALSE because its not interactive */ +static gboolean run_func_off(ObActionsData *data, gpointer options) { - Options *o = options; - - g_free(o); + if (data->client) { + actions_client_move(data, TRUE); + client_set_undecorated(data->client, FALSE); + actions_client_move(data, FALSE); + } + return FALSE; } /* Always return FALSE because its not interactive */ -static gboolean run_func(ObActionsData *data, gpointer options) +static gboolean run_func_toggle(ObActionsData *data, gpointer options) { - Options *o = options; - if (data->client) { actions_client_move(data, TRUE); - if (o->toggle || o->on != !data->client->undecorated) - client_set_undecorated(data->client, !data->client->undecorated); + client_set_undecorated(data->client, !data->client->undecorated); actions_client_move(data, FALSE); } - return FALSE; }