char *sstrdup(const char *str);
void start_application(const char *command);
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 leave_stack_mode(xcb_connection_t *conn, Container *container);
void switch_layout_mode(xcb_connection_t *conn, Container *container, int mode);
}
/* 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);
/* Update data structures */
if (client->fullscreen)
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 */
- CIRCLEQ_REMOVE(&(con->clients), client, clients);
+ remove_client_from_container(conn, client, con);
/* Remove from the focus stack */
LOG("Removing from focus stack\n");
}
}
+/*
+ * 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,
* updating the X input focus and finally re-decorating both windows (to signalize