all repos — openbox @ 9a0aab8d8d54baed38cdfeb9dcc248232ffa0736

openbox fork - make it a bit more like ryudo

split shade back into shade/unshade/toggleshade
Dana Jansens danakj@orodu.net
commit

9a0aab8d8d54baed38cdfeb9dcc248232ffa0736

parent

355981bf14a888b310be40018f9b7d35bc05e606

1 files changed, 22 insertions(+), 42 deletions(-)

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

@@ -1,64 +1,44 @@

#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_shade_startup() { - actions_register("Shade", - setup_func, - free_func, - run_func, - NULL, NULL); + actions_register("Shade", NULL, NULL, run_func_on, NULL, NULL); + actions_register("Unshade", NULL, NULL, run_func_off, NULL, NULL); + actions_register("ToggleShade", 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_shade(data->client, TRUE); + actions_client_move(data, FALSE); } - - return o; + return FALSE; } -static void free_func(gpointer options) +static gboolean run_func_off(ObActionsData *data, gpointer options) { - Options *o = options; - - g_free(o); + if (data->client) { + actions_client_move(data, TRUE); + client_shade(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) - client_shade(data->client, !data->client->shaded); - else - client_shade(data->client, o->on); + client_shade(data->client, !data->client->shaded); actions_client_move(data, FALSE); } - return FALSE; }