detect active monitor using input focus

This commit is contained in:
Connor Lane Smith 2011-09-19 18:15:03 +01:00
parent 3af80cd7d8
commit f1848a3ef0
1 changed files with 12 additions and 7 deletions

19
dmenu.c
View File

@ -473,7 +473,7 @@ void
setup(void) { setup(void) {
int x, y, screen = DefaultScreen(dc->dpy); int x, y, screen = DefaultScreen(dc->dpy);
Window root = RootWindow(dc->dpy, screen); Window root = RootWindow(dc->dpy, screen);
XSetWindowAttributes wa; XSetWindowAttributes swa;
#ifdef XINERAMA #ifdef XINERAMA
int n; int n;
XineramaScreenInfo *info; XineramaScreenInfo *info;
@ -494,9 +494,14 @@ setup(void) {
if((info = XineramaQueryScreens(dc->dpy, &n))) { if((info = XineramaQueryScreens(dc->dpy, &n))) {
int i, di; int i, di;
unsigned int du; unsigned int du;
Window dw; Window w, dw;
XWindowAttributes wa;
XQueryPointer(dc->dpy, root, &dw, &dw, &x, &y, &di, &di, &du); XGetInputFocus(dc->dpy, &w, &di);
if(w != root && XGetWindowAttributes(dc->dpy, w, &wa))
XTranslateCoordinates(dc->dpy, root, root, wa.x, wa.y, &x, &y, &dw);
else
XQueryPointer(dc->dpy, root, &dw, &dw, &x, &y, &di, &di, &du);
for(i = 0; i < n-1; i++) for(i = 0; i < n-1; i++)
if(INRECT(x, y, info[i].x_org, info[i].y_org, info[i].width, info[i].height)) if(INRECT(x, y, info[i].x_org, info[i].y_org, info[i].width, info[i].height))
break; break;
@ -517,13 +522,13 @@ setup(void) {
match(False); match(False);
/* menu window */ /* menu window */
wa.override_redirect = True; swa.override_redirect = True;
wa.background_pixmap = ParentRelative; swa.background_pixmap = ParentRelative;
wa.event_mask = ExposureMask | KeyPressMask | VisibilityChangeMask; swa.event_mask = ExposureMask | KeyPressMask | VisibilityChangeMask;
win = XCreateWindow(dc->dpy, root, x, y, mw, mh, 0, win = XCreateWindow(dc->dpy, root, x, y, mw, mh, 0,
DefaultDepth(dc->dpy, screen), CopyFromParent, DefaultDepth(dc->dpy, screen), CopyFromParent,
DefaultVisual(dc->dpy, screen), DefaultVisual(dc->dpy, screen),
CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa); CWOverrideRedirect | CWBackPixmap | CWEventMask, &swa);
XMapRaised(dc->dpy, win); XMapRaised(dc->dpy, win);
resizedc(dc, mw, mh); resizedc(dc, mw, mh);