X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Factions%2Fdesktop.c;h=50caa22ffa0b231caba07ce84bc7f8bc4e7af29e;hb=a170ad7c85b5f23fafe64d28a3f183a7ce42ce53;hp=07416151cb7190b588b2272a0a4ad4ecc2060e69;hpb=264edb053dcf5cc5b2043bb1b34ac6f116fc4c8c;p=chaz%2Fopenbox diff --git a/openbox/actions/desktop.c b/openbox/actions/desktop.c index 07416151..50caa22f 100644 --- a/openbox/actions/desktop.c +++ b/openbox/actions/desktop.c @@ -26,11 +26,26 @@ typedef struct { gboolean follow; } Options; -static gpointer setup_go_func(ObParseInst *i, xmlDocPtr doc, - xmlNodePtr node); -static gpointer setup_send_func(ObParseInst *i, xmlDocPtr doc, - xmlNodePtr node); +static gpointer setup_go_func(xmlNodePtr node); +static gpointer setup_send_func(xmlNodePtr node); static gboolean run_func(ObActionsData *data, gpointer options); +/* 3.4-compatibility */ +static gpointer setup_go_last_func(xmlNodePtr node); +static gpointer setup_send_last_func(xmlNodePtr node); +static gpointer setup_go_abs_func(xmlNodePtr node); +static gpointer setup_send_abs_func(xmlNodePtr node); +static gpointer setup_go_next_func(xmlNodePtr node); +static gpointer setup_send_next_func(xmlNodePtr node); +static gpointer setup_go_prev_func(xmlNodePtr node); +static gpointer setup_send_prev_func(xmlNodePtr node); +static gpointer setup_go_left_func(xmlNodePtr node); +static gpointer setup_send_left_func(xmlNodePtr node); +static gpointer setup_go_right_func(xmlNodePtr node); +static gpointer setup_send_right_func(xmlNodePtr node); +static gpointer setup_go_up_func(xmlNodePtr node); +static gpointer setup_send_up_func(xmlNodePtr node); +static gpointer setup_go_down_func(xmlNodePtr node); +static gpointer setup_send_down_func(xmlNodePtr node); void action_desktop_startup(void) { @@ -38,23 +53,55 @@ void action_desktop_startup(void) NULL, NULL); actions_register("SendToDesktop", setup_send_func, g_free, run_func, NULL, NULL); + /* 3.4-compatibility */ + actions_register("DesktopLast", setup_go_last_func, g_free, run_func, + NULL, NULL); + actions_register("SendToDesktopLast", setup_send_last_func, g_free, run_func, + NULL, NULL); + actions_register("Desktop", setup_go_abs_func, g_free, run_func, + NULL, NULL); + actions_register("SendToDesktop", setup_send_abs_func, g_free, run_func, + NULL, NULL); + actions_register("DesktopNext", setup_go_next_func, g_free, run_func, + NULL, NULL); + actions_register("SendToDesktopNext", setup_send_next_func, g_free, run_func, + NULL, NULL); + actions_register("DesktopPrevious", setup_go_prev_func, g_free, run_func, + NULL, NULL); + actions_register("SendToDesktopPrevious", setup_send_prev_func, g_free, run_func, + NULL, NULL); + actions_register("DesktopLeft", setup_go_left_func, g_free, run_func, + NULL, NULL); + actions_register("SendToDesktopLeft", setup_send_left_func, g_free, run_func, + NULL, NULL); + actions_register("DesktopRight", setup_go_right_func, g_free, run_func, + NULL, NULL); + actions_register("SendToDesktopRight", setup_send_right_func, g_free, run_func, + NULL, NULL); + actions_register("DesktopUp", setup_go_up_func, g_free, run_func, + NULL, NULL); + actions_register("SendToDesktopUp", setup_send_up_func, g_free, run_func, + NULL, NULL); + actions_register("DesktopDown", setup_go_down_func, g_free, run_func, + NULL, NULL); + actions_register("SendToDesktopDown", setup_send_down_func, g_free, run_func, + NULL, NULL); } -static gpointer setup_go_func(ObParseInst *i, xmlDocPtr doc, - xmlNodePtr node) +static gpointer setup_go_func(xmlNodePtr node) { xmlNodePtr n; Options *o; o = g_new0(Options, 1); - /* don't go anywhere if theres no options given */ + /* don't go anywhere if there are no options given */ o->type = ABSOLUTE; o->u.abs.desktop = screen_desktop; /* wrap by default - it's handy! */ o->u.rel.wrap = TRUE; - if ((n = parse_find_node("to", node))) { - gchar *s = parse_string(doc, n); + if ((n = obt_parse_find_node(node, "to"))) { + gchar *s = obt_parse_node_string(n); if (!g_ascii_strcasecmp(s, "last")) o->type = LAST; else if (!g_ascii_strcasecmp(s, "next")) { @@ -94,24 +141,23 @@ static gpointer setup_go_func(ObParseInst *i, xmlDocPtr doc, g_free(s); } - if ((n = parse_find_node("wrap", node))) - o->u.rel.wrap = parse_bool(doc, n); + if ((n = obt_parse_find_node(node, "wrap"))) + o->u.rel.wrap = obt_parse_node_bool(n); return o; } -static gpointer setup_send_func(ObParseInst *i, xmlDocPtr doc, - xmlNodePtr node) +static gpointer setup_send_func(xmlNodePtr node) { xmlNodePtr n; Options *o; - o = setup_go_func(i, doc, node); + o = setup_go_func(node); o->send = TRUE; o->follow = TRUE; - if ((n = parse_find_node("follow", node))) - o->follow = parse_bool(doc, n); + if ((n = obt_parse_find_node(node, "follow"))) + o->follow = obt_parse_node_bool(n); return o; } @@ -154,3 +200,150 @@ static gboolean run_func(ObActionsData *data, gpointer options) } return FALSE; } + +/* 3.4-compatilibity */ +static gpointer setup_follow(xmlNodePtr node) +{ + xmlNodePtr n; + Options *o = g_new0(Options, 1); + o->send = TRUE; + o->follow = TRUE; + if ((n = obt_parse_find_node(node, "follow"))) + o->follow = obt_parse_node_bool(n); + return o; +} + +static gpointer setup_go_last_func(xmlNodePtr node) +{ + Options *o = g_new0(Options, 1); + o->type = LAST; + return o; +} + +static gpointer setup_send_last_func(xmlNodePtr node) +{ + Options *o = setup_follow(node); + o->type = LAST; + return o; +} + +static gpointer setup_go_abs_func(xmlNodePtr node) +{ + xmlNodePtr n; + Options *o = g_new0(Options, 1); + o->type = ABSOLUTE; + if ((n = obt_parse_find_node(node, "desktop"))) + o->u.abs.desktop = obt_parse_node_int(n) - 1; + else + o->u.abs.desktop = screen_desktop; + return o; +} + +static gpointer setup_send_abs_func(xmlNodePtr node) +{ + xmlNodePtr n; + Options *o = setup_follow(node); + o->type = ABSOLUTE; + if ((n = obt_parse_find_node(node, "desktop"))) + o->u.abs.desktop = obt_parse_node_int(n) - 1; + else + o->u.abs.desktop = screen_desktop; + return o; +} + +static void setup_rel(Options *o, xmlNodePtr node, gboolean lin, ObDirection dir) +{ + xmlNodePtr n; + + o->type = RELATIVE; + o->u.rel.linear = lin; + o->u.rel.dir = dir; + o->u.rel.wrap = TRUE; + + if ((n = obt_parse_find_node(node, "wrap"))) + o->u.rel.wrap = obt_parse_node_bool(n); +} + +static gpointer setup_go_next_func(xmlNodePtr node) +{ + Options *o = g_new0(Options, 1); + setup_rel(o, node, TRUE, OB_DIRECTION_EAST); + return o; +} + +static gpointer setup_send_next_func(xmlNodePtr node) +{ + Options *o = setup_follow(node); + setup_rel(o, node, TRUE, OB_DIRECTION_EAST); + return o; +} + +static gpointer setup_go_prev_func(xmlNodePtr node) +{ + Options *o = g_new0(Options, 1); + setup_rel(o, node, TRUE, OB_DIRECTION_WEST); + return o; +} + +static gpointer setup_send_prev_func(xmlNodePtr node) +{ + Options *o = setup_follow(node); + setup_rel(o, node, TRUE, OB_DIRECTION_WEST); + return o; +} + +static gpointer setup_go_left_func(xmlNodePtr node) +{ + Options *o = g_new0(Options, 1); + setup_rel(o, node, FALSE, OB_DIRECTION_WEST); + return o; +} + +static gpointer setup_send_left_func(xmlNodePtr node) +{ + Options *o = setup_follow(node); + setup_rel(o, node, FALSE, OB_DIRECTION_WEST); + return o; +} + +static gpointer setup_go_right_func(xmlNodePtr node) +{ + Options *o = g_new0(Options, 1); + setup_rel(o, node, FALSE, OB_DIRECTION_EAST); + return o; +} + +static gpointer setup_send_right_func(xmlNodePtr node) +{ + Options *o = setup_follow(node); + setup_rel(o, node, FALSE, OB_DIRECTION_EAST); + return o; +} + +static gpointer setup_go_up_func(xmlNodePtr node) +{ + Options *o = g_new0(Options, 1); + setup_rel(o, node, FALSE, OB_DIRECTION_NORTH); + return o; +} + +static gpointer setup_send_up_func(xmlNodePtr node) +{ + Options *o = setup_follow(node); + setup_rel(o, node, FALSE, OB_DIRECTION_NORTH); + return o; +} + +static gpointer setup_go_down_func(xmlNodePtr node) +{ + Options *o = g_new0(Options, 1); + setup_rel(o, node, FALSE, OB_DIRECTION_SOUTH); + return o; +} + +static gpointer setup_send_down_func(xmlNodePtr node) +{ + Options *o = setup_follow(node); + setup_rel(o, node, FALSE, OB_DIRECTION_SOUTH); + return o; +}