Xinqi Bao's Git
projects
/
dmenu.git
/ blobdiff
summary
|
log
|
commit
|
diff
|
tree
raw
|
inline
| side by side
Added tag 2.6 for changeset 775f761a5647
[dmenu.git]
/
main.c
diff --git
a/main.c
b/main.c
index
c1d48dd
..
d87e5dc
100644
(file)
--- a/
main.c
+++ b/
main.c
@@
-108,6
+108,13
@@
drawmenu(void) {
XFlush(dpy);
}
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);
static unsigned long
initcolor(const char *colstr) {
Colormap cmap = DefaultColormap(dpy, screen);
@@
-196,7
+203,7
@@
match(char *pattern) {
static void
kpress(XKeyEvent * e) {
char buf[32];
static void
kpress(XKeyEvent * e) {
char buf[32];
- int i, num
, prev_nitem
;
+ int i, num;
unsigned int len;
KeySym ksym;
unsigned int len;
KeySym ksym;
@@
-282,12
+289,8
@@
kpress(XKeyEvent * e) {
}
break;
case XK_BackSpace:
}
break;
case XK_BackSpace:
- if((i = len)) {
- prev_nitem = nitem;
- do {
- text[--i] = 0;
- match(text);
- } while(i && nitem && prev_nitem == nitem);
+ if(len) {
+ text[--len] = 0;
match(text);
}
break;
match(text);
}
break;
@@
-418,10
+421,6
@@
main(int argc, char *argv[]) {
XModifierKeymap *modmap;
XSetWindowAttributes wa;
XModifierKeymap *modmap;
XSetWindowAttributes wa;
- 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)) {
/* command line args */
for(i = 1; i < argc; i++)
if(!strncmp(argv[i], "-b", 3)) {
@@
-455,10
+454,14
@@
main(int argc, char *argv[]) {
eprint("dmenu: cannot open display\n");
screen = DefaultScreen(dpy);
root = RootWindow(dpy, screen);
eprint("dmenu: cannot open display\n");
screen = DefaultScreen(dpy);
root = RootWindow(dpy, screen);
- while(XGrabKeyboard(dpy, root, True, GrabModeAsync,
- GrabModeAsync, CurrentTime) != GrabSuccess)
- usleep(1000);
- maxname = readstdin();
+ 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++) {
/* init modifier map */
modmap = XGetModifierMapping(dpy);
for (i = 0; i < 8; i++) {