From 333dfdd1e1271537ca8d00e97308883d0e1c1508 Mon Sep 17 00:00:00 2001 From: Anselm R Garbe Date: Wed, 16 Jul 2008 18:38:53 +0100 Subject: [PATCH] got rid of compile time xidx, grabbing the mouse pointer instead, falling back to screen 0 if no pointer available --- dmenubar/config.h | 5 ----- dmenubar/dmenu.c | 23 +++++++++++++++++------ 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/dmenubar/config.h b/dmenubar/config.h index a2c3fa4..3e6c616 100644 --- a/dmenubar/config.h +++ b/dmenubar/config.h @@ -6,9 +6,4 @@ static const char *normbgcolor = "#cccccc"; static const char *normfgcolor = "#000000"; static const char *selbgcolor = "#0066ff"; static const char *selfgcolor = "#ffffff"; - static unsigned int spaceitem = 30; /* px between menu items */ - -#ifdef XINERAMA -static unsigned int xidx = 0; /* Xinerama screen index to use */ -#endif diff --git a/dmenubar/dmenu.c b/dmenubar/dmenu.c index 33b1a89..e487333 100644 --- a/dmenubar/dmenu.c +++ b/dmenubar/dmenu.c @@ -16,7 +16,8 @@ #endif /* macros */ -#define CLEANMASK(mask) (mask & ~(numlockmask | LockMask)) +#define CLEANMASK(mask) (mask & ~(numlockmask | LockMask)) +#define INRECT(X,Y,RX,RY,RW,RH) ((X) >= (RX) && (X) < (RX) + (RW) && (Y) >= (RY) && (Y) < (RY) + (RH)) /* enums */ enum { ColFG, ColBG, ColLast }; @@ -585,7 +586,7 @@ run(void) { void setup(Bool topbar) { - int i, j, x, y; + int i, j, n, x, y; XModifierKeymap *modmap; XSetWindowAttributes wa; #if XINERAMA @@ -618,10 +619,20 @@ setup(Bool topbar) { mh = dc.font.height + 2; #if XINERAMA if(XineramaIsActive(dpy)) { - info = XineramaQueryScreens(dpy, &i); - x = info[xidx].x_org; - y = topbar ? info[xidx].y_org : info[xidx].y_org + info[xidx].height - mh; - mw = info[xidx].width; + i = 0; + info = XineramaQueryScreens(dpy, &n); + if(n > 1) { + int di; + 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)) + break; + } + x = info[i].x_org; + y = topbar ? info[i].y_org : info[i].y_org + info[i].height - mh; + mw = info[i].width; XFree(info); } else