separated setup stuff into main.c:setup() - this makes main() more readable
This commit is contained in:
		
							parent
							
								
									07c2659806
								
							
						
					
					
						commit
						b5159dfd2f
					
				
							
								
								
									
										20
									
								
								dwm.h
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								dwm.h
									
									
									
									
									
								
							| @ -11,15 +11,10 @@ | |||||||
| #define MOUSEMASK		(BUTTONMASK | PointerMotionMask) | #define MOUSEMASK		(BUTTONMASK | PointerMotionMask) | ||||||
| #define PROTODELWIN		1 | #define PROTODELWIN		1 | ||||||
| 
 | 
 | ||||||
| typedef union Arg Arg; | typedef union { | ||||||
| typedef struct Client Client; |  | ||||||
| typedef struct DC DC; |  | ||||||
| typedef struct Fnt Fnt; |  | ||||||
| 
 |  | ||||||
| union Arg { |  | ||||||
| 	const char *cmd; | 	const char *cmd; | ||||||
| 	int i; | 	int i; | ||||||
| }; | } Arg; | ||||||
| 
 | 
 | ||||||
| /* atoms */ | /* atoms */ | ||||||
| enum { NetSupported, NetWMName, NetLast }; | enum { NetSupported, NetWMName, NetLast }; | ||||||
| @ -28,18 +23,18 @@ enum { WMProtocols, WMDelete, WMLast }; | |||||||
| /* cursor */ | /* cursor */ | ||||||
| enum { CurNormal, CurResize, CurMove, CurLast }; | enum { CurNormal, CurResize, CurMove, CurLast }; | ||||||
| 
 | 
 | ||||||
| /* windowcorners */ | /* window corners */ | ||||||
| typedef enum { TopLeft, TopRight, BotLeft, BotRight } Corner; | typedef enum { TopLeft, TopRight, BotLeft, BotRight } Corner; | ||||||
| 
 | 
 | ||||||
| struct Fnt { | typedef struct { | ||||||
| 	int ascent; | 	int ascent; | ||||||
| 	int descent; | 	int descent; | ||||||
| 	int height; | 	int height; | ||||||
| 	XFontSet set; | 	XFontSet set; | ||||||
| 	XFontStruct *xfont; | 	XFontStruct *xfont; | ||||||
| }; | } Fnt; | ||||||
| 
 | 
 | ||||||
| struct DC { /* draw context */ | typedef struct { /* draw context */ | ||||||
| 	int x, y, w, h; | 	int x, y, w, h; | ||||||
| 	unsigned long bg; | 	unsigned long bg; | ||||||
| 	unsigned long fg; | 	unsigned long fg; | ||||||
| @ -47,8 +42,9 @@ struct DC { /* draw context */ | |||||||
| 	Drawable drawable; | 	Drawable drawable; | ||||||
| 	Fnt font; | 	Fnt font; | ||||||
| 	GC gc; | 	GC gc; | ||||||
| }; | } DC; | ||||||
| 
 | 
 | ||||||
|  | typedef struct Client Client; | ||||||
| struct Client { | struct Client { | ||||||
| 	char name[256]; | 	char name[256]; | ||||||
| 	int proto; | 	int proto; | ||||||
|  | |||||||
							
								
								
									
										181
									
								
								main.c
									
									
									
									
									
								
							
							
						
						
									
										181
									
								
								main.c
									
									
									
									
									
								
							| @ -15,6 +15,22 @@ | |||||||
| #include <X11/Xatom.h> | #include <X11/Xatom.h> | ||||||
| #include <X11/Xproto.h> | #include <X11/Xproto.h> | ||||||
| 
 | 
 | ||||||
|  | /* extern */ | ||||||
|  | 
 | ||||||
|  | char stext[1024]; | ||||||
|  | Bool *seltag; | ||||||
|  | int screen, sx, sy, sw, sh, bx, by, bw, bh, mw; | ||||||
|  | unsigned int ntags, numlockmask; | ||||||
|  | Atom wmatom[WMLast], netatom[NetLast]; | ||||||
|  | Bool running = True; | ||||||
|  | Bool issel = True; | ||||||
|  | Client *clients = NULL; | ||||||
|  | Client *sel = NULL; | ||||||
|  | Cursor cursor[CurLast]; | ||||||
|  | Display *dpy; | ||||||
|  | DC dc = {0}; | ||||||
|  | Window root, barwin; | ||||||
|  | 
 | ||||||
| /* static */ | /* static */ | ||||||
| 
 | 
 | ||||||
| static int (*xerrorxlib)(Display *, XErrorEvent *); | static int (*xerrorxlib)(Display *, XErrorEvent *); | ||||||
| @ -62,6 +78,79 @@ scan() | |||||||
| 		XFree(wins); | 		XFree(wins); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static void | ||||||
|  | setup() | ||||||
|  | { | ||||||
|  | 	int i, j; | ||||||
|  | 	unsigned int mask; | ||||||
|  | 	Window w; | ||||||
|  | 	XModifierKeymap *modmap; | ||||||
|  | 	XSetWindowAttributes wa; | ||||||
|  | 
 | ||||||
|  | 	/* init atoms */ | ||||||
|  | 	wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False); | ||||||
|  | 	wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False); | ||||||
|  | 	netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False); | ||||||
|  | 	netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False); | ||||||
|  | 	XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32, | ||||||
|  | 			PropModeReplace, (unsigned char *) netatom, NetLast); | ||||||
|  | 
 | ||||||
|  | 	/* init cursors */ | ||||||
|  | 	cursor[CurNormal] = XCreateFontCursor(dpy, XC_left_ptr); | ||||||
|  | 	cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing); | ||||||
|  | 	cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur); | ||||||
|  | 
 | ||||||
|  | 	modmap = XGetModifierMapping(dpy); | ||||||
|  | 	for (i = 0; i < 8; i++) { | ||||||
|  | 		for (j = 0; j < modmap->max_keypermod; j++) { | ||||||
|  | 			if(modmap->modifiermap[i * modmap->max_keypermod + j] == XKeysymToKeycode(dpy, XK_Num_Lock)) | ||||||
|  | 				numlockmask = (1 << i); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	XFree(modmap); | ||||||
|  | 
 | ||||||
|  | 	wa.event_mask = SubstructureRedirectMask | SubstructureNotifyMask | EnterWindowMask | LeaveWindowMask; | ||||||
|  | 	wa.cursor = cursor[CurNormal]; | ||||||
|  | 	XChangeWindowAttributes(dpy, root, CWEventMask | CWCursor, &wa); | ||||||
|  | 
 | ||||||
|  | 	grabkeys(); | ||||||
|  | 	initrregs(); | ||||||
|  | 
 | ||||||
|  | 	for(ntags = 0; tags[ntags]; ntags++); | ||||||
|  | 	seltag = emallocz(sizeof(Bool) * ntags); | ||||||
|  | 	seltag[0] = True; | ||||||
|  | 
 | ||||||
|  | 	/* style */ | ||||||
|  | 	dc.bg = getcolor(BGCOLOR); | ||||||
|  | 	dc.fg = getcolor(FGCOLOR); | ||||||
|  | 	dc.border = getcolor(BORDERCOLOR); | ||||||
|  | 	setfont(FONT); | ||||||
|  | 
 | ||||||
|  | 	sx = sy = 0; | ||||||
|  | 	sw = DisplayWidth(dpy, screen); | ||||||
|  | 	sh = DisplayHeight(dpy, screen); | ||||||
|  | 	mw = (sw * MASTERW) / 100; | ||||||
|  | 
 | ||||||
|  | 	bx = by = 0; | ||||||
|  | 	bw = sw; | ||||||
|  | 	dc.h = bh = dc.font.height + 4; | ||||||
|  | 	wa.override_redirect = 1; | ||||||
|  | 	wa.background_pixmap = ParentRelative; | ||||||
|  | 	wa.event_mask = ButtonPressMask | ExposureMask; | ||||||
|  | 	barwin = XCreateWindow(dpy, root, bx, by, bw, bh, 0, DefaultDepth(dpy, screen), | ||||||
|  | 			CopyFromParent, DefaultVisual(dpy, screen), | ||||||
|  | 			CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa); | ||||||
|  | 	XDefineCursor(dpy, barwin, cursor[CurNormal]); | ||||||
|  | 	XMapRaised(dpy, barwin); | ||||||
|  | 
 | ||||||
|  | 	dc.drawable = XCreatePixmap(dpy, root, sw, bh, DefaultDepth(dpy, screen)); | ||||||
|  | 	dc.gc = XCreateGC(dpy, root, 0, 0); | ||||||
|  | 
 | ||||||
|  | 	issel = XQueryPointer(dpy, root, &w, &w, &i, &i, &i, &i, &mask); | ||||||
|  | 
 | ||||||
|  | 	strcpy(stext, "dwm-"VERSION); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /*
 | /*
 | ||||||
|  * Startup Error handler to check if another window manager |  * Startup Error handler to check if another window manager | ||||||
|  * is already running. |  * is already running. | ||||||
| @ -75,20 +164,6 @@ xerrorstart(Display *dsply, XErrorEvent *ee) | |||||||
| 
 | 
 | ||||||
| /* extern */ | /* extern */ | ||||||
| 
 | 
 | ||||||
| char stext[1024]; |  | ||||||
| Bool *seltag; |  | ||||||
| int screen, sx, sy, sw, sh, bx, by, bw, bh, mw; |  | ||||||
| unsigned int ntags, numlockmask; |  | ||||||
| Atom wmatom[WMLast], netatom[NetLast]; |  | ||||||
| Bool running = True; |  | ||||||
| Bool issel = True; |  | ||||||
| Client *clients = NULL; |  | ||||||
| Client *sel = NULL; |  | ||||||
| Cursor cursor[CurLast]; |  | ||||||
| Display *dpy; |  | ||||||
| DC dc = {0}; |  | ||||||
| Window root, barwin; |  | ||||||
| 
 |  | ||||||
| int | int | ||||||
| getproto(Window w) | getproto(Window w) | ||||||
| { | { | ||||||
| @ -153,12 +228,8 @@ xerror(Display *dpy, XErrorEvent *ee) | |||||||
| int | int | ||||||
| main(int argc, char *argv[]) | main(int argc, char *argv[]) | ||||||
| { | { | ||||||
| 	int i, j, xfd; | 	int r, xfd; | ||||||
| 	unsigned int mask; |  | ||||||
| 	fd_set rd; | 	fd_set rd; | ||||||
| 	Window w; |  | ||||||
| 	XModifierKeymap *modmap; |  | ||||||
| 	XSetWindowAttributes wa; |  | ||||||
| 
 | 
 | ||||||
| 	if(argc == 2 && !strncmp("-v", argv[1], 3)) { | 	if(argc == 2 && !strncmp("-v", argv[1], 3)) { | ||||||
| 		fputs("dwm-"VERSION", (C)opyright MMVI Anselm R. Garbe\n", stdout); | 		fputs("dwm-"VERSION", (C)opyright MMVI Anselm R. Garbe\n", stdout); | ||||||
| @ -189,70 +260,8 @@ main(int argc, char *argv[]) | |||||||
| 	xerrorxlib = XSetErrorHandler(xerror); | 	xerrorxlib = XSetErrorHandler(xerror); | ||||||
| 	XSync(dpy, False); | 	XSync(dpy, False); | ||||||
| 
 | 
 | ||||||
| 	/* init atoms */ | 	setup(); | ||||||
| 	wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False); |  | ||||||
| 	wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False); |  | ||||||
| 	netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False); |  | ||||||
| 	netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False); |  | ||||||
| 	XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32, |  | ||||||
| 			PropModeReplace, (unsigned char *) netatom, NetLast); |  | ||||||
| 
 |  | ||||||
| 	/* init cursors */ |  | ||||||
| 	cursor[CurNormal] = XCreateFontCursor(dpy, XC_left_ptr); |  | ||||||
| 	cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing); |  | ||||||
| 	cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur); |  | ||||||
| 
 |  | ||||||
| 	modmap = XGetModifierMapping(dpy); |  | ||||||
| 	for (i = 0; i < 8; i++) { |  | ||||||
| 		for (j = 0; j < modmap->max_keypermod; j++) { |  | ||||||
| 			if(modmap->modifiermap[i * modmap->max_keypermod + j] == XKeysymToKeycode(dpy, XK_Num_Lock)) |  | ||||||
| 				numlockmask = (1 << i); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	XFree(modmap); |  | ||||||
| 
 |  | ||||||
| 	wa.event_mask = SubstructureRedirectMask | SubstructureNotifyMask | EnterWindowMask | LeaveWindowMask; |  | ||||||
| 	wa.cursor = cursor[CurNormal]; |  | ||||||
| 	XChangeWindowAttributes(dpy, root, CWEventMask | CWCursor, &wa); |  | ||||||
| 
 |  | ||||||
| 	grabkeys(); |  | ||||||
| 	initrregs(); |  | ||||||
| 
 |  | ||||||
| 	for(ntags = 0; tags[ntags]; ntags++); |  | ||||||
| 	seltag = emallocz(sizeof(Bool) * ntags); |  | ||||||
| 	seltag[0] = True; |  | ||||||
| 
 |  | ||||||
| 	/* style */ |  | ||||||
| 	dc.bg = getcolor(BGCOLOR); |  | ||||||
| 	dc.fg = getcolor(FGCOLOR); |  | ||||||
| 	dc.border = getcolor(BORDERCOLOR); |  | ||||||
| 	setfont(FONT); |  | ||||||
| 
 |  | ||||||
| 	sx = sy = 0; |  | ||||||
| 	sw = DisplayWidth(dpy, screen); |  | ||||||
| 	sh = DisplayHeight(dpy, screen); |  | ||||||
| 	mw = (sw * MASTERW) / 100; |  | ||||||
| 
 |  | ||||||
| 	bx = by = 0; |  | ||||||
| 	bw = sw; |  | ||||||
| 	dc.h = bh = dc.font.height + 4; |  | ||||||
| 	wa.override_redirect = 1; |  | ||||||
| 	wa.background_pixmap = ParentRelative; |  | ||||||
| 	wa.event_mask = ButtonPressMask | ExposureMask; |  | ||||||
| 	barwin = XCreateWindow(dpy, root, bx, by, bw, bh, 0, DefaultDepth(dpy, screen), |  | ||||||
| 			CopyFromParent, DefaultVisual(dpy, screen), |  | ||||||
| 			CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa); |  | ||||||
| 	XDefineCursor(dpy, barwin, cursor[CurNormal]); |  | ||||||
| 	XMapRaised(dpy, barwin); |  | ||||||
| 
 |  | ||||||
| 	dc.drawable = XCreatePixmap(dpy, root, sw, bh, DefaultDepth(dpy, screen)); |  | ||||||
| 	dc.gc = XCreateGC(dpy, root, 0, 0); |  | ||||||
| 
 |  | ||||||
| 	strcpy(stext, "dwm-"VERSION); |  | ||||||
| 	drawstatus(); | 	drawstatus(); | ||||||
| 
 |  | ||||||
| 	issel = XQueryPointer(dpy, root, &w, &w, &i, &i, &i, &i, &mask); |  | ||||||
| 
 |  | ||||||
| 	scan(); | 	scan(); | ||||||
| 
 | 
 | ||||||
| 	/* main event loop, also reads status text from stdin */ | 	/* main event loop, also reads status text from stdin */ | ||||||
| @ -264,10 +273,10 @@ main(int argc, char *argv[]) | |||||||
| 		if(readin) | 		if(readin) | ||||||
| 			FD_SET(STDIN_FILENO, &rd); | 			FD_SET(STDIN_FILENO, &rd); | ||||||
| 		FD_SET(xfd, &rd); | 		FD_SET(xfd, &rd); | ||||||
| 		i = select(xfd + 1, &rd, NULL, NULL, NULL); | 		r = select(xfd + 1, &rd, NULL, NULL, NULL); | ||||||
| 		if((i == -1) && (errno == EINTR)) | 		if((r == -1) && (errno == EINTR)) | ||||||
| 			continue; | 			continue; | ||||||
| 		if(i > 0) { | 		if(r > 0) { | ||||||
| 			if(readin && FD_ISSET(STDIN_FILENO, &rd)) { | 			if(readin && FD_ISSET(STDIN_FILENO, &rd)) { | ||||||
| 				readin = NULL != fgets(stext, sizeof(stext), stdin); | 				readin = NULL != fgets(stext, sizeof(stext), stdin); | ||||||
| 				if(readin) | 				if(readin) | ||||||
| @ -277,7 +286,7 @@ main(int argc, char *argv[]) | |||||||
| 				drawstatus(); | 				drawstatus(); | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 		else if(i < 0) | 		else if(r < 0) | ||||||
| 			eprint("select failed\n"); | 			eprint("select failed\n"); | ||||||
| 		procevent(); | 		procevent(); | ||||||
| 	} | 	} | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user