i3 - improved tiling WM


Bugfix: Render popups during global fullscreen

Patch status: superseded

Patch by Mats

Long description:

fixes #1393

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

b/src/render.c

14
@@ -116,6 +116,31 @@ static void render_l_output(Con *con) {
15
 }
16
 
17
 /*
18
+ * Recursively renders all floating containers that are (indirectly) transient
19
+ * for and on the same workspace as the given container.
20
+ *
21
+ */
22
+static void render_transient_cons(Con *con) {
23
+    Con *workspace = con_get_workspace(con);
24
+    Con *child;
25
+    TAILQ_FOREACH(child, &(workspace->floating_head), floating_windows) {
26
+        Con *floating_child = con_descend_focused(child);
27
+
28
+        if (floating_child == NULL ||
29
+            floating_child == con ||
30
+            floating_child->window == NULL ||
31
+            floating_child->window->transient_for != con->window->id)
32
+            continue;
33
+
34
+        DLOG("window 0x%08x transient for 0x%08x\n", floating_child->window->id, con->window->id);
35
+        x_raise_con(child);
36
+        render_con(child, false);
37
+
38
+        render_transient_cons(floating_child);
39
+    }
40
+}
41
+
42
+/*
43
  * "Renders" the given container (and its children), meaning that all rects are
44
  * updated correctly. Note that this function does not call any xcb_*
45
  * functions, so the changes are completely done in memory only (and
46
@@ -210,6 +235,10 @@ void render_con(Con *con, bool render_fullscreen) {
47
         fullscreen->rect = rect;
48
         x_raise_con(fullscreen);
49
         render_con(fullscreen, true);
50
+        if (con->type == CT_ROOT && fullscreen->window != NULL) {
51
+            DLOG("rendering transient containers for global fullscreen 0x%08x\n", fullscreen->window->id);
52
+            render_transient_cons(fullscreen);
53
+        }
54
         return;
55
     }
56