all repos — openbox @ cf640af0eade492a6a0a9765a1d2d35d81ea1235

openbox fork - make it a bit more like ryudo

add the "if" action
Dana Jansens danakj@orodu.net
commit

cf640af0eade492a6a0a9765a1d2d35d81ea1235

parent

52b63adfe1120b2e6bc12df4b9f867e9e7c6ab31

5 files changed, 136 insertions(+), 96 deletions(-)

jump to
M Makefile.amMakefile.am

@@ -173,6 +173,7 @@ openbox/actions/focus.c \

openbox/actions/fullscreen.c \ openbox/actions/growtoedge.c \ openbox/actions/iconify.c \ + openbox/actions/if.c \ openbox/actions/kill.c \ openbox/actions/layer.c \ openbox/actions/lower.c \
M openbox/action.copenbox/action.c

@@ -17,78 +17,6 @@

See the COPYING file for a copy of the GNU General Public License. */ -#include "debug.h" -#include "client.h" -#include "focus.h" -#include "focus_cycle.h" -#include "moveresize.h" -#include "menu.h" -#include "prop.h" -#include "stacking.h" -#include "screen.h" -#include "action.h" -#include "openbox.h" -#include "grab.h" -#include "keyboard.h" -#include "event.h" -#include "dock.h" -#include "config.h" -#include "mainloop.h" -#include "startupnotify.h" -#include "gettext.h" - -#include <glib.h> - - - - -void setup_action_growtoedge_north(ObAction **a, ObUserAction uact) -{ - (*a)->data.diraction.any.client_action = OB_CLIENT_ACTION_ALWAYS; - (*a)->data.diraction.direction = OB_DIRECTION_NORTH; -} - -void setup_action_growtoedge_south(ObAction **a, ObUserAction uact) -{ - (*a)->data.diraction.any.client_action = OB_CLIENT_ACTION_ALWAYS; - (*a)->data.diraction.direction = OB_DIRECTION_SOUTH; -} - -void setup_action_growtoedge_east(ObAction **a, ObUserAction uact) -{ - (*a)->data.diraction.any.client_action = OB_CLIENT_ACTION_ALWAYS; - (*a)->data.diraction.direction = OB_DIRECTION_EAST; -} - -void setup_action_growtoedge_west(ObAction **a, ObUserAction uact) -{ - (*a)->data.diraction.any.client_action = OB_CLIENT_ACTION_ALWAYS; - (*a)->data.diraction.direction = OB_DIRECTION_WEST; -} - -void setup_action_top_layer(ObAction **a, ObUserAction uact) -{ - (*a)->data.layer.any.client_action = OB_CLIENT_ACTION_ALWAYS; - (*a)->data.layer.layer = 1; -} - -void setup_action_normal_layer(ObAction **a, ObUserAction uact) -{ - (*a)->data.layer.any.client_action = OB_CLIENT_ACTION_ALWAYS; - (*a)->data.layer.layer = 0; -} - -void setup_action_bottom_layer(ObAction **a, ObUserAction uact) -{ - (*a)->data.layer.any.client_action = OB_CLIENT_ACTION_ALWAYS; - (*a)->data.layer.layer = -1; -} - -void setup_client_action(ObAction **a, ObUserAction uact) -{ - (*a)->data.any.client_action = OB_CLIENT_ACTION_ALWAYS; -} - ActionString actionstrings[] = { {

@@ -102,26 +30,6 @@ action_unshaderaise,

setup_client_action }, { - "growtoedgenorth", - action_growtoedge, - setup_action_growtoedge_north - }, - { - "growtoedgesouth", - action_growtoedge, - setup_action_growtoedge_south - }, - { - "growtoedgewest", - action_growtoedge, - setup_action_growtoedge_west - }, - { - "growtoedgeeast", - action_growtoedge, - setup_action_growtoedge_east - }, - { NULL, NULL, NULL

@@ -143,7 +51,3 @@ action_lower(data);

else action_shade(data); } - -void action_growtoedge(union ActionData *data) -{ -}
M openbox/actions/all.copenbox/actions/all.c

@@ -40,4 +40,5 @@ action_dockautohide_startup();

action_layer_startup(); action_movetofromedge_startup(); action_growtoedge_startup(); + action_if_startup(); }
M openbox/actions/all.hopenbox/actions/all.h

@@ -41,5 +41,6 @@ void action_dockautohide_startup();

void action_layer_startup(); void action_movetofromedge_startup(); void action_growtoedge_startup(); +void action_if_startup(); #endif
A openbox/actions/if.c

@@ -0,0 +1,133 @@

+#include "openbox/actions.h" +#include "openbox/misc.h" +#include "openbox/client.h" +#include "openbox/frame.h" +#include "openbox/screen.h" +#include <glib.h> + +typedef struct { + gboolean shaded_on; + gboolean shaded_off; + gboolean maxvert_on; + gboolean maxvert_off; + gboolean maxhorz_on; + gboolean maxhorz_off; + gboolean maxfull_on; + gboolean maxfull_off; + gboolean iconic_on; + gboolean iconic_off; + GSList *thenacts; + GSList *elseacts; +} 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_if_startup() +{ + actions_register("If", + 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); + + if ((n = parse_find_node("shaded", node))) { + if (parse_bool(doc, n)) + o->shaded_on = TRUE; + else + o->shaded_off = TRUE; + } + if ((n = parse_find_node("maximized", node))) { + if (parse_bool(doc, n)) + o->maxfull_on = TRUE; + else + o->maxfull_off = TRUE; + } + if ((n = parse_find_node("maximizedhorizontal", node))) { + if (parse_bool(doc, n)) + o->maxhorz_on = TRUE; + else + o->maxhorz_off = TRUE; + } + if ((n = parse_find_node("maximizedvertical", node))) { + if (parse_bool(doc, n)) + o->maxvert_on = TRUE; + else + o->maxvert_off = TRUE; + } + if ((n = parse_find_node("iconified", node))) { + if (parse_bool(doc, n)) + o->iconic_on = TRUE; + else + o->iconic_off = TRUE; + } + + if ((n = parse_find_node("then", node))) { + xmlNodePtr m; + + m = parse_find_node("action", n->xmlChildrenNode); + while (m) { + ObActionsAct *action = actions_parse(i, doc, m); + if (action) o->thenacts = g_slist_prepend(o->thenacts, action); + m = parse_find_node("action", m->next); + } + } + if ((n = parse_find_node("else", node))) { + xmlNodePtr m; + + m = parse_find_node("action", n->xmlChildrenNode); + while (m) { + ObActionsAct *action = actions_parse(i, doc, m); + if (action) o->elseacts = g_slist_prepend(o->elseacts, action); + m = parse_find_node("action", m->next); + } + } + + 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; + GSList *acts; + ObClient *c = data->client; + + if ((!o->shaded_on || (c && c->shaded)) && + (!o->shaded_off || (c && !c->shaded)) && + (!o->iconic_on || (c && c->iconic)) && + (!o->iconic_off || (c && !c->iconic)) && + (!o->maxhorz_on || (c && c->max_horz)) && + (!o->maxhorz_off || (c && !c->max_horz)) && + (!o->maxvert_on || (c && c->max_vert)) && + (!o->maxvert_off || (c && !c->max_vert)) && + (!o->maxfull_on || (c && c->max_vert && c->max_horz)) && + (!o->maxfull_off || (c && !(c->max_vert && c->max_horz)))) + { + acts = o->thenacts; + } + else + acts = o->elseacts; + + actions_run_acts(acts, data->uact, data->state, + data->x, data->y, data->button, + data->context, data->client); + + return FALSE; +}