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 |
|