]> git.sur5r.net Git - i3/i3/commitdiff
parser: implement explicit "mode floating"/"mode tiling"
authorMichael Stapelberg <michael@stapelberg.de>
Wed, 30 Jun 2010 13:54:34 +0000 (15:54 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Wed, 30 Jun 2010 13:54:34 +0000 (15:54 +0200)
src/cmdparse.y
src/floating.c

index aa440046a7beb5b2d40eba85aa7a45db1a530aa2..49e0e4d7f2d074ae4dc56404ba703a58dc6417d8 100644 (file)
@@ -448,7 +448,11 @@ mode:
             toggle_floating_mode(focused, false);
         } else {
             printf("should switch mode to %s\n", ($<number>3 == TOK_FLOATING ? "floating" : "tiling"));
-            /* TODO: actually switch mode (not toggle) */
+            if ($<number>3 == TOK_FLOATING) {
+                floating_enable(focused, false);
+            } else {
+                floating_disable(focused, false);
+            }
         }
     }
     ;
index d6009320485f64374eddcd1e205102f9b7c926c1..8f144113909e7ea4849141a1a9bb415eefc0b4c3 100644 (file)
 extern xcb_connection_t *conn;
 
 void floating_enable(Con *con, bool automatic) {
+    if (con_is_floating(con)) {
+        LOG("Container is already in floating mode, not doing anything.\n");
+        return;
+    }
+
     /* 1: detach the container from its parent */
     /* TODO: refactor this with tree_close() */
     TAILQ_REMOVE(&(con->parent->nodes_head), con, nodes);
@@ -45,6 +50,11 @@ void floating_enable(Con *con, bool automatic) {
 }
 
 void floating_disable(Con *con, bool automatic) {
+    if (!con_is_floating(con)) {
+        LOG("Container isn't floating, not doing anything.\n");
+        return;
+    }
+
     assert(con->old_parent != NULL);
 
     /* 1: detach from parent container */