fixed -m bug (thanks Rob)
[dmenu.git] / dmenu.c
diff --git a/dmenu.c b/dmenu.c
index 5be73f7..3c83d73 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;
 }
@@ -495,18 +506,18 @@ setup(void) {
        mh = (lines + 1) * bh;
 #ifdef XINERAMA
        if((info = XineramaQueryScreens(dc->dpy, &n))) {
-               int i, di;
+               int i, m, di;
                unsigned int du;
                Window dw;
 
                XQueryPointer(dc->dpy, root, &dw, &dw, &x, &y, &di, &di, &du);
-               for(i = 0; i < n; i++)
+               for(i = 0, m = -1; i < n; 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;
-               x = info[i].x_org;
-               y = info[i].y_org + (topbar ? 0 : info[i].height - mh);
-               mw = info[i].width;
+                       || (m < 0 && INRECT(x, y, info[i].x_org, info[i].y_org, info[i].width, info[i].height)))
+                               m = i;
+               x = info[m].x_org;
+               y = info[m].y_org + (topbar ? 0 : info[m].height - mh);
+               mw = info[m].width;
                XFree(info);
        }
        else
@@ -530,5 +541,4 @@ setup(void) {
        inputw = MIN(inputw, mw/3);
        promptw = prompt ? textw(dc, prompt) : 0;
        XMapRaised(dc->dpy, win);
-       match();
 }