URI: 
       some cleanup handling for index based mon search - dwm - dynamic window manager
  HTML git clone https://git.parazyd.org/dwm
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 029655bb2271a18d3a191f22502cbd9b713a9189
   DIR parent 27db9d44489fea54275de9d25a9eff7118ebb3ea
  HTML Author: Anselm R Garbe <anselm@garbe.us>
       Date:   Sat, 27 Jun 2009 18:50:50 +0100
       
       some cleanup handling for index based mon search
       Diffstat:
         M dwm.c                               |      39 +++++++++++++++----------------
       
       1 file changed, 19 insertions(+), 20 deletions(-)
       ---
   DIR diff --git a/dwm.c b/dwm.c
       @@ -177,6 +177,7 @@ static void focusstack(const Arg *arg);
        static Client *getclient(Window w);
        static unsigned long getcolor(const char *colstr);
        static Monitor *getmon(Window w);
       +static Monitor *getmonn(unsigned int n);
        static Monitor *getmonxy(int x, int y);
        static Bool getrootpointer(int *x, int *y);
        static long getstate(Window w);
       @@ -800,18 +801,13 @@ focusin(XEvent *e) { /* there are some broken focus acquiring clients */
        #ifdef XINERAMA
        void
        focusmon(const Arg *arg) {
       -        unsigned int i;
       -        Monitor *m; 
       -
       -        for(i = 0, m = mons; m; m = m->next, i++)
       -                if(i == arg->ui) {
       -                        if(m == selmon)
       -                                return;
       -                        unfocus(selmon->sel);
       -                        selmon = m;
       -                        focus(NULL);
       -                        break;
       -                }
       +        Monitor *m;
       +
       +        if(!(m = getmonn(arg->ui)) || m == selmon)
       +                return;
       +        unfocus(selmon->sel);
       +        selmon = m;
       +        focus(NULL);
        }
        #endif /* XINERAMA */
        
       @@ -880,6 +876,15 @@ getmon(Window w) {
        }
        
        Monitor *
       +getmonn(unsigned int n) {
       +        unsigned int i;
       +        Monitor *m;
       +
       +        for(m = mons, i = 0; m && i != n; m = m->next, i++);
       +        return m;
       +}
       +
       +Monitor *
        getmonxy(int x, int y) {
                Monitor *m;
        
       @@ -1542,17 +1547,11 @@ tag(const Arg *arg) {
        #ifdef XINERAMA
        void
        tagmon(const Arg *arg) {
       -        unsigned int i;
       -        Client *c;
                Monitor *m;
        
       -        if(!(c = selmon->sel))
       +        if(!selmon->sel || !(m = getmonn(arg->ui)))
                        return;
       -        for(i = 0, m = mons; m; m = m->next, i++)
       -                if(i == arg->ui) {
       -                        sendmon(c, m);
       -                        break;
       -                }
       +        sendmon(selmon->sel, m);
        }
        #endif /* XINERAMA */