|
|
@ -54,6 +54,7 @@ static Item *matches, *matchend; |
|
|
|
static Item *prev, *curr, *next, *sel; |
|
|
|
static Item *prev, *curr, *next, *sel; |
|
|
|
static Window win; |
|
|
|
static Window win; |
|
|
|
static XIC xic; |
|
|
|
static XIC xic; |
|
|
|
|
|
|
|
static int mon = -1; |
|
|
|
|
|
|
|
|
|
|
|
#include "config.h" |
|
|
|
#include "config.h" |
|
|
|
|
|
|
|
|
|
|
@ -84,6 +85,8 @@ main(int argc, char *argv[]) { |
|
|
|
/* these options take one argument */ |
|
|
|
/* these options take one argument */ |
|
|
|
else if(!strcmp(argv[i], "-l")) /* number of lines in vertical list */ |
|
|
|
else if(!strcmp(argv[i], "-l")) /* number of lines in vertical list */ |
|
|
|
lines = atoi(argv[++i]); |
|
|
|
lines = atoi(argv[++i]); |
|
|
|
|
|
|
|
else if(!strcmp(argv[i], "-m")) |
|
|
|
|
|
|
|
mon = atoi(argv[++i]); |
|
|
|
else if(!strcmp(argv[i], "-p")) /* adds prompt to left of input field */ |
|
|
|
else if(!strcmp(argv[i], "-p")) /* adds prompt to left of input field */ |
|
|
|
prompt = argv[++i]; |
|
|
|
prompt = argv[++i]; |
|
|
|
else if(!strcmp(argv[i], "-fn")) /* font or font set */ |
|
|
|
else if(!strcmp(argv[i], "-fn")) /* font or font set */ |
|
|
@ -557,7 +560,9 @@ setup(void) { |
|
|
|
XWindowAttributes wa; |
|
|
|
XWindowAttributes wa; |
|
|
|
|
|
|
|
|
|
|
|
XGetInputFocus(dc->dpy, &w, &di); |
|
|
|
XGetInputFocus(dc->dpy, &w, &di); |
|
|
|
if(w != root && w != PointerRoot && w != None) { |
|
|
|
if(mon != -1 && mon < n) |
|
|
|
|
|
|
|
i = mon; |
|
|
|
|
|
|
|
if(!i && w != root && w != PointerRoot && w != None) { |
|
|
|
/* find top-level window containing current input focus */ |
|
|
|
/* find top-level window containing current input focus */ |
|
|
|
do { |
|
|
|
do { |
|
|
|
if(XQueryTree(dc->dpy, (pw = w), &dw, &w, &dws, &du) && dws) |
|
|
|
if(XQueryTree(dc->dpy, (pw = w), &dw, &w, &dws, &du) && dws) |
|
|
@ -572,7 +577,7 @@ setup(void) { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
/* no focused window is on screen, so use pointer location instead */ |
|
|
|
/* no focused window is on screen, so use pointer location instead */ |
|
|
|
if(!area && XQueryPointer(dc->dpy, root, &dw, &dw, &x, &y, &di, &di, &du)) |
|
|
|
if(mon == -1 && !area && XQueryPointer(dc->dpy, root, &dw, &dw, &x, &y, &di, &di, &du)) |
|
|
|
for(i = 0; i < n; i++) |
|
|
|
for(i = 0; i < n; i++) |
|
|
|
if(INTERSECT(x, y, 1, 1, info[i])) |
|
|
|
if(INTERSECT(x, y, 1, 1, info[i])) |
|
|
|
break; |
|
|
|
break; |
|
|
@ -614,7 +619,7 @@ setup(void) { |
|
|
|
|
|
|
|
|
|
|
|
void |
|
|
|
void |
|
|
|
usage(void) { |
|
|
|
usage(void) { |
|
|
|
fputs("usage: dmenu [-b] [-f] [-i] [-l lines] [-p prompt] [-fn font]\n" |
|
|
|
fputs("usage: dmenu [-b] [-f] [-i] [-l lines] [-p prompt] [-fn font] [-m monitor]\n" |
|
|
|
" [-nb color] [-nf color] [-sb color] [-sf color] [-v]\n", stderr); |
|
|
|
" [-nb color] [-nf color] [-sb color] [-sf color] [-v]\n", stderr); |
|
|
|
exit(EXIT_FAILURE); |
|
|
|
exit(EXIT_FAILURE); |
|
|
|
} |
|
|
|
} |
|
|
|