Bugfix: Correctly redecorate clients when changing focus (Thanks msi)

When moving your cursor from one tiling window to another tiling
window via a floating client, the old tiling window was not re-
decorated correctly
This commit is contained in:
Michael Stapelberg 2009-07-21 15:49:08 +02:00
parent 0d30710184
commit af4d2e6d4e
1 changed files with 16 additions and 0 deletions

View File

@ -367,6 +367,22 @@ void set_focus(xcb_connection_t *conn, Client *client, bool set_anyways) {
if ((old_client != NULL) && (old_client != client) && !old_client->dock) if ((old_client != NULL) && (old_client != client) && !old_client->dock)
redecorate_window(conn, old_client); redecorate_window(conn, old_client);
/* If the last client was a floating client, we need to go to the next
* tiling client in stack and re-decorate it. */
if (client_is_floating(old_client)) {
LOG("Coming from floating client, searching next tiling...\n");
Client *current;
SLIST_FOREACH(current, &(client->workspace->focus_stack), focus_clients) {
if (client_is_floating(current))
continue;
LOG("Found window: %p / child %p\n", current->frame, current->child);
redecorate_window(conn, current);
break;
}
}
SLIST_REMOVE(&(client->workspace->focus_stack), client, Client, focus_clients); SLIST_REMOVE(&(client->workspace->focus_stack), client, Client, focus_clients);
SLIST_INSERT_HEAD(&(client->workspace->focus_stack), client, focus_clients); SLIST_INSERT_HEAD(&(client->workspace->focus_stack), client, focus_clients);