X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Factions%2Fomnipresent.c;h=4309acc642231a0ee35f555af2108d060a2a9720;hb=0a7ff45e4930a72968911325a019f0ea64b62a43;hp=02bd99179d0e3f8b8abf17c80dbfd6dbef42a946;hpb=48facba205a42b502038b43e1a735a30ffe276f8;p=chaz%2Fopenbox diff --git a/openbox/actions/omnipresent.c b/openbox/actions/omnipresent.c index 02bd9917..4309acc6 100644 --- a/openbox/actions/omnipresent.c +++ b/openbox/actions/omnipresent.c @@ -2,61 +2,22 @@ #include "openbox/client.h" #include "openbox/screen.h" -typedef struct { - gboolean toggle; - gboolean on; -} Options; +static gboolean run_func_toggle(ObActionsData *data, gpointer 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_omnipresent_startup() -{ - actions_register("omnipresent", - setup_func, - free_func, - run_func, - NULL, NULL); -} - -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) +void action_omnipresent_startup(void) { - xmlNodePtr n; - Options *o; - - o = g_new0(Options, 1); - o->toggle = TRUE; - - if ((n = parse_find_node("omnipresent", 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); - } - - return o; -} - -static void free_func(gpointer options) -{ - Options *o = options; - - g_free(o); + actions_register("ToggleOmnipresent", NULL, NULL, run_func_toggle); } /* 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) - if (o->toggle || (o->on != (data->client->desktop == DESKTOP_ALL))) - client_set_desktop(data->client, - data->client->desktop == DESKTOP_ALL ? - screen_desktop : DESKTOP_ALL, FALSE, TRUE); - + if (data->client) { + actions_client_move(data, TRUE); + client_set_desktop(data->client, + data->client->desktop == DESKTOP_ALL ? + screen_desktop : DESKTOP_ALL, FALSE, TRUE); + actions_client_move(data, FALSE); + } return FALSE; }