got rid of compile time xidx, grabbing the mouse pointer instead, falling back to screen 0 if no pointer available

main
Anselm R Garbe 2008-07-16 18:38:53 +01:00
parent b89a9501c7
commit 4d8a646958
2 changed files with 17 additions and 11 deletions

View File

@ -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

23
dmenu.c
View File

@ -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