]> git.sur5r.net Git - i3/i3/commitdiff
Bugfix: fix fullscreen with floating windows
authorMichael Stapelberg <michael@stapelberg.de>
Mon, 21 Nov 2011 23:04:49 +0000 (23:04 +0000)
committerMichael Stapelberg <michael@stapelberg.de>
Mon, 21 Nov 2011 23:04:49 +0000 (23:04 +0000)
Fixes: #564
src/render.c

index d85d16a74878f151716c3e148a5aed806f2eef9a..2905356c9d29a6f7c846c73123a02f532166ca5c 100644 (file)
@@ -236,6 +236,27 @@ void render_con(Con *con, bool render_fullscreen) {
             Con *content = output_get_content(output);
             Con *workspace = TAILQ_FIRST(&(content->focus_head));
 
+            /* Check for (floating!) fullscreen nodes */
+            /* XXX: This code duplication is unfortunate. Keep in mind to fix
+             * this when we clean up the whole render.c */
+            Con *fullscreen = NULL;
+            fullscreen = con_get_fullscreen_con(workspace, CF_OUTPUT);
+            if (fullscreen) {
+                /* Either the fullscreen window is inside the floating
+                 * container, then we need to render and raise it now… */
+                if (con_inside_floating(fullscreen)) {
+                    fullscreen->rect = output->rect;
+                    x_raise_con(fullscreen);
+                    render_con(fullscreen, true);
+                    continue;
+                } else {
+                    /* …or it’s a tiling window, in which case the floating
+                     * windows should not overlap it, so we skip rendering this
+                     * output. */
+                    continue;
+                }
+            }
+
             Con *child;
             TAILQ_FOREACH(child, &(workspace->floating_head), floating_windows) {
                 DLOG("floating child at (%d,%d) with %d x %d\n", child->rect.x, child->rect.y, child->rect.width, child->rect.height);