URI: 
       fixed tagmon, re-using detach/detachstack and attach/attachstack - dwm - dynamic window manager
  HTML git clone https://git.parazyd.org/dwm
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 54dc0d542cbc8eada2250fe80d161a272f30ddac
   DIR parent 913333f51840d942bdde891eb2fb3c7f66b83db1
  HTML Author: Anselm R Garbe <anselm@garbe.us>
       Date:   Tue, 23 Jun 2009 17:34:20 +0100
       
       fixed tagmon, re-using detach/detachstack and attach/attachstack
       Diffstat:
         M config.mk                           |       4 ++--
         M dwm.c                               |      23 ++++++++++++++++-------
       
       2 files changed, 18 insertions(+), 9 deletions(-)
       ---
   DIR diff --git a/config.mk b/config.mk
       @@ -11,8 +11,8 @@ X11INC = /usr/X11R6/include
        X11LIB = /usr/X11R6/lib
        
        # Xinerama, un-comment if you want it
       -#XINERAMALIBS = -L${X11LIB} -lXinerama
       -#XINERAMAFLAGS = -DXINERAMA
       +XINERAMALIBS = -L${X11LIB} -lXinerama
       +XINERAMAFLAGS = -DXINERAMA
        
        # includes and libs
        INCS = -I. -I/usr/include -I${X11INC}
   DIR diff --git a/dwm.c b/dwm.c
       @@ -375,14 +375,14 @@ arrange(void) {
        
        void
        attach(Client *c) {
       -        c->next = selmon->clients;
       -        selmon->clients = c;
       +        c->next = c->mon->clients;
       +        c->mon->clients = c;
        }
        
        void
        attachstack(Client *c) {
       -        c->snext = selmon->stack;
       -        selmon->stack = c;
       +        c->snext = c->mon->stack;
       +        c->mon->stack = c;
        }
        
        void
       @@ -1475,11 +1475,20 @@ tag(const Arg *arg) {
        void
        tagmon(const Arg *arg) {
                unsigned int i;
       +        Client *c;
                Monitor *m;
        
       +        if(!(c = selmon->sel))
       +                return;
                for(i = 0, m = mons; m; m = m->next, i++)
                        if(i == arg->ui) {
       -                        selmon->sel->m = m;
       +                        detach(c);
       +                        detachstack(c);
       +                        c->mon = m;
       +                        attach(c);
       +                        attachstack(c);
       +                        selmon->sel = selmon->stack;
       +                        m->sel = c;
                                arrange();
                                break;
                        }
       @@ -1695,7 +1704,7 @@ updategeom(void) {
                        for(tm = mons; tm; tm = tm->next)
                                if(tm->screen_number == m->screen_number) {
                                        m->clients = tm->clients;
       -                                m->stack = tm->stack;
       +                                m->sel = m->stack = tm->stack;
                                        tm->clients = NULL;
                                        tm->stack = NULL;
                                        for(c = m->clients; c; c = c->next)
       @@ -1715,7 +1724,7 @@ updategeom(void) {
                        while(tm->stack) {
                                c = tm->stack->snext;
                                tm->stack->snext = newmons->stack;
       -                        newmons->stack = tm->stack;
       +                        newmons->sel = newmons->stack = tm->stack;
                                tm->stack = c;
                        }
                }