From 4e6acfd18ddc8e81d44c01fbfd10834c16b5a832 Mon Sep 17 00:00:00 2001 From: Ivan Kanakarakis Date: Sun, 11 Dec 2011 21:09:56 +0200 Subject: fix flickering when mode is monocycle as reported by hellomynameisphil and stalphonzo on bbs.archlinux https://bbs.archlinux.org/viewtopic.php?pid=1025619#p1025619 https://bbs.archlinux.org/viewtopic.php?pid=1025968#p1025968 --- dminiwm.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'dminiwm.c') diff --git a/dminiwm.c b/dminiwm.c index a429fec..5530786 100644 --- a/dminiwm.c +++ b/dminiwm.c @@ -209,6 +209,8 @@ void removeclient(client *c) { save_desktop(current_desktop); tile(); + if(mode == MONOCYCLE && current) + XMapWindow(dis, current->win); update_current(); } @@ -220,14 +222,18 @@ void killclient() { void next_win() { if(!current || (!current->next && !current->prev)) return; + if(mode == MONOCYCLE) XUnmapWindow(dis, current->win); current = (current->next) ? current->next : head; + if(mode == MONOCYCLE) XMapWindow(dis, current->win); update_current(); } void prev_win() { if(!current || (!current->next && !current->prev)) return; + if(mode == MONOCYCLE) XUnmapWindow(dis, current->win); if(current->prev) current = current->prev; else while(current->next) current=current->next; + if(mode == MONOCYCLE) XMapWindow(dis, current->win); update_current(); } @@ -274,12 +280,13 @@ void change_desktop(const Arg arg) { save_desktop(current_desktop); for(client *c=head; c; c=c->next) XUnmapWindow(dis, c->win); - /* read new desktop properties and map new windows */ - select_desktop(arg.i); - for(client *c=head; c; c=c->next) - XMapWindow(dis, c->win); + /* read new desktop properties, tile and map new windows */ + select_desktop(arg.i); tile(); + if(mode == MONOCYCLE && current) XMapWindow(dis, current->win); + else for(client *c=head; c; c=c->next) XMapWindow(dis, c->win); + update_current(); } @@ -476,6 +483,7 @@ void update_current(void) { void switch_mode(const Arg arg) { if(mode == arg.i) return; + if(mode == MONOCYCLE) for(client *c=head; c; c=c->next) XMapWindow(dis, c->win); mode = arg.i; if(mode == TILE || mode == GRID) master_size = sw * MASTER_SIZE; else if(mode == BSTACK) master_size = sh * MASTER_SIZE; -- cgit v1.3.1