URI: 
       Fixed obscure miscalculation when a client is closed. - tabbed - tab interface for application supporting Xembed
  HTML git clone git://git.suckless.org/tabbed
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 14beaabe6ccbdf12546f31edf931e30cbe9c0c82
   DIR parent 361ddc85d506c058562ccba7c68370d49733c928
  HTML Author: Alexander Sedov <alex0player@gmail.com>
       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 <20h@r-36.net>
       
       Diffstat:
         M tabbed.c                            |      16 +++++++++++++---
       
       1 file changed, 13 insertions(+), 3 deletions(-)
       ---
   DIR 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 above if() clause
       +                         * and was actually (sel + 1) before.
       +                         */
       +                        if(lastsel > 0) {
                                        focus(lastsel);
                                } else {
                                        focus(0);