main.c
changeset 292 4aa632b6ba66
parent 291 8e6e0aa5e2ae
child 293 093744cc5353
equal deleted inserted replaced
291:8e6e0aa5e2ae 292:4aa632b6ba66
    25 {
    25 {
    26 	while(sel) {
    26 	while(sel) {
    27 		resize(sel, True, TopLeft);
    27 		resize(sel, True, TopLeft);
    28 		unmanage(sel);
    28 		unmanage(sel);
    29 	}
    29 	}
       
    30 	XUngrabKey(dpy, AnyKey, AnyModifier, root);
    30 	XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
    31 	XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
       
    32 	XSync(dpy, False);
    31 }
    33 }
    32 
    34 
    33 static void
    35 static void
    34 scan()
    36 scan()
    35 {
    37 {
    36 	unsigned int i, num;
    38 	unsigned int i, num;
    37 	Window *wins, d1, d2;
    39 	Window *wins, d1, d2;
    38 	XWindowAttributes wa;
    40 	XWindowAttributes wa;
    39 
    41 
       
    42 	wins = NULL;
    40 	if(XQueryTree(dpy, root, &d1, &d2, &wins, &num)) {
    43 	if(XQueryTree(dpy, root, &d1, &d2, &wins, &num)) {
    41 		for(i = 0; i < num; i++) {
    44 		for(i = 0; i < num; i++) {
    42 			if(!XGetWindowAttributes(dpy, wins[i], &wa))
    45 			if(!XGetWindowAttributes(dpy, wins[i], &wa))
    43 				continue;
    46 				continue;
    44 			if(wa.override_redirect || XGetTransientForHint(dpy, wins[i], &d1))
    47 			if(wa.override_redirect || XGetTransientForHint(dpy, wins[i], &d1))
   166 	int i, j, xfd;
   169 	int i, j, xfd;
   167 	unsigned int mask;
   170 	unsigned int mask;
   168 	fd_set rd;
   171 	fd_set rd;
   169 	Bool readin = True;
   172 	Bool readin = True;
   170 	Window w;
   173 	Window w;
   171 	XEvent ev;
       
   172 	XModifierKeymap *modmap;
   174 	XModifierKeymap *modmap;
   173 	XSetWindowAttributes wa;
   175 	XSetWindowAttributes wa;
   174 
   176 
   175 	if(argc == 2 && !strncmp("-v", argv[1], 3)) {
   177 	if(argc == 2 && !strncmp("-v", argv[1], 3)) {
   176 		fputs("dwm-"VERSION", (C)opyright MMVI Anselm R. Garbe\n", stdout);
   178 		fputs("dwm-"VERSION", (C)opyright MMVI Anselm R. Garbe\n", stdout);
   194 	XSync(dpy, False);
   196 	XSync(dpy, False);
   195 
   197 
   196 	if(otherwm)
   198 	if(otherwm)
   197 		eprint("dwm: another window manager is already running\n");
   199 		eprint("dwm: another window manager is already running\n");
   198 
   200 
       
   201 	XSync(dpy, False);
   199 	XSetErrorHandler(NULL);
   202 	XSetErrorHandler(NULL);
   200 	xerrorxlib = XSetErrorHandler(xerror);
   203 	xerrorxlib = XSetErrorHandler(xerror);
   201 	XSync(dpy, False);
   204 	XSync(dpy, False);
   202 
   205 
   203 	/* init atoms */
   206 	/* init atoms */
   266 
   269 
   267 	scan();
   270 	scan();
   268 
   271 
   269 	/* main event loop, also reads status text from stdin */
   272 	/* main event loop, also reads status text from stdin */
   270 	XSync(dpy, False);
   273 	XSync(dpy, False);
   271 	goto XLoop;
   274 	procevent();
   272 	while(running) {
   275 	while(running) {
   273 		FD_ZERO(&rd);
   276 		FD_ZERO(&rd);
   274 		if(readin)
   277 		if(readin)
   275 			FD_SET(STDIN_FILENO, &rd);
   278 			FD_SET(STDIN_FILENO, &rd);
   276 		FD_SET(xfd, &rd);
   279 		FD_SET(xfd, &rd);
   286 					stext[strlen(stext) - 1] = 0;
   289 					stext[strlen(stext) - 1] = 0;
   287 				else 
   290 				else 
   288 					strcpy(stext, "broken pipe");
   291 					strcpy(stext, "broken pipe");
   289 				drawstatus();
   292 				drawstatus();
   290 			}
   293 			}
   291 			if(FD_ISSET(xfd, &rd)) {
   294 			if(FD_ISSET(xfd, &rd))
   292 XLoop:
   295 				procevent();
   293 				while(XPending(dpy)) {
       
   294 					XNextEvent(dpy, &ev);
       
   295 					if(handler[ev.type])
       
   296 						(handler[ev.type])(&ev); /* call handler */
       
   297 				}
       
   298 			}
       
   299 		}
   296 		}
   300 	}
   297 	}
   301 	cleanup();
   298 	cleanup();
   302 	XCloseDisplay(dpy);
   299 	XCloseDisplay(dpy);
   303 
   300