1 #include "openbox/actions.h"
2 #include "openbox/screen.h"
3 #include "openbox/client.h"
13 static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node);
14 static gpointer setup_send_func(ObParseInst *i, xmlDocPtr doc,xmlNodePtr node);
15 static gpointer setup_last_func(ObParseInst *i, xmlDocPtr doc,xmlNodePtr node);
16 static void free_func(gpointer options);
17 static gboolean run_func(ObActionsData *data, gpointer options);
19 void action_desktop_startup()
21 actions_register("Desktop",
26 actions_register("DesktopLast",
31 actions_register("SendToDesktop",
38 static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node)
43 o = g_new0(Options, 1);
46 if ((n = parse_find_node("desktop", node))) {
47 gchar *s = parse_string(doc, n);
48 if (!g_ascii_strcasecmp(s, "last"))
51 o->desktop = parse_int(doc, n) - 1;
54 if ((n = parse_find_node("send", node)))
55 o->send = parse_bool(doc, n);
56 if ((n = parse_find_node("follow", node)))
57 o->follow = parse_bool(doc, n);
62 static gpointer setup_send_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node)
64 Options *o = setup_func(i, doc, node);
69 static gpointer setup_last_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node)
71 Options *o = setup_func(i, doc, node);
76 static void free_func(gpointer options)
83 /* Always return FALSE because its not interactive */
84 static gboolean run_func(ObActionsData *data, gpointer options)
90 d = screen_last_desktop;
94 if (d < screen_num_desktops && d != screen_desktop) {
95 gboolean go = !o->send;
97 if (data->client && client_normal(data->client)) {
98 client_set_desktop(data->client, d, o->follow, FALSE);
103 screen_set_desktop(d, TRUE);