From: Dana Jansens Date: Fri, 13 Jul 2007 16:03:40 +0000 (-0400) Subject: redo the maximize actions into maximize/unmaximize/togglemaximize with a argument --- diff --git a/Makefile.am b/Makefile.am index 27114f80..61cb6bbb 100644 --- a/Makefile.am +++ b/Makefile.am @@ -172,8 +172,6 @@ openbox_openbox_SOURCES = \ openbox/actions/layer.c \ openbox/actions/lower.c \ openbox/actions/maximize.c \ - openbox/actions/maximizehorizontal.c \ - openbox/actions/maximizevertical.c \ openbox/actions/menu.c \ openbox/actions/move.c \ openbox/actions/moverelative.c \ diff --git a/openbox/actions/all.c b/openbox/actions/all.c index 1bf963ac..a80443bf 100644 --- a/openbox/actions/all.c +++ b/openbox/actions/all.c @@ -21,8 +21,6 @@ void action_all_startup() action_iconify_startup(); action_fullscreen_startup(); action_maximize_startup(); - action_maximizehorizontal_startup(); - action_maximizevertical_startup(); action_moveresizeto_startup(); action_moverelative_startup(); action_shade_startup(); diff --git a/openbox/actions/all.h b/openbox/actions/all.h index acb54dcd..17b4fe3b 100644 --- a/openbox/actions/all.h +++ b/openbox/actions/all.h @@ -22,8 +22,6 @@ void action_unfocus_startup(); void action_iconify_startup(); void action_fullscreen_startup(); void action_maximize_startup(); -void action_maximizehorizontal_startup(); -void action_maximizevertical_startup(); void action_moveresizeto_startup(); void action_moverelative_startup(); void action_shade_startup(); diff --git a/openbox/actions/maximize.c b/openbox/actions/maximize.c index 443ff7e7..8bb0cc95 100644 --- a/openbox/actions/maximize.c +++ b/openbox/actions/maximize.c @@ -1,21 +1,29 @@ #include "openbox/actions.h" #include "openbox/client.h" +/* These match the values for client_maximize */ +typedef enum { + BOTH = 0, + HORZ = 1, + VERT = 2 +} MaxDirection; + typedef struct { - gboolean toggle; - gboolean on; + MaxDirection dir; } 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_maximize_startup() { - actions_register("Maximize", - setup_func, - free_func, - run_func, + actions_register("Maximize", setup_func, g_free, run_func_on, + NULL, NULL); + actions_register("Unmaximize", setup_func, g_free, run_func_off, + NULL, NULL); + actions_register("ToggleMaximize", setup_func, g_free, run_func_toggle, NULL, NULL); } @@ -25,44 +33,59 @@ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) Options *o; o = g_new0(Options, 1); - o->toggle = TRUE; + o->dir = BOTH; - if ((n = parse_find_node("state", node))) { + if ((n = parse_find_node("direction", node))) { gchar *s = parse_string(doc, n); - if (g_ascii_strcasecmp(s, "toggle")) { - o->toggle = FALSE; - o->on = parse_bool(doc, n); - } + if (!g_ascii_strcasecmp(s, "vertical") || + !g_ascii_strcasecmp(s, "vert")) + o->dir = VERT; + else if (!g_ascii_strcasecmp(s, "horizontal") || + !g_ascii_strcasecmp(s, "horz")) + o->dir = HORZ; g_free(s); } return o; } -static void free_func(gpointer options) +/* Always return FALSE because its not interactive */ +static gboolean run_func_on(ObActionsData *data, gpointer options) { Options *o = options; - - g_free(o); + if (data->client) { + actions_client_move(data, TRUE); + client_maximize(data->client, TRUE, o->dir); + 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_off(ObActionsData *data, gpointer options) { Options *o = options; - if (data->client) { actions_client_move(data, TRUE); - - if (o->toggle) - client_maximize(data->client, - !data->client->max_horz || !data->client->max_vert, - 0); - else - client_maximize(data->client, o->on, 0); - + client_maximize(data->client, FALSE, o->dir); actions_client_move(data, FALSE); } + return FALSE; +} +/* Always return FALSE because its not interactive */ +static gboolean run_func_toggle(ObActionsData *data, gpointer options) +{ + Options *o = options; + if (data->client) { + gboolean toggle; + actions_client_move(data, TRUE); + toggle = ((o->dir == HORZ && !data->client->max_horz) || + (o->dir == VERT && !data->client->max_vert) || + (o->dir == BOTH && + !(data->client->max_horz && data->client->max_vert))); + client_maximize(data->client, toggle, o->dir); + actions_client_move(data, FALSE); + } return FALSE; } diff --git a/openbox/actions/maximizehorizontal.c b/openbox/actions/maximizehorizontal.c deleted file mode 100644 index abb8a8e1..00000000 --- a/openbox/actions/maximizehorizontal.c +++ /dev/null @@ -1,66 +0,0 @@ -#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_maximizehorizontal_startup() -{ - actions_register("MaximizeHorizontal", - 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); - - if (o->toggle) - client_maximize(data->client, !data->client->max_horz, 1); - else - client_maximize(data->client, o->on, 1); - - actions_client_move(data, FALSE); - } - - return FALSE; -} diff --git a/openbox/actions/maximizevertical.c b/openbox/actions/maximizevertical.c deleted file mode 100644 index 516463c7..00000000 --- a/openbox/actions/maximizevertical.c +++ /dev/null @@ -1,66 +0,0 @@ -#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_maximizevertical_startup() -{ - actions_register("MaximizeVertical", - 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); - - if (o->toggle) - client_maximize(data->client, !data->client->max_vert, 2); - else - client_maximize(data->client, o->on, 2); - - actions_client_move(data, FALSE); - } - - return FALSE; -}