all repos — dmenu @ f1848a3ef0d5e230761b6b9b5b7490d7be945154

my build of dmenu

detect active monitor using input focus
Connor Lane Smith cls@lubutu.com
Mon, 19 Sep 2011 18:15:03 +0100
commit

f1848a3ef0d5e230761b6b9b5b7490d7be945154

parent

3af80cd7d8ebc6dd72d4d756fc2767c17d1caa0a

1 files changed, 12 insertions(+), 7 deletions(-)

jump to
M dmenu.cdmenu.c

@@ -473,7 +473,7 @@ void

setup(void) { int x, y, screen = DefaultScreen(dc->dpy); Window root = RootWindow(dc->dpy, screen); - XSetWindowAttributes wa; + XSetWindowAttributes swa; #ifdef XINERAMA int n; XineramaScreenInfo *info;

@@ -494,9 +494,14 @@ #ifdef XINERAMA

if((info = XineramaQueryScreens(dc->dpy, &n))) { int i, di; 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++) if(INRECT(x, y, info[i].x_org, info[i].y_org, info[i].width, info[i].height)) break;

@@ -517,13 +522,13 @@ inputw = MIN(inputw, mw/3);

match(False); /* menu window */ - wa.override_redirect = True; - wa.background_pixmap = ParentRelative; - wa.event_mask = ExposureMask | KeyPressMask | VisibilityChangeMask; + swa.override_redirect = True; + swa.background_pixmap = ParentRelative; + swa.event_mask = ExposureMask | KeyPressMask | VisibilityChangeMask; win = XCreateWindow(dc->dpy, root, x, y, mw, mh, 0, DefaultDepth(dc->dpy, screen), CopyFromParent, DefaultVisual(dc->dpy, screen), - CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa); + CWOverrideRedirect | CWBackPixmap | CWEventMask, &swa); XMapRaised(dc->dpy, win); resizedc(dc, mw, mh);