fixed xinerama corner case
[dmenu.git] / dmenu.c
diff --git a/dmenu.c b/dmenu.c
index 5be73f7..6d35430 100644 (file)
--- a/dmenu.c
+++ b/dmenu.c
@@ -64,6 +64,7 @@ static int (*fstrncmp)(const char *, const char *, size_t) = strncmp;
 
 int
 main(int argc, char *argv[]) {
+       Bool fast = False;
        int i;
 
        progname = "dmenu";
@@ -75,6 +76,8 @@ main(int argc, char *argv[]) {
                }
                else if(!strcmp(argv[i], "-b"))
                        topbar = False;
+               else if(!strcmp(argv[i], "-f"))
+                       fast = True;
                else if(!strcmp(argv[i], "-i"))
                        fstrncmp = strncasecmp;
                else if(i == argc-1)
@@ -101,13 +104,21 @@ main(int argc, char *argv[]) {
 
        dc = initdc();
        initfont(dc, font);
-       readstdin();
-       setup();
+
+       if(fast) {
+               setup();
+               readstdin();
+       }
+       else {
+               readstdin();
+               setup();
+       }
+       match();
        run();
        return EXIT_FAILURE;
 
 usage:
-       fputs("usage: dmenu [-b] [-i] [-l lines] [-m monitor] [-p prompt] [-fn font]\n"
+       fputs("usage: dmenu [-b] [-f] [-i] [-l lines] [-m monitor] [-p prompt] [-fn font]\n"
              "             [-nb color] [-nf color] [-sb color] [-sf color] [-v]\n", stderr);
        return EXIT_FAILURE;
 }
@@ -500,7 +511,7 @@ setup(void) {
                Window dw;
 
                XQueryPointer(dc->dpy, root, &dw, &dw, &x, &y, &di, &di, &du);
-               for(i = 0; i < n; i++)
+               for(i = 0; i < n-1; i++)
                        if((monitor == info[i].screen_number)
                        || (monitor < 0 && INRECT(x, y, info[i].x_org, info[i].y_org, info[i].width, info[i].height)))
                                break;
@@ -530,5 +541,4 @@ setup(void) {
        inputw = MIN(inputw, mw/3);
        promptw = prompt ? textw(dc, prompt) : 0;
        XMapRaised(dc->dpy, win);
-       match();
 }