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