Raise clients only relatively to the one which was focused before.

This should fix ticket #31.
This commit is contained in:
Michael Stapelberg 2009-05-03 00:23:12 +02:00
parent 537c7c782e
commit 95f4085bcd
2 changed files with 7 additions and 5 deletions

View File

@ -354,11 +354,6 @@ void render_container(xcb_connection_t *conn, Container *container) {
/* Reconfigure the currently focused client, if necessary. It is the only visible one */ /* Reconfigure the currently focused client, if necessary. It is the only visible one */
client = container->currently_focused; client = container->currently_focused;
if (container->workspace->fullscreen_client == NULL) {
uint32_t values[] = { XCB_STACK_MODE_ABOVE };
xcb_configure_window(conn, client->frame, XCB_CONFIG_WINDOW_STACK_MODE, values);
}
/* Render the decorations of all clients */ /* Render the decorations of all clients */
CIRCLEQ_FOREACH(client, &(container->clients), clients) { CIRCLEQ_FOREACH(client, &(container->clients), clients) {
/* If the client is in fullscreen mode, it does not get reconfigured */ /* If the client is in fullscreen mode, it does not get reconfigured */

View File

@ -294,6 +294,13 @@ void set_focus(xcb_connection_t *conn, Client *client, bool set_anyways) {
one than old_client */ one than old_client */
Client *last_focused = get_last_focused_client(conn, client->container, NULL); Client *last_focused = get_last_focused_client(conn, client->container, NULL);
/* In stacking containers, raise the client in respect to the one which was focused before */
if (client->container->mode == MODE_STACK && last_focused != NULL) {
LOG("raising\n");
uint32_t values[] = { last_focused->frame, XCB_STACK_MODE_ABOVE };
xcb_configure_window(conn, client->frame, XCB_CONFIG_WINDOW_SIBLING | XCB_CONFIG_WINDOW_STACK_MODE, values);
}
/* If it is the same one as old_client, we save us the unnecessary redecorate */ /* If it is the same one as old_client, we save us the unnecessary redecorate */
if ((last_focused != NULL) && (last_focused != old_client)) if ((last_focused != NULL) && (last_focused != old_client))
redecorate_window(conn, last_focused); redecorate_window(conn, last_focused);