commit ffa2dbeb645a3a3d6883d569107b1efd49472035
parent 5e1c53ad3cecdfcb773e606a65ae853a524d8136
Author: Christoph Lohmann <20h@r-36.net>
Date:   Tue, 27 Nov 2012 20:25:56 +0100
Correcting the lastsel handling in tabbed. It should be more predictable now.
Diffstat:
2 files changed, 23 insertions(+), 19 deletions(-)
diff --git a/tabbed.1 b/tabbed.1
@@ -65,7 +65,7 @@ move selected tab one to the left
 move selected tab one to the right
 .TP
 .B Ctrl\-Tab
-toggle between tabs
+toggle between the selected and last selected tab
 .TP
 .B Ctrl\-q
 close tab
diff --git a/tabbed.c b/tabbed.c
@@ -437,8 +437,8 @@ focus(int c) {
 
 	if(sel != c)
 		lastsel = sel;
-
 	sel = c;
+
 	drawbar();
 }
 
@@ -682,9 +682,6 @@ manage(Window w) {
 		XSync(dpy, False);
 		focus((nextfocus)? 0 : ((sel < 0)? 0 : sel));
 		nextfocus = foreground;
-
-		if(lastsel < 0)
-			lastsel = 0;
 	}
 }
 
@@ -919,45 +916,52 @@ textnw(const char *text, unsigned int len) {
 
 void
 unmanage(int c) {
-	int pc;
-
-	if(c < 0 || c >= nclients)
+	if(c < 0 || c >= nclients) {
+		drawbar();
 		return;
+	}
 
 	if(!nclients) {
 		return;
 	} else if(c == 0) {
 		/* First client. */
-		pc = 0;
 		nclients--;
 		free(clients[0]);
 		memmove(&clients[0], &clients[1], sizeof(Client *) * nclients);
 	} else if(c == nclients - 1) {
 		/* Last client. */
 		nclients--;
-		pc = nclients - 1;
 		free(clients[c]);
 		clients = erealloc(clients, sizeof(Client *) * nclients);
 	} else {
 		/* Somewhere inbetween. */
-		pc = c + 1;
 		free(clients[c]);
 		memmove(&clients[c], &clients[c+1],
 				sizeof(Client *) * (nclients - (c + 1)));
 		nclients--;
 	}
 
-	if(c == lastsel)
-		lastsel = 0;
-	if(c == sel) {
-		sel = pc;
-		focus(lastsel);
+	if(c == lastsel) {
+		lastsel = -1;
+	} else if(lastsel > c) {
+		lastsel--;
 	}
 
-	if(nclients == 0) {
-		if(fillagain)
-			spawn(NULL);
+	if(sel > c && c > 0) {
+		sel--;
+		lastsel = -1;
 	}
+	if(c == nclients && nclients > 0)
+		sel = nclients - 1;
+
+	if(lastsel > -1) {
+		focus(lastsel);
+	} else {
+		focus(sel);
+	}
+
+	if(nclients == 0 && fillagain)
+		spawn(NULL);
 
 	drawbar();
 	XSync(dpy, False);