]> Dogcows Code - chaz/openbox/blobdiff - openbox/actions/directionaldesktop.c
let moveto action resize
[chaz/openbox] / openbox / actions / directionaldesktop.c
index c052e6e0053579d01c5d4f5bfc99aabc0a6dc7df..d9aacdd8925b42e0d2d1c3c5bb156bdc254147eb 100644 (file)
@@ -1,11 +1,14 @@
 #include "openbox/actions.h"
 #include "openbox/screen.h"
+#include "openbox/client.h"
 #include <glib.h>
 
 typedef struct {
     gboolean linear;
     gboolean wrap;
     ObDirection dir;
+    gboolean send;
+    gboolean follow;
 } Options;
 
 static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node);
@@ -29,6 +32,7 @@ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node)
     o = g_new0(Options, 1);
     o->wrap = TRUE;
     o->dir = OB_DIRECTION_EAST;
+    o->follow = TRUE;
 
     if ((n = parse_find_node("wrap", node)))
         o->wrap = parse_bool(doc, n);
@@ -56,6 +60,10 @@ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node)
             o->dir = OB_DIRECTION_EAST;
         g_free(s);
     }
+    if ((n = parse_find_node("send", node)))
+        o->send = parse_bool(doc, n);
+    if ((n = parse_find_node("follow", node)))
+        o->follow = parse_bool(doc, n);
 
     return o;
 }
@@ -77,8 +85,17 @@ static gboolean run_func(ObActionsData *data, gpointer options)
                              o->wrap,
                              o->linear,
                              FALSE, TRUE, FALSE);
-    if (d != screen_desktop)
-        screen_set_desktop(d, TRUE);
+    if (d < screen_num_desktops && d != screen_desktop) {
+        gboolean go = !o->send;
+        if (o->send) {
+            if (data->client && client_normal(data->client)) {
+                client_set_desktop(data->client, d, o->follow, FALSE);
+                go = TRUE;
+            }
+        }
+        if (go)
+            screen_set_desktop(d, TRUE);
+    }
 
     return FALSE;
 }
This page took 0.0209549999999999 seconds and 4 git commands to generate.