/* See LICENSE file for copyright and license details. */
#define _BSD_SOURCE
#include <ctype.h>
-#include <locale.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#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 };
void
setup(Bool topbar) {
int i, j, x, y;
- XModifierKeymap *modmap;
- XSetWindowAttributes wa;
#if XINERAMA
+ int n;
XineramaScreenInfo *info = NULL;
#endif
+ XModifierKeymap *modmap;
+ XSetWindowAttributes wa;
/* init modifier map */
modmap = XGetModifierMapping(dpy);
/* menu window geometry */
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;
+ if(XineramaIsActive(dpy) && (info = XineramaQueryScreens(dpy, &n))) {
+ i = 0;
+ 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
else
eprint("usage: dmenu [-i] [-b] [-fn <font>] [-nb <color>] [-nf <color>]\n"
" [-p <prompt>] [-sb <color>] [-sf <color>] [-v]\n");
- if(!setlocale(LC_CTYPE, "") || !XSupportsLocale())
+ if(!XSupportsLocale())
fprintf(stderr, "warning: no locale support\n");
if(!(dpy = XOpenDisplay(0)))
eprint("dmenu: cannot open display\n");