X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Factions%2Fmaximize.c;h=443ff7e76bbd3d85432046390481d52ad425c30e;hb=6d9bbfb4eb7d2c6b0cb9fb0ee5e6ab0b7dd0ea7a;hp=508c2d375d0c4a85651ecb424703ac9f849001f5;hpb=ee6671c3fac371b7d631976953e304e1f761e928;p=chaz%2Fopenbox diff --git a/openbox/actions/maximize.c b/openbox/actions/maximize.c index 508c2d37..443ff7e7 100644 --- a/openbox/actions/maximize.c +++ b/openbox/actions/maximize.c @@ -1,24 +1,66 @@ #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); void action_maximize_startup() { actions_register("Maximize", - NULL, NULL, + 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->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) { + Options *o = options; + if (data->client) { actions_client_move(data, TRUE); - client_maximize(data->client, - !(data->client->max_horz || data->client->max_vert), - 0); + + if (o->toggle) + client_maximize(data->client, + !data->client->max_horz || !data->client->max_vert, + 0); + else + client_maximize(data->client, o->on, 0); + actions_client_move(data, FALSE); }