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 <20h@r-36.net>
This commit is contained in:
parent
361ddc85d5
commit
14beaabe6c
16
tabbed.c
16
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 above if() clause
|
||||
* and was actually (sel + 1) before.
|
||||
*/
|
||||
if(lastsel > 0) {
|
||||
focus(lastsel);
|
||||
} else {
|
||||
focus(0);
|
||||
|
|
Loading…
Reference in a new issue