Fixed obscure miscalculation when a client is closed. - tabbed - tab interface … | |
git clone git://git.suckless.org/tabbed | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 14beaabe6ccbdf12546f31edf931e30cbe9c0c82 | |
parent 361ddc85d506c058562ccba7c68370d49733c928 | |
Author: Alexander Sedov <[email protected]> | |
Date: Mon, 29 Jul 2013 11:11:33 +0400 | |
Fixed obscure miscalculation when a client is closed. | |
This crops up whenever you just switched from tab # N+1 to tab # N | |
and close current tab. unmanage() first decreases lastsel | |
(so it becomes N) then erroneously tests it against sel and focuses first tab | |
instead. One can see that focus() would never set lastsel == sel, | |
so I took liberty to fix this annoying behaviour which happens to frequently | |
with newposition = 0 and npisrelative = True settings. | |
Signed-off-by: Christoph Lohmann <[email protected]> | |
Diffstat: | |
M tabbed.c | 16 +++++++++++++--- | |
1 file changed, 13 insertions(+), 3 deletions(-) | |
--- | |
diff --git a/tabbed.c b/tabbed.c | |
@@ -171,12 +171,18 @@ void | |
buttonpress(const XEvent *e) { | |
const XButtonPressedEvent *ev = &e->xbutton; | |
int i; | |
+ int fc; | |
Arg arg; | |
- if((getfirsttab() != 0 && ev->x < TEXTW(before)) || ev->x < 0) | |
+ fc = getfirsttab(); | |
+ | |
+ if((fc > 0 && ev->x < TEXTW(before)) || ev->x < 0) | |
return; | |
- for(i = 0; i < nclients; i++) { | |
+ if(ev->y < 0 || ev-> y > bh) | |
+ return; | |
+ | |
+ for(i = (fc > 0) ? fc : 0; i < nclients; i++) { | |
if(clients[i]->tabx > ev->x) { | |
switch(ev->button) { | |
case Button1: | |
@@ -1053,7 +1059,11 @@ unmanage(int c) { | |
} | |
if(c == sel) { | |
- if(lastsel > 0 && lastsel != sel) { | |
+ /* Note that focus() will never set lastsel == sel, | |
+ * so if here lastsel == sel, it was decreased by abov… | |
+ * and was actually (sel + 1) before. | |
+ */ | |
+ if(lastsel > 0) { | |
focus(lastsel); | |
} else { | |
focus(0); |