diff options
Diffstat (limited to 'dmenu.c')
-rw-r--r-- | dmenu.c | 11 |
1 files changed, 8 insertions, 3 deletions
@@ -54,6 +54,7 @@ static Item *matches, *matchend; | |||
54 | static Item *prev, *curr, *next, *sel; | 54 | static Item *prev, *curr, *next, *sel; |
55 | static Window win; | 55 | static Window win; |
56 | static XIC xic; | 56 | static XIC xic; |
57 | static int mon = -1; | ||
57 | 58 | ||
58 | #include "config.h" | 59 | #include "config.h" |
59 | 60 | ||
@@ -84,6 +85,8 @@ main(int argc, char *argv[]) { | |||
84 | /* these options take one argument */ | 85 | /* these options take one argument */ |
85 | else if(!strcmp(argv[i], "-l")) /* number of lines in vertical list */ | 86 | else if(!strcmp(argv[i], "-l")) /* number of lines in vertical list */ |
86 | lines = atoi(argv[++i]); | 87 | lines = atoi(argv[++i]); |
88 | else if(!strcmp(argv[i], "-m")) | ||
89 | mon = atoi(argv[++i]); | ||
87 | else if(!strcmp(argv[i], "-p")) /* adds prompt to left of input field */ | 90 | else if(!strcmp(argv[i], "-p")) /* adds prompt to left of input field */ |
88 | prompt = argv[++i]; | 91 | prompt = argv[++i]; |
89 | else if(!strcmp(argv[i], "-fn")) /* font or font set */ | 92 | else if(!strcmp(argv[i], "-fn")) /* font or font set */ |
@@ -557,7 +560,9 @@ setup(void) { | |||
557 | XWindowAttributes wa; | 560 | XWindowAttributes wa; |
558 | 561 | ||
559 | XGetInputFocus(dc->dpy, &w, &di); | 562 | XGetInputFocus(dc->dpy, &w, &di); |
560 | if(w != root && w != PointerRoot && w != None) { | 563 | if(mon != -1 && mon < n) |
564 | i = mon; | ||
565 | if(!i && w != root && w != PointerRoot && w != None) { | ||
561 | /* find top-level window containing current input focus */ | 566 | /* find top-level window containing current input focus */ |
562 | do { | 567 | do { |
563 | if(XQueryTree(dc->dpy, (pw = w), &dw, &w, &dws, &du) && dws) | 568 | if(XQueryTree(dc->dpy, (pw = w), &dw, &w, &dws, &du) && dws) |
@@ -572,7 +577,7 @@ setup(void) { | |||
572 | } | 577 | } |
573 | } | 578 | } |
574 | /* no focused window is on screen, so use pointer location instead */ | 579 | /* no focused window is on screen, so use pointer location instead */ |
575 | if(!area && XQueryPointer(dc->dpy, root, &dw, &dw, &x, &y, &di, &di, &du)) | 580 | if(mon == -1 && !area && XQueryPointer(dc->dpy, root, &dw, &dw, &x, &y, &di, &di, &du)) |
576 | for(i = 0; i < n; i++) | 581 | for(i = 0; i < n; i++) |
577 | if(INTERSECT(x, y, 1, 1, info[i])) | 582 | if(INTERSECT(x, y, 1, 1, info[i])) |
578 | break; | 583 | break; |
@@ -614,7 +619,7 @@ setup(void) { | |||
614 | 619 | ||
615 | void | 620 | void |
616 | usage(void) { | 621 | usage(void) { |
617 | fputs("usage: dmenu [-b] [-f] [-i] [-l lines] [-p prompt] [-fn font]\n" | 622 | fputs("usage: dmenu [-b] [-f] [-i] [-l lines] [-p prompt] [-fn font] [-m monitor]\n" |
618 | " [-nb color] [-nf color] [-sb color] [-sf color] [-v]\n", stderr); | 623 | " [-nb color] [-nf color] [-sb color] [-sf color] [-v]\n", stderr); |
619 | exit(EXIT_FAILURE); | 624 | exit(EXIT_FAILURE); |
620 | } | 625 | } |