1 #include "openbox/actions.h"
2 #include "openbox/screen.h"
11 static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node);
12 static void free_func(gpointer options);
13 static gboolean run_func(ObActionsData *data, gpointer options);
15 void action_directionaldesktop_startup()
17 actions_register("DirectionalDesktop",
24 static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node)
29 o = g_new0(Options, 1);
31 o->dir = OB_DIRECTION_EAST;
33 if ((n = parse_find_node("wrap", node)))
34 o->wrap = parse_bool(doc, n);
35 if ((n = parse_find_node("direction", node))) {
36 gchar *s = parse_string(doc, n);
37 if (!g_ascii_strcasecmp(s, "next")) {
39 o->dir = OB_DIRECTION_EAST;
41 else if (!g_ascii_strcasecmp(s, "previous")) {
43 o->dir = OB_DIRECTION_WEST;
45 else if (!g_ascii_strcasecmp(s, "north") ||
46 !g_ascii_strcasecmp(s, "up"))
47 o->dir = OB_DIRECTION_NORTH;
48 else if (!g_ascii_strcasecmp(s, "south") ||
49 !g_ascii_strcasecmp(s, "down"))
50 o->dir = OB_DIRECTION_SOUTH;
51 else if (!g_ascii_strcasecmp(s, "west") ||
52 !g_ascii_strcasecmp(s, "left"))
53 o->dir = OB_DIRECTION_WEST;
54 else if (!g_ascii_strcasecmp(s, "east") ||
55 !g_ascii_strcasecmp(s, "right"))
56 o->dir = OB_DIRECTION_EAST;
63 static void free_func(gpointer options)
70 /* Always return FALSE because its not interactive */
71 static gboolean run_func(ObActionsData *data, gpointer options)
76 d = screen_cycle_desktop(o->dir,
80 if (d != screen_desktop)
81 screen_set_desktop(d, TRUE);