i3Font *font = load_font(conn, config.font);
int decoration_height = font->height + 2 + 2;
struct Colortriple *color;
+ Client *last_focused;
/* Clients without a container (docks) won’t get decorated */
if (client->dock)
return;
LOG("redecorating child %08x\n", client->child);
- if (client_is_floating(client) || client->container->currently_focused == client) {
- /* Distinguish if the window is currently focused… */
- if (client_is_floating(client) || CUR_CELL->currently_focused == client)
+ last_focused = SLIST_FIRST(&(client->workspace->focus_stack));
+ if (client_is_floating(client)) {
+ if (last_focused == client)
color = &(config.client.focused);
- /* …or if it is the focused window in a not focused container */
- else color = &(config.client.focused_inactive);
- } else color = &(config.client.unfocused);
+ else color = &(config.client.unfocused);
+ } else {
+ if (client->container->currently_focused == client) {
+ /* Distinguish if the window is currently focused… */
+ if (last_focused == client)
+ color = &(config.client.focused);
+ /* …or if it is the focused window in a not focused container */
+ else color = &(config.client.focused_inactive);
+ } else color = &(config.client.unfocused);
+ }
/* Our plan is the following:
- Draw a rect around the whole client in color->background
redecorate_window(conn, last_focused);
}
- /* If we’re in stacking mode, this renders the container to update changes in the title
- bars and to raise the focused client */
- if ((old_client != NULL) && (old_client != client) && !old_client->dock)
- 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 (old_client != NULL && client_is_floating(old_client)) {
SLIST_REMOVE(&(client->workspace->focus_stack), client, Client, focus_clients);
SLIST_INSERT_HEAD(&(client->workspace->focus_stack), client, focus_clients);
+ /* If we’re in stacking mode, this renders the container to update changes in the title
+ bars and to raise the focused client */
+ if ((old_client != NULL) && (old_client != client) && !old_client->dock)
+ redecorate_window(conn, old_client);
+
/* redecorate_window flushes, so we don’t need to */
redecorate_window(conn, client);
}