]> git.sur5r.net Git - i3/i3/commitdiff
Bugfix: Correctly unmap stack windows and don’t re-map them too early
authorMichael Stapelberg <michael@stapelberg.de>
Wed, 5 Aug 2009 22:37:39 +0000 (00:37 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Wed, 5 Aug 2009 22:37:39 +0000 (00:37 +0200)
src/client.c
src/layout.c
src/util.c

index 81430b2f8b94d9cc5da438f5a9bbad793b51e431..5ed5cf978a9caf201062fa9d2bbff3cb6ad5c771 100644 (file)
@@ -39,9 +39,11 @@ void client_remove_from_container(xcb_connection_t *conn, Client *client, Contai
         /* If the container will be empty now and is in stacking mode, we need to
            unmap the stack_win */
         if (CIRCLEQ_EMPTY(&(container->clients)) && container->mode == MODE_STACK) {
+                LOG("Unmapping stack window\n");
                 struct Stack_Window *stack_win = &(container->stack_win);
                 stack_win->rect.height = 0;
                 xcb_unmap_window(conn, stack_win->window);
+                xcb_flush(conn);
         }
 }
 
index 9cc41a0c2572e3c64954e8700da4fbad25ec430e..d90460a4e2578d943d52b2856acf87f80d8b7e25 100644 (file)
@@ -334,7 +334,7 @@ void render_container(xcb_connection_t *conn, Container *container) {
 
                 /* Check if we need to remap our stack title window, it gets unmapped when the container
                    is empty in src/handlers.c:unmap_notify() */
-                if (stack_win->rect.height == 0)
+                if (stack_win->rect.height == 0 && num_clients > 0)
                         xcb_map_window(conn, stack_win->window);
 
                 /* Check if we need to reconfigure our stack title window */
index d09dafe2a48566c2426c5c3a47a207a3bee9d3ef..8b4008646c2e3182f6f43a9fcea971ff194df23d 100644 (file)
@@ -424,7 +424,9 @@ void switch_layout_mode(xcb_connection_t *conn, Container *container, int mode)
                                 XCB_EVENT_MASK_EXPOSURE;        /* …our window needs to be redrawn */
 
                 struct Stack_Window *stack_win = &(container->stack_win);
-                stack_win->window = create_window(conn, rect, XCB_WINDOW_CLASS_INPUT_OUTPUT, XCB_CURSOR_LEFT_PTR, true, mask, values);
+                stack_win->window = create_window(conn, rect, XCB_WINDOW_CLASS_INPUT_OUTPUT, XCB_CURSOR_LEFT_PTR, false, mask, values);
+
+                stack_win->rect.height = 0;
 
                 /* Initialize the entry for our cached pixmap. It will be
                  * created as soon as it’s needed (see cached_pixmap_prepare). */