about summary refs log tree commit diff
path: root/dmenu.c
diff options
context:
space:
mode:
authorConnor Lane Smith <cls@lubutu.com>2011-05-15 14:13:31 +0100
committerConnor Lane Smith <cls@lubutu.com>2011-05-15 14:13:31 +0100
commitd0051e7bb858815866fbaf3a8fd5b50319c0c86d (patch)
treee1984fcdce3f9acb59c56c031993e4f9efbdf250 /dmenu.c
parentcleanup (diff)
downloaddmenu-d0051e7bb858815866fbaf3a8fd5b50319c0c86d.tar.gz
dmenu-d0051e7bb858815866fbaf3a8fd5b50319c0c86d.tar.bz2
dmenu-d0051e7bb858815866fbaf3a8fd5b50319c0c86d.zip
faster grab
Diffstat (limited to 'dmenu.c')
-rw-r--r--dmenu.c23
1 files changed, 12 insertions, 11 deletions
diff --git a/dmenu.c b/dmenu.c
index cf5e4a6..d54b1b3 100644
--- a/dmenu.c
+++ b/dmenu.c
@@ -57,7 +57,7 @@ static DC *dc;
 static Item *items = NULL;
 static Item *matches, *matchend;
 static Item *prev, *curr, *next, *sel;
-static Window root, win;
+static Window win;
 
 static int (*fstrncmp)(const char *, const char *, size_t) = strncmp;
 
@@ -104,14 +104,14 @@ main(int argc, char *argv[]) {
 	initfont(dc, font);
 
 	if(fast) {
-		setup();
+		grabkeyboard();
 		readstdin();
 	}
 	else {
 		readstdin();
-		setup();
+		grabkeyboard();
 	}
-	match();
+	setup();
 	run();
 	return EXIT_FAILURE;
 
@@ -209,7 +209,8 @@ grabkeyboard(void) {
 	int i;
 
 	for(i = 0; i < 1000; i++) {
-		if(!XGrabKeyboard(dc->dpy, root, True, GrabModeAsync, GrabModeAsync, CurrentTime))
+		if(XGrabKeyboard(dc->dpy, DefaultRootWindow(dc->dpy), True,
+		                 GrabModeAsync, GrabModeAsync, CurrentTime) == GrabSuccess)
 			return;
 		usleep(1000);
 	}
@@ -487,22 +488,21 @@ run(void) {
 
 void
 setup(void) {
-	int x, y, screen;
+	int x, y, screen = DefaultScreen(dc->dpy);
+	Window root = RootWindow(dc->dpy, screen);
 	XSetWindowAttributes wa;
 #ifdef XINERAMA
 	int n;
 	XineramaScreenInfo *info;
 #endif
 
-	screen = DefaultScreen(dc->dpy);
-	root = RootWindow(dc->dpy, screen);
-	utf8 = XInternAtom(dc->dpy, "UTF8_STRING", False);
-
 	normcol[ColBG] = getcolor(dc, normbgcolor);
 	normcol[ColFG] = getcolor(dc, normfgcolor);
 	selcol[ColBG] = getcolor(dc, selbgcolor);
 	selcol[ColFG] = getcolor(dc, selfgcolor);
 
+	utf8 = XInternAtom(dc->dpy, "UTF8_STRING", False);
+
 	/* menu geometry */
 	bh = dc->font.height + 2;
 	lines = MAX(lines, 0);
@@ -539,9 +539,10 @@ setup(void) {
 	                    DefaultVisual(dc->dpy, screen),
 	                    CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa);
 
-	grabkeyboard();
 	resizedc(dc, mw, mh);
 	inputw = MIN(inputw, mw/3);
 	promptw = prompt ? textw(dc, prompt) : 0;
 	XMapRaised(dc->dpy, win);
+	drawmenu();
+	match();
 }