diff --git a/cmd/wm/area.c b/cmd/wm/area.c index 1379322c..b7a778c5 100644 --- a/cmd/wm/area.c +++ b/cmd/wm/area.c @@ -307,3 +307,12 @@ is_of_area(Area *a, Client *c) return True; return False; } + +Client * +sel_client_of_area(Area *a) +{ + if(a) { + return (a->frame.size) ? a->frame.data[a->sel]->client : nil; + } + return nil; +} diff --git a/cmd/wm/client.c b/cmd/wm/client.c index 6264e831..3dfac473 100644 --- a/cmd/wm/client.c +++ b/cmd/wm/client.c @@ -120,6 +120,7 @@ focus_client(Client *c, Bool restack) { Client *old = sel_client(); Frame *f = c->frame.data[c->sel]; + Client *old_in_area = sel_client_of_area(f->area); View *v = f->area->view; int i = idx_of_area(f->area); static char buf[256]; @@ -139,6 +140,8 @@ focus_client(Client *c, Bool restack) XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); if(old) draw_client(old); + if(old_in_area != c) + draw_client(old_in_area); draw_client(c); XSync(dpy, False); snprintf(buf, sizeof(buf), "ClientFocus %d\n", idx_of_client_id(c->id)); diff --git a/cmd/wm/view.c b/cmd/wm/view.c index 49d07272..5a5605c6 100644 --- a/cmd/wm/view.c +++ b/cmd/wm/view.c @@ -232,7 +232,7 @@ sel_client_of_view(View *v) { if(v) { Area *a = v->area.size ? v->area.data[v->sel] : nil; - return (a && a->frame.size) ? a->frame.data[a->sel]->client : nil; + return sel_client_of_area(a); } return nil; } diff --git a/cmd/wm/wm.h b/cmd/wm/wm.h index 28397509..983a7344 100644 --- a/cmd/wm/wm.h +++ b/cmd/wm/wm.h @@ -198,6 +198,7 @@ void send_to_area(Area *to, Area *from, Client *c); void attach_to_area(Area *a, Client *c); void detach_from_area(Area *a, Client *c); Bool is_of_area(Area *a, Client *c); +Client *sel_client_of_area(Area *a); /* bar.c */ Bar *create_bar(char *name, Bool intern);