Bugfix: Correctly check for empty containers and unmap the stack_win
This commit is contained in:
parent
017a0c0d08
commit
a411ed24cb
|
@ -34,6 +34,7 @@ void *scalloc(size_t size);
|
||||||
char *sstrdup(const char *str);
|
char *sstrdup(const char *str);
|
||||||
void start_application(const char *command);
|
void start_application(const char *command);
|
||||||
void check_error(xcb_connection_t *conn, xcb_void_cookie_t cookie, char *err_message);
|
void check_error(xcb_connection_t *conn, xcb_void_cookie_t cookie, char *err_message);
|
||||||
|
void remove_client_from_container(xcb_connection_t *conn, Client *client, Container *container);
|
||||||
void set_focus(xcb_connection_t *conn, Client *client);
|
void set_focus(xcb_connection_t *conn, Client *client);
|
||||||
void leave_stack_mode(xcb_connection_t *conn, Container *container);
|
void leave_stack_mode(xcb_connection_t *conn, Container *container);
|
||||||
void switch_layout_mode(xcb_connection_t *conn, Container *container, int mode);
|
void switch_layout_mode(xcb_connection_t *conn, Container *container, int mode);
|
||||||
|
|
|
@ -217,7 +217,7 @@ static void move_current_window(xcb_connection_t *conn, direction_t direction) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Remove it from the old container and put it into the new one */
|
/* Remove it from the old container and put it into the new one */
|
||||||
CIRCLEQ_REMOVE(&(container->clients), current_client, clients);
|
remove_client_from_container(conn, current_client, container);
|
||||||
CIRCLEQ_INSERT_TAIL(&(new->clients), current_client, clients);
|
CIRCLEQ_INSERT_TAIL(&(new->clients), current_client, clients);
|
||||||
|
|
||||||
/* Update data structures */
|
/* Update data structures */
|
||||||
|
|
|
@ -433,16 +433,8 @@ int handle_unmap_notify_event(void *data, xcb_connection_t *conn, xcb_unmap_noti
|
||||||
if (client->fullscreen)
|
if (client->fullscreen)
|
||||||
con->workspace->fullscreen_client = NULL;
|
con->workspace->fullscreen_client = NULL;
|
||||||
|
|
||||||
/* If the container will be empty now and is in stacking mode, we need to
|
|
||||||
correctly resize the stack_win */
|
|
||||||
if (CIRCLEQ_EMPTY(&(con->clients)) && con->mode == MODE_STACK) {
|
|
||||||
struct Stack_Window *stack_win = &(con->stack_win);
|
|
||||||
stack_win->rect.height = 0;
|
|
||||||
xcb_unmap_window(conn, stack_win->window);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Remove the client from the list of clients */
|
/* Remove the client from the list of clients */
|
||||||
CIRCLEQ_REMOVE(&(con->clients), client, clients);
|
remove_client_from_container(conn, client, con);
|
||||||
|
|
||||||
/* Remove from the focus stack */
|
/* Remove from the focus stack */
|
||||||
LOG("Removing from focus stack\n");
|
LOG("Removing from focus stack\n");
|
||||||
|
|
17
src/util.c
17
src/util.c
|
@ -135,6 +135,23 @@ void check_error(xcb_connection_t *conn, xcb_void_cookie_t cookie, char *err_mes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Removes the given client from the container, either because it will be inserted into another
|
||||||
|
* one or because it was unmapped
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void remove_client_from_container(xcb_connection_t *conn, Client *client, Container *container) {
|
||||||
|
CIRCLEQ_REMOVE(&(container->clients), client, clients);
|
||||||
|
|
||||||
|
/* 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) {
|
||||||
|
struct Stack_Window *stack_win = &(container->stack_win);
|
||||||
|
stack_win->rect.height = 0;
|
||||||
|
xcb_unmap_window(conn, stack_win->window);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Sets the given client as focused by updating the data structures correctly,
|
* Sets the given client as focused by updating the data structures correctly,
|
||||||
* updating the X input focus and finally re-decorating both windows (to signalize
|
* updating the X input focus and finally re-decorating both windows (to signalize
|
||||||
|
|
Loading…
Reference in New Issue