redo the maximize actions into maximize/unmaximize/togglemaximize with a <direction> argument
This commit is contained in:
parent
27aec195ac
commit
3e94f9e642
6 changed files with 51 additions and 166 deletions
|
@ -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 \
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
Loading…
Reference in a new issue