X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Factions%2Fomnipresent.c;h=030a01592b9857df888dd768440cc964024de8eb;hb=18141d78dab9e19161cae3e7e89f8b95591a2e9b;hp=92cdfb32004f73556d355964c70198310729380c;hpb=7f50e04925e539dbe28997a6b07369d9f5cb43e3;p=chaz%2Fopenbox diff --git a/openbox/actions/omnipresent.c b/openbox/actions/omnipresent.c index 92cdfb32..030a0159 100644 --- a/openbox/actions/omnipresent.c +++ b/openbox/actions/omnipresent.c @@ -2,61 +2,23 @@ #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() +void action_omnipresent_startup(void) { - actions_register("omnipresent", - setup_func, - free_func, - run_func, + actions_register("ToggleOmnipresent", NULL, NULL, run_func_toggle, NULL, NULL); } -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) -{ - 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); - } - - 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) +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; }