about summary refs log tree commit diff stats
path: root/client.c
diff options
context:
space:
mode:
authorarg@10ksloc.org <unknown>2006-07-20 16:54:20 +0200
committerarg@10ksloc.org <unknown>2006-07-20 16:54:20 +0200
commit72707c2fae68f5eba6ea97cbf356bfb968c8a15d (patch)
tree86285130145cd1672f32c9ebe207b9d41bd10032 /client.c
parent06dc514bc7327f1a2a35cb533bcf18715305da44 (diff)
downloaddwm-72707c2fae68f5eba6ea97cbf356bfb968c8a15d.tar.gz
using double-linked list in order to get correct prev focus handling
Diffstat (limited to 'client.c')
-rw-r--r--client.c46
1 files changed, 31 insertions, 15 deletions
diff --git a/client.c b/client.c
index 1bdebd2..34c69aa 100644
--- a/client.c
+++ b/client.c
@@ -77,7 +77,6 @@ focusnext(Arg *arg)
 		c = getnext(clients, tsel);
 	if(c) {
 		higher(c);
-		c->revert = sel;
 		focus(c);
 	}
 }
@@ -93,7 +92,11 @@ focusprev(Arg *arg)
 	if(sel->ismax)
 		togglemax(NULL);
 
-	if((c = sel->revert && sel->revert->tags[tsel] ? sel->revert : NULL)) {
+	if(!(c = getprev(sel->prev))) {
+		for(c = clients; c && c->next; c = c->next);
+		c = getprev(c);
+	}
+	if(c) {
 		higher(c);
 		focus(c);
 	}
@@ -127,6 +130,8 @@ gravitate(Client *c, Bool invert)
 	int dx = 0, dy = 0;
 
 	switch(c->grav) {
+	default:
+		break;
 	case StaticGravity:
 	case NorthWestGravity:
 	case NorthGravity:
@@ -143,11 +148,11 @@ gravitate(Client *c, Bool invert)
 	case SouthWestGravity:
 		dy = -(c->h);
 		break;
-	default:
-		break;
 	}
 
 	switch (c->grav) {
+	default:
+		break;
 	case StaticGravity:
 	case NorthWestGravity:
 	case WestGravity:
@@ -164,8 +169,6 @@ gravitate(Client *c, Bool invert)
 	case SouthEastGravity:
 		dx = -(c->w + c->border);
 		break;
-	default:
-		break;
 	}
 
 	if(invert) {
@@ -204,7 +207,6 @@ lower(Client *c)
 void
 manage(Window w, XWindowAttributes *wa)
 {
-	int diff;
 	Client *c;
 	Window trans;
 	XSetWindowAttributes twa;
@@ -224,7 +226,7 @@ manage(Window w, XWindowAttributes *wa)
 	c->proto = getproto(c->win);
 	setsize(c);
 	XSelectInput(dpy, c->win,
-			StructureNotifyMask | PropertyChangeMask | EnterWindowMask);
+		StructureNotifyMask | PropertyChangeMask | EnterWindowMask);
 	XGetTransientForHint(dpy, c->win, &trans);
 	twa.override_redirect = 1;
 	twa.background_pixmap = ParentRelative;
@@ -237,6 +239,8 @@ manage(Window w, XWindowAttributes *wa)
 
 	settags(c);
 
+	if(clients)
+		clients->prev = c;
 	c->next = clients;
 	clients = c;
 
@@ -264,6 +268,7 @@ manage(Window w, XWindowAttributes *wa)
 	else {
 		XMapRaised(dpy, c->win);
 		XMapRaised(dpy, c->title);
+
 	}
 }
 
@@ -273,9 +278,15 @@ pop(Client *c)
 	Client **l;
 
 	for(l = &clients; *l && *l != c; l = &(*l)->next);
+	if(c->prev)
+		c->prev->next = c->next;
+	if(c->next)
+		c->next->prev = c->prev;
 	*l = c->next;
 
-	c->next = clients; /* pop */
+	if(clients)
+		clients->prev = c;
+	c->next = clients;
 	clients = c;
 	arrange(NULL);
 }
@@ -439,13 +450,18 @@ unmanage(Client *c)
 	XDestroyWindow(dpy, c->title);
 
 	for(l = &clients; *l && *l != c; l = &(*l)->next);
+	if(c->prev)
+		c->prev->next = c->next;
+	if(c->next)
+		c->next->prev = c->prev;
 	*l = c->next;
-	for(l = &clients; *l; l = &(*l)->next)
-		if((*l)->revert == c)
-			(*l)->revert = NULL;
-	if(sel == c)
-		sel = sel->revert ? sel->revert : clients;
-
+	if(sel == c) {
+		sel = getnext(c->next, tsel);
+		if(!sel)
+			sel = getprev(c->prev);
+		if(!sel)
+			sel = clients;
+	}
 	free(c);
 
 	XSync(dpy, False);