rewrite focus() a bit

This commit is contained in:
Julien Danjou 2008-01-24 23:58:56 +01:00
parent 3855ced402
commit 652c1459ba
1 changed files with 14 additions and 14 deletions

View File

@ -163,16 +163,6 @@ focus(Client *c, int screen)
{ {
int phys_screen = get_phys_screen(screen); int phys_screen = get_phys_screen(screen);
/* unfocus current selected client */
if(globalconf.focus->client)
{
widget_invalidate_cache(globalconf.focus->client->screen, WIDGET_CACHE_CLIENTS);
window_grabbuttons(get_phys_screen(globalconf.focus->client->screen),
globalconf.focus->client->win, False, True);
XSetWindowBorder(globalconf.display, globalconf.focus->client->win,
globalconf.screens[screen].colors_normal[ColBorder].pixel);
}
/* if c is NULL or invisible, take next client in the focus history */ /* if c is NULL or invisible, take next client in the focus history */
if(!c || (c && !client_isvisible(c, screen))) if(!c || (c && !client_isvisible(c, screen)))
@ -183,10 +173,17 @@ focus(Client *c, int screen)
for(c = globalconf.clients; c && (c->skip || !client_isvisible(c, screen)); c = c->next); for(c = globalconf.clients; c && (c->skip || !client_isvisible(c, screen)); c = c->next);
} }
if(c) if(c == globalconf.focus->client)
return;
/* unfocus current selected client */
if(globalconf.focus->client)
{ {
XSetWindowBorder(globalconf.display, c->win, globalconf.screens[screen].colors_selected[ColBorder].pixel); widget_invalidate_cache(globalconf.focus->client->screen, WIDGET_CACHE_CLIENTS);
window_grabbuttons(phys_screen, c->win, True, True); window_grabbuttons(get_phys_screen(globalconf.focus->client->screen),
globalconf.focus->client->win, False, True);
XSetWindowBorder(globalconf.display, globalconf.focus->client->win,
globalconf.screens[screen].colors_normal[ColBorder].pixel);
} }
/* save sel in focus history */ /* save sel in focus history */
@ -194,9 +191,11 @@ focus(Client *c, int screen)
if(globalconf.focus->client) if(globalconf.focus->client)
{ {
widget_invalidate_cache(screen, WIDGET_CACHE_CLIENTS); XSetWindowBorder(globalconf.display, c->win,
globalconf.screens[screen].colors_selected[ColBorder].pixel);
XSetInputFocus(globalconf.display, XSetInputFocus(globalconf.display,
globalconf.focus->client->win, RevertToPointerRoot, CurrentTime); globalconf.focus->client->win, RevertToPointerRoot, CurrentTime);
window_grabbuttons(phys_screen, c->win, True, True);
restack(screen); restack(screen);
} }
else else
@ -204,6 +203,7 @@ focus(Client *c, int screen)
RootWindow(globalconf.display, phys_screen), RootWindow(globalconf.display, phys_screen),
RevertToPointerRoot, CurrentTime); RevertToPointerRoot, CurrentTime);
widget_invalidate_cache(screen, WIDGET_CACHE_CLIENTS);
ewmh_update_net_active_window(phys_screen); ewmh_update_net_active_window(phys_screen);
} }