X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fopenbox;a=blobdiff_plain;f=openbox%2Factions%2Fdirectionalwindows.c;h=3d997aef2f5e6c426481cfc8ed451b615236cb86;hp=6559e44cb44bed805899eafb105ddf8d8e19e8b6;hb=50d662681160c309ea86268c0d05794b87b75593;hpb=8ada991d829671ab5e6dd4c5526b6a0238ba6a16 diff --git a/openbox/actions/directionalwindows.c b/openbox/actions/directionalwindows.c index 6559e44c..3d997aef 100644 --- a/openbox/actions/directionalwindows.c +++ b/openbox/actions/directionalwindows.c @@ -20,11 +20,9 @@ typedef struct { static gboolean cycling = FALSE; -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node); -static gpointer setup_cycle_func(ObParseInst *i, xmlDocPtr doc, - xmlNodePtr node); -static gpointer setup_target_func(ObParseInst *i, xmlDocPtr doc, - xmlNodePtr node); +static gpointer setup_func(xmlNodePtr node); +static gpointer setup_cycle_func(xmlNodePtr node); +static gpointer setup_target_func(xmlNodePtr node); static void free_func(gpointer options); static gboolean run_func(ObActionsData *data, gpointer options); static gboolean i_input_func(guint initial_state, @@ -35,15 +33,66 @@ static void i_cancel_func(gpointer options); static void end_cycle(gboolean cancel, guint state, Options *o); +/* 3.4-compatibility */ +static gpointer setup_north_cycle_func(xmlNodePtr node); +static gpointer setup_south_cycle_func(xmlNodePtr node); +static gpointer setup_east_cycle_func(xmlNodePtr node); +static gpointer setup_west_cycle_func(xmlNodePtr node); +static gpointer setup_northwest_cycle_func(xmlNodePtr node); +static gpointer setup_northeast_cycle_func(xmlNodePtr node); +static gpointer setup_southwest_cycle_func(xmlNodePtr node); +static gpointer setup_southeast_cycle_func(xmlNodePtr node); +static gpointer setup_north_target_func(xmlNodePtr node); +static gpointer setup_south_target_func(xmlNodePtr node); +static gpointer setup_east_target_func(xmlNodePtr node); +static gpointer setup_west_target_func(xmlNodePtr node); +static gpointer setup_northwest_target_func(xmlNodePtr node); +static gpointer setup_northeast_target_func(xmlNodePtr node); +static gpointer setup_southwest_target_func(xmlNodePtr node); +static gpointer setup_southeast_target_func(xmlNodePtr node); + void action_directionalwindows_startup(void) { actions_register("DirectionalCycleWindows", setup_cycle_func, free_func, run_func, i_input_func, i_cancel_func); actions_register("DirectionalTargetWindow", setup_target_func, free_func, run_func, NULL, NULL); + /* 3.4-compatibility */ + actions_register("DirectionalFocusNorth", setup_north_cycle_func, + free_func, run_func, i_input_func, i_cancel_func); + actions_register("DirectionalFocusSouth", setup_south_cycle_func, + free_func, run_func, i_input_func, i_cancel_func); + actions_register("DirectionalFocusWest", setup_west_cycle_func, + free_func, run_func, i_input_func, i_cancel_func); + actions_register("DirectionalFocusEast", setup_east_cycle_func, + free_func, run_func, i_input_func, i_cancel_func); + actions_register("DirectionalFocusNorthWest", setup_northwest_cycle_func, + free_func, run_func, i_input_func, i_cancel_func); + actions_register("DirectionalFocusNorthEast", setup_northeast_cycle_func, + free_func, run_func, i_input_func, i_cancel_func); + actions_register("DirectionalFocusSouthWest", setup_southwest_cycle_func, + free_func, run_func, i_input_func, i_cancel_func); + actions_register("DirectionalFocusSouthEast", setup_southeast_cycle_func, + free_func, run_func, i_input_func, i_cancel_func); + actions_register("DirectionalTargetNorth", setup_north_target_func, + free_func, run_func, i_input_func, i_cancel_func); + actions_register("DirectionalTargetSouth", setup_south_target_func, + free_func, run_func, i_input_func, i_cancel_func); + actions_register("DirectionalTargetWest", setup_west_target_func, + free_func, run_func, i_input_func, i_cancel_func); + actions_register("DirectionalTargetEast", setup_east_target_func, + free_func, run_func, i_input_func, i_cancel_func); + actions_register("DirectionalTargetNorthWest", setup_northwest_target_func, + free_func, run_func, i_input_func, i_cancel_func); + actions_register("DirectionalTargetNorthEast", setup_northeast_target_func, + free_func, run_func, i_input_func, i_cancel_func); + actions_register("DirectionalTargetSouthWest", setup_southwest_target_func, + free_func, run_func, i_input_func, i_cancel_func); + actions_register("DirectionalTargetSouthEast", setup_southeast_target_func, + free_func, run_func, i_input_func, i_cancel_func); } -static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) +static gpointer setup_func(xmlNodePtr node) { xmlNodePtr n; Options *o; @@ -52,18 +101,18 @@ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) o->dialog = TRUE; o->bar = TRUE; - if ((n = parse_find_node("dialog", node))) - o->dialog = parse_bool(doc, n); - if ((n = parse_find_node("bar", node))) - o->bar = parse_bool(doc, n); - if ((n = parse_find_node("raise", node))) - o->raise = parse_bool(doc, n); - if ((n = parse_find_node("panels", node))) - o->dock_windows = parse_bool(doc, n); - if ((n = parse_find_node("desktop", node))) - o->desktop_windows = parse_bool(doc, n); - if ((n = parse_find_node("direction", node))) { - gchar *s = parse_string(doc, n); + if ((n = obt_parse_find_node(node, "dialog"))) + o->dialog = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "bar"))) + o->bar = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "raise"))) + o->raise = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "panels"))) + o->dock_windows = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "desktop"))) + o->desktop_windows = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "direction"))) { + gchar *s = obt_parse_node_string(n); if (!g_ascii_strcasecmp(s, "north") || !g_ascii_strcasecmp(s, "up")) o->direction = OB_DIRECTION_NORTH; @@ -87,14 +136,14 @@ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) g_free(s); } - if ((n = parse_find_node("finalactions", node))) { + if ((n = obt_parse_find_node(node, "finalactions"))) { xmlNodePtr m; - m = parse_find_node("action", n->xmlChildrenNode); + m = obt_parse_find_node(n->children, "action"); while (m) { - ObActionsAct *action = actions_parse(i, doc, m); + ObActionsAct *action = actions_parse(m); if (action) o->actions = g_slist_append(o->actions, action); - m = parse_find_node("action", m->next); + m = obt_parse_find_node(m->next, "action"); } } else { @@ -109,18 +158,16 @@ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) return o; } -static gpointer setup_cycle_func(ObParseInst *i, xmlDocPtr doc, - xmlNodePtr node) +static gpointer setup_cycle_func(xmlNodePtr node) { - Options *o = setup_func(i, doc, node); + Options *o = setup_func(node); o->interactive = TRUE; return o; } -static gpointer setup_target_func(ObParseInst *i, xmlDocPtr doc, - xmlNodePtr node) +static gpointer setup_target_func(xmlNodePtr node) { - Options *o = setup_func(i, doc, node); + Options *o = setup_func(node); o->interactive = FALSE; return o; } @@ -220,3 +267,117 @@ static void end_cycle(gboolean cancel, guint state, Options *o) stacking_restore(); } + +/* 3.4-compatibility */ +static gpointer setup_north_cycle_func(xmlNodePtr node) +{ + Options *o = setup_cycle_func(node); + o->direction = OB_DIRECTION_NORTH; + return o; +} + +static gpointer setup_south_cycle_func(xmlNodePtr node) +{ + Options *o = setup_cycle_func(node); + o->direction = OB_DIRECTION_SOUTH; + return o; +} + +static gpointer setup_east_cycle_func(xmlNodePtr node) +{ + Options *o = setup_cycle_func(node); + o->direction = OB_DIRECTION_EAST; + return o; +} + +static gpointer setup_west_cycle_func(xmlNodePtr node) +{ + Options *o = setup_cycle_func(node); + o->direction = OB_DIRECTION_WEST; + return o; +} + +static gpointer setup_northwest_cycle_func(xmlNodePtr node) +{ + Options *o = setup_cycle_func(node); + o->direction = OB_DIRECTION_NORTHWEST; + return o; +} + +static gpointer setup_northeast_cycle_func(xmlNodePtr node) +{ + Options *o = setup_cycle_func(node); + o->direction = OB_DIRECTION_EAST; + return o; +} + +static gpointer setup_southwest_cycle_func(xmlNodePtr node) +{ + Options *o = setup_cycle_func(node); + o->direction = OB_DIRECTION_SOUTHWEST; + return o; +} + +static gpointer setup_southeast_cycle_func(xmlNodePtr node) +{ + Options *o = setup_cycle_func(node); + o->direction = OB_DIRECTION_SOUTHEAST; + return o; +} + +static gpointer setup_north_target_func(xmlNodePtr node) +{ + Options *o = setup_target_func(node); + o->direction = OB_DIRECTION_NORTH; + return o; +} + +static gpointer setup_south_target_func(xmlNodePtr node) +{ + Options *o = setup_target_func(node); + o->direction = OB_DIRECTION_SOUTH; + return o; +} + +static gpointer setup_east_target_func(xmlNodePtr node) +{ + Options *o = setup_target_func(node); + o->direction = OB_DIRECTION_EAST; + return o; +} + +static gpointer setup_west_target_func(xmlNodePtr node) +{ + Options *o = setup_target_func(node); + o->direction = OB_DIRECTION_WEST; + return o; +} + +static gpointer setup_northwest_target_func(xmlNodePtr node) +{ + Options *o = setup_target_func(node); + o->direction = OB_DIRECTION_NORTHWEST; + return o; +} + +static gpointer setup_northeast_target_func(xmlNodePtr node) +{ + Options *o = setup_target_func(node); + o->direction = OB_DIRECTION_NORTHEAST; + return o; +} + +static gpointer setup_southwest_target_func(xmlNodePtr node) +{ + Options *o = setup_target_func(node); + o->direction = OB_DIRECTION_SOUTHWEST; + return o; +} + +static gpointer setup_southeast_target_func(xmlNodePtr node) +{ + Options *o = setup_target_func(node); + o->direction = OB_DIRECTION_SOUTHEAST; + return o; +} +