]> git.sur5r.net Git - i3/i3/blobdiff - src/scratchpad.c
Merge branch 'master' of https://github.com/ton/i3 into ton-master
[i3/i3] / src / scratchpad.c
index d6c1a09e1d630e92eec364c125c9e4e2389a485e..3b7c2a72b009131e616cd57cf0665af3499c46bc 100644 (file)
@@ -21,7 +21,8 @@
 void scratchpad_move(Con *con) {
     if (con->type == CT_WORKSPACE) {
         LOG("'move scratchpad' used on a workspace \"%s\". Calling it "
-            "recursively on all windows on this workspace.\n", con->name);
+            "recursively on all windows on this workspace.\n",
+            con->name);
         Con *current;
         current = TAILQ_FIRST(&(con->focus_head));
         while (current) {
@@ -66,7 +67,13 @@ void scratchpad_move(Con *con) {
      * adjusted in size according to what the user specifies. */
     if (con->scratchpad_state == SCRATCHPAD_NONE) {
         DLOG("This window was never used as a scratchpad before.\n");
-        con->scratchpad_state = SCRATCHPAD_FRESH;
+        if (con == maybe_floating_con) {
+            DLOG("It was in floating mode before, set scratchpad state to changed.\n");
+            con->scratchpad_state = SCRATCHPAD_CHANGED;
+        } else {
+            DLOG("It was in tiling mode before, set scratchpad state to fresh.\n");
+            con->scratchpad_state = SCRATCHPAD_FRESH;
+        }
     }
 }
 
@@ -113,14 +120,14 @@ void scratchpad_show(Con *con) {
         if (!con && (floating = con_inside_floating(walk_con)) &&
             floating->scratchpad_state != SCRATCHPAD_NONE &&
             floating != con_inside_floating(focused)) {
-                DLOG("Found an unfocused scratchpad window on this workspace\n");
-                DLOG("Focusing it: %p\n", walk_con);
-                /* use con_descend_tiling_focused to get the last focused
+            DLOG("Found an unfocused scratchpad window on this workspace\n");
+            DLOG("Focusing it: %p\n", walk_con);
+            /* use con_descend_tiling_focused to get the last focused
                  * window inside this scratch container in order to
                  * keep the focus the same within this container */
-                con_focus(con_descend_tiling_focused(walk_con));
-                return;
-            }
+            con_focus(con_descend_tiling_focused(walk_con));
+            return;
+        }
     }
 
     /* If this was 'scratchpad show' without criteria, we check if there is a
@@ -175,6 +182,10 @@ void scratchpad_show(Con *con) {
             LOG("Use 'move scratchpad' to move a window to the scratchpad.\n");
             return;
         }
+    } else {
+        /* We used a criterion, so we need to do what follows (moving,
+         * resizing) on the floating parent. */
+        con = con_inside_floating(con);
     }
 
     /* 1: Move the window from __i3_scratch to the current workspace. */