got rid of compile time xidx, grabbing the mouse pointer instead, falling back to screen 0 if no pointer available 4d8a6469
Anselm R Garbe · 2008-07-16 18:38 2 file(s) · +17 −11
config.h +0 −5
6 6
static const char *normfgcolor = "#000000";
7 7
static const char *selbgcolor  = "#0066ff";
8 8
static const char *selfgcolor  = "#ffffff";
9 -
10 9
static unsigned int spaceitem  = 30; /* px between menu items */
11 -
12 -
#ifdef XINERAMA
13 -
static unsigned int xidx       = 0;  /* Xinerama screen index to use */
14 -
#endif
dmenu.c +17 −6
16 16
#endif
17 17
18 18
/* macros */
19 -
#define CLEANMASK(mask) (mask & ~(numlockmask | LockMask))
19 +
#define CLEANMASK(mask)         (mask & ~(numlockmask | LockMask))
20 +
#define INRECT(X,Y,RX,RY,RW,RH) ((X) >= (RX) && (X) < (RX) + (RW) && (Y) >= (RY) && (Y) < (RY) + (RH))
20 21
21 22
/* enums */
22 23
enum { ColFG, ColBG, ColLast };
585 586
586 587
void
587 588
setup(Bool topbar) {
588 -
	int i, j, x, y;
589 +
	int i, j, n, x, y;
589 590
	XModifierKeymap *modmap;
590 591
	XSetWindowAttributes wa;
591 592
#if XINERAMA
618 619
	mh = dc.font.height + 2;
619 620
#if XINERAMA
620 621
	if(XineramaIsActive(dpy)) {
621 -
		info = XineramaQueryScreens(dpy, &i);
622 -
		x = info[xidx].x_org;
623 -
		y = topbar ? info[xidx].y_org : info[xidx].y_org + info[xidx].height - mh;
624 -
		mw = info[xidx].width;
622 +
		i = 0;
623 +
		info = XineramaQueryScreens(dpy, &n);
624 +
		if(n > 1) {
625 +
			int di;
626 +
			unsigned int dui;
627 +
			Window dummy;
628 +
			if(XQueryPointer(dpy, root, &dummy, &dummy, &x, &y, &di, &di, &dui))
629 +
				for(i = 0; i < n; i++)
630 +
					if(INRECT(x, y, info[i].x_org, info[i].y_org, info[i].width, info[i].height))
631 +
						break;
632 +
		}
633 +
		x = info[i].x_org;
634 +
		y = topbar ? info[i].y_org : info[i].y_org + info[i].height - mh;
635 +
		mw = info[i].width;
625 636
		XFree(info);
626 637
	}
627 638
	else