- g_print("UNFocusing: %lx\n", self->window);
- focus_set_client(NULL);
+ client_set_focused(self, FALSE);
+}
+
+void client_set_focused(Client *self, gboolean focused)
+{
+ if (focused) {
+ if (focus_client != self) {
+ focus_set_client(self);
+
+ /* focus state can affect the stacking layer */
+ client_calc_layer(self);
+
+ engine_frame_adjust_focus(self->frame);
+ }
+ } else {
+ if (focus_client == self)
+ focus_set_client(NULL);
+
+ /* focus state can affect the stacking layer */
+ client_calc_layer(self);
+
+ if (self->frame != NULL) /* unfocus can happen while being unmanaged */
+ engine_frame_adjust_focus(self->frame);
+ }