if isatty() first read from stdin and then grab the keyboard, otherwise first grab the keyboard and then read from stdin
This commit is contained in:
parent
6c0e05eb0d
commit
8a066fabd9
25
main.c
25
main.c
@ -108,6 +108,13 @@ drawmenu(void) {
|
||||
XFlush(dpy);
|
||||
}
|
||||
|
||||
static void
|
||||
grabkeyboard(void) {
|
||||
while(XGrabKeyboard(dpy, root, True, GrabModeAsync,
|
||||
GrabModeAsync, CurrentTime) != GrabSuccess)
|
||||
usleep(1000);
|
||||
}
|
||||
|
||||
static unsigned long
|
||||
initcolor(const char *colstr) {
|
||||
Colormap cmap = DefaultColormap(dpy, screen);
|
||||
@ -418,12 +425,6 @@ main(int argc, char *argv[]) {
|
||||
XModifierKeymap *modmap;
|
||||
XSetWindowAttributes wa;
|
||||
|
||||
if(argc == 2 && !strncmp("-v", argv[1], 3))
|
||||
eprint("dmenu-"VERSION", (C)opyright MMVI-MMVII Anselm R. Garbe\n");
|
||||
else if(isatty(STDIN_FILENO)) {
|
||||
fputs("error: dmenu can't run in an interactive shell\n", stdout);
|
||||
usage();
|
||||
}
|
||||
/* command line args */
|
||||
for(i = 1; i < argc; i++)
|
||||
if(!strncmp(argv[i], "-b", 3)) {
|
||||
@ -447,6 +448,8 @@ main(int argc, char *argv[]) {
|
||||
else if(!strncmp(argv[i], "-sf", 4)) {
|
||||
if(++i < argc) selfg = argv[i];
|
||||
}
|
||||
else if(!strncmp(argv[i], "-v", 3))
|
||||
eprint("dmenu-"VERSION", (C)opyright MMVI-MMVII Anselm R. Garbe\n");
|
||||
else
|
||||
usage();
|
||||
setlocale(LC_CTYPE, "");
|
||||
@ -455,10 +458,14 @@ main(int argc, char *argv[]) {
|
||||
eprint("dmenu: cannot open display\n");
|
||||
screen = DefaultScreen(dpy);
|
||||
root = RootWindow(dpy, screen);
|
||||
while(XGrabKeyboard(dpy, root, True, GrabModeAsync,
|
||||
GrabModeAsync, CurrentTime) != GrabSuccess)
|
||||
usleep(1000);
|
||||
if(isatty(STDIN_FILENO)) {
|
||||
maxname = readstdin();
|
||||
grabkeyboard();
|
||||
}
|
||||
else { /* prevent keypress loss */
|
||||
grabkeyboard();
|
||||
maxname = readstdin();
|
||||
}
|
||||
/* init modifier map */
|
||||
modmap = XGetModifierMapping(dpy);
|
||||
for (i = 0; i < 8; i++) {
|
||||
|
Loading…
Reference in New Issue
Block a user