dmenu

my fork of dmenu
Index Commits Files Refs README LICENSE
commit f1848a3ef0d5e230761b6b9b5b7490d7be945154
parent 3af80cd7d8ebc6dd72d4d756fc2767c17d1caa0a
Author: Connor Lane Smith <cls@lubutu.com>
Date:   Mon, 19 Sep 2011 18:15:03 +0100

detect active monitor using input focus
Diffstat:
Mdmenu.c | 19++++++++++++-------
1 file changed, 12 insertions(+), 7 deletions(-)
diff --git a/dmenu.c b/dmenu.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 @@ setup(void) {
     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 @@ setup(void) {
     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);