i3 - improved tiling WM


Fix scratchpad_show : actually test that the window is in the scratchpad actually test that it was a scratchpad_show without criteria

Patch status: superseded

Patch by Philippe Virouleau

To apply this patch, use:
curl http://cr.i3wm.org/patch/114/raw.patch | git am

b/src/scratchpad.c

15
@@ -93,7 +93,7 @@ void scratchpad_show(Con *con) {
16
     Con *walk_con;
17
     Con *focused_ws = con_get_workspace(focused);
18
     TAILQ_FOREACH(walk_con, &(focused_ws->floating_head), floating_windows) {
19
-        if ((floating = con_inside_floating(walk_con)) &&
20
+        if (!con && (floating = con_inside_floating(walk_con)) &&
21
             floating->scratchpad_state != SCRATCHPAD_NONE &&
22
             floating != con_inside_floating(focused)) {
23
                 DLOG("Found an unfocused scratchpad window on this workspace\n");
24
@@ -112,7 +112,7 @@ void scratchpad_show(Con *con) {
25
     focused_ws = con_get_workspace(focused);
26
     TAILQ_FOREACH(walk_con, &all_cons, all_cons) {
27
         Con *walk_ws = con_get_workspace(walk_con);
28
-        if (walk_ws &&
29
+        if (!con && walk_ws &&
30
             !con_is_internal(walk_ws) && focused_ws != walk_ws &&
31
             (floating = con_inside_floating(walk_con)) &&
32
             floating->scratchpad_state != SCRATCHPAD_NONE) {
33
@@ -134,6 +134,13 @@ void scratchpad_show(Con *con) {
34
         return;
35
     }
36
 
37
+    /* If this was 'scratchpad show' with criteria, we check if the window
38
+     * is actually in the scratchpad */
39
+    if (con && con->parent->scratchpad_state == SCRATCHPAD_NONE) {
40
+        DLOG("Window is not in the scratchpad, doing nothing.\n");
41
+        return;
42
+    }
43
+
44
     /* If this was 'scratchpad show' with criteria, we check if it matches a
45
      * currently visible scratchpad window and hide it. */
46
     Con *active = con_get_workspace(focused);