t* dwm + patches
       
   URI git clone git://git.codevoid.de/dwm-sdk
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit c86ed46a1bbba0635a76d05ebeb839c7fec7f7fc
   DIR parent 9086f98068693d22321be2bdc6779e7be7e751c7
   URI Author: Anselm R Garbe <garbeam@gmail.com>
       Date:   Wed, 16 Jul 2008 18:33:51 +0100
       
       got rid of compile time xidx configuration, querying mouse pointer instead
       Diffstat:
         M config.def.h                        |       4 ----
         M dwm.c                               |      45 ++++++++++++++++++++-----------
       
       2 files changed, 29 insertions(+), 20 deletions(-)
       ---
   DIR diff --git a/config.def.h b/config.def.h
       t@@ -13,10 +13,6 @@ static uint snap                    = 32;       /* snap pixel */
        static Bool showbar                 = True;     /* False means no bar */
        static Bool topbar                  = True;     /* False means bottom bar */
        
       -#ifdef XINERAMA
       -static uint xidx                    = 0;        /* Xinerama screen index to use */
       -#endif
       -
        /* tagging */
        static const char tags[][MAXTAGLEN] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
        
   DIR diff --git a/dwm.c b/dwm.c
       t@@ -44,16 +44,17 @@
        #endif
        
        /* macros */
       -#define MAX(a, b)       ((a) > (b) ? (a) : (b))
       -#define MIN(a, b)       ((a) < (b) ? (a) : (b))
       -#define BUTTONMASK      (ButtonPressMask|ButtonReleaseMask)
       -#define CLEANMASK(mask) (mask & ~(numlockmask|LockMask))
       -#define LENGTH(x)       (sizeof x / sizeof x[0])
       -#define MAXTAGLEN       16
       -#define MOUSEMASK       (BUTTONMASK|PointerMotionMask)
       -#define TAGMASK         ((int)((1LL << LENGTH(tags)) - 1))
       -#define TEXTW(x)        (textnw(x, strlen(x)) + dc.font.height)
       -#define ISVISIBLE(x)    (x->tags & tagset[seltags])
       +#define BUTTONMASK              (ButtonPressMask|ButtonReleaseMask)
       +#define CLEANMASK(mask)         (mask & ~(numlockmask|LockMask))
       +#define INRECT(X,Y,RX,RY,RW,RH) ((X) >= (RX) && (X) < (RX) + (RW) && (Y) >= (RY) && (Y) < (RY) + (RH))
       +#define ISVISIBLE(x)            (x->tags & tagset[seltags])
       +#define LENGTH(x)               (sizeof x / sizeof x[0])
       +#define MAX(a, b)               ((a) > (b) ? (a) : (b))
       +#define MIN(a, b)               ((a) < (b) ? (a) : (b))
       +#define MAXTAGLEN               16
       +#define MOUSEMASK               (BUTTONMASK|PointerMotionMask)
       +#define TAGMASK                 ((int)((1LL << LENGTH(tags)) - 1))
       +#define TEXTW(x)                (textnw(x, strlen(x)) + dc.font.height)
        
        /* enums */
        enum { CurNormal, CurResize, CurMove, CurLast };        /* cursor */
       t@@ -974,7 +975,7 @@ monocle(void) {
        
        void
        movemouse(const Arg *arg) {
       -        int x1, y1, ocx, ocy, di, nx, ny;
       +        int x, y, ocx, ocy, di, nx, ny;
                unsigned int dui;
                Client *c;
                Window dummy;
       t@@ -988,7 +989,7 @@ movemouse(const Arg *arg) {
                if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync,
                None, cursor[CurMove], CurrentTime) != GrabSuccess)
                        return;
       -        XQueryPointer(dpy, root, &dummy, &dummy, &x1, &y1, &di, &di, &dui);
       +        XQueryPointer(dpy, root, &dummy, &dummy, &x, &y, &di, &di, &dui);
                for(;;) {
                        XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev);
                        switch (ev.type) {
       t@@ -1002,8 +1003,8 @@ movemouse(const Arg *arg) {
                                break;
                        case MotionNotify:
                                XSync(dpy, False);
       -                        nx = ocx + (ev.xmotion.x - x1);
       -                        ny = ocy + (ev.xmotion.y - y1);
       +                        nx = ocx + (ev.xmotion.x - x);
       +                        ny = ocy + (ev.xmotion.y - y);
                                if(snap && nx >= wx && nx <= wx + ww
                                        && ny >= wy && ny <= wy + wh) {
                                        if(abs(wx - nx) < snap)
       t@@ -1557,12 +1558,24 @@ updatebar(void) {
        void
        updategeom(void) {
        #ifdef XINERAMA
       -        int i;
       +        int n;
       +        unsigned int xidx = 0;
                XineramaScreenInfo *info = NULL;
        
                /* window area geometry */
                if(XineramaIsActive(dpy)) {
       -                info = XineramaQueryScreens(dpy, &i);
       +                info = XineramaQueryScreens(dpy, &n);
       +                if(n > 1) {
       +                        int di, i, x, y;
       +                        unsigned int dui;
       +                        Window dummy;
       +                        if(XQueryPointer(dpy, root, &dummy, &dummy, &x, &y, &di, &di, &dui))
       +                                for(i = 0; i < n; i++)
       +                                        if(INRECT(x, y, info[i].x_org, info[i].y_org, info[i].width, info[i].height)) {
       +                                                xidx = i;
       +                                                break;
       +                                        }
       +                }
                        wx = info[xidx].x_org;
                        wy = showbar && topbar ?  info[xidx].y_org + bh : info[xidx].y_org;
                        ww = info[xidx].width;