dwm-meillo

diff main.c @ 333:827f8f6c9e97

separated setup stuff into main.c:setup() - this makes main() more readable
author Anselm R. Garbe <arg@10kloc.org>
date Wed, 23 Aug 2006 10:21:57 +0200
parents cea0c98495bc
children 5c874c619287
line diff
     1.1 --- a/main.c	Tue Aug 22 19:56:29 2006 +0200
     1.2 +++ b/main.c	Wed Aug 23 10:21:57 2006 +0200
     1.3 @@ -15,6 +15,22 @@
     1.4  #include <X11/Xatom.h>
     1.5  #include <X11/Xproto.h>
     1.6  
     1.7 +/* extern */
     1.8 +
     1.9 +char stext[1024];
    1.10 +Bool *seltag;
    1.11 +int screen, sx, sy, sw, sh, bx, by, bw, bh, mw;
    1.12 +unsigned int ntags, numlockmask;
    1.13 +Atom wmatom[WMLast], netatom[NetLast];
    1.14 +Bool running = True;
    1.15 +Bool issel = True;
    1.16 +Client *clients = NULL;
    1.17 +Client *sel = NULL;
    1.18 +Cursor cursor[CurLast];
    1.19 +Display *dpy;
    1.20 +DC dc = {0};
    1.21 +Window root, barwin;
    1.22 +
    1.23  /* static */
    1.24  
    1.25  static int (*xerrorxlib)(Display *, XErrorEvent *);
    1.26 @@ -62,6 +78,79 @@
    1.27  		XFree(wins);
    1.28  }
    1.29  
    1.30 +static void
    1.31 +setup()
    1.32 +{
    1.33 +	int i, j;
    1.34 +	unsigned int mask;
    1.35 +	Window w;
    1.36 +	XModifierKeymap *modmap;
    1.37 +	XSetWindowAttributes wa;
    1.38 +
    1.39 +	/* init atoms */
    1.40 +	wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False);
    1.41 +	wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False);
    1.42 +	netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False);
    1.43 +	netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False);
    1.44 +	XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32,
    1.45 +			PropModeReplace, (unsigned char *) netatom, NetLast);
    1.46 +
    1.47 +	/* init cursors */
    1.48 +	cursor[CurNormal] = XCreateFontCursor(dpy, XC_left_ptr);
    1.49 +	cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing);
    1.50 +	cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur);
    1.51 +
    1.52 +	modmap = XGetModifierMapping(dpy);
    1.53 +	for (i = 0; i < 8; i++) {
    1.54 +		for (j = 0; j < modmap->max_keypermod; j++) {
    1.55 +			if(modmap->modifiermap[i * modmap->max_keypermod + j] == XKeysymToKeycode(dpy, XK_Num_Lock))
    1.56 +				numlockmask = (1 << i);
    1.57 +		}
    1.58 +	}
    1.59 +	XFree(modmap);
    1.60 +
    1.61 +	wa.event_mask = SubstructureRedirectMask | SubstructureNotifyMask | EnterWindowMask | LeaveWindowMask;
    1.62 +	wa.cursor = cursor[CurNormal];
    1.63 +	XChangeWindowAttributes(dpy, root, CWEventMask | CWCursor, &wa);
    1.64 +
    1.65 +	grabkeys();
    1.66 +	initrregs();
    1.67 +
    1.68 +	for(ntags = 0; tags[ntags]; ntags++);
    1.69 +	seltag = emallocz(sizeof(Bool) * ntags);
    1.70 +	seltag[0] = True;
    1.71 +
    1.72 +	/* style */
    1.73 +	dc.bg = getcolor(BGCOLOR);
    1.74 +	dc.fg = getcolor(FGCOLOR);
    1.75 +	dc.border = getcolor(BORDERCOLOR);
    1.76 +	setfont(FONT);
    1.77 +
    1.78 +	sx = sy = 0;
    1.79 +	sw = DisplayWidth(dpy, screen);
    1.80 +	sh = DisplayHeight(dpy, screen);
    1.81 +	mw = (sw * MASTERW) / 100;
    1.82 +
    1.83 +	bx = by = 0;
    1.84 +	bw = sw;
    1.85 +	dc.h = bh = dc.font.height + 4;
    1.86 +	wa.override_redirect = 1;
    1.87 +	wa.background_pixmap = ParentRelative;
    1.88 +	wa.event_mask = ButtonPressMask | ExposureMask;
    1.89 +	barwin = XCreateWindow(dpy, root, bx, by, bw, bh, 0, DefaultDepth(dpy, screen),
    1.90 +			CopyFromParent, DefaultVisual(dpy, screen),
    1.91 +			CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa);
    1.92 +	XDefineCursor(dpy, barwin, cursor[CurNormal]);
    1.93 +	XMapRaised(dpy, barwin);
    1.94 +
    1.95 +	dc.drawable = XCreatePixmap(dpy, root, sw, bh, DefaultDepth(dpy, screen));
    1.96 +	dc.gc = XCreateGC(dpy, root, 0, 0);
    1.97 +
    1.98 +	issel = XQueryPointer(dpy, root, &w, &w, &i, &i, &i, &i, &mask);
    1.99 +
   1.100 +	strcpy(stext, "dwm-"VERSION);
   1.101 +}
   1.102 +
   1.103  /*
   1.104   * Startup Error handler to check if another window manager
   1.105   * is already running.
   1.106 @@ -75,20 +164,6 @@
   1.107  
   1.108  /* extern */
   1.109  
   1.110 -char stext[1024];
   1.111 -Bool *seltag;
   1.112 -int screen, sx, sy, sw, sh, bx, by, bw, bh, mw;
   1.113 -unsigned int ntags, numlockmask;
   1.114 -Atom wmatom[WMLast], netatom[NetLast];
   1.115 -Bool running = True;
   1.116 -Bool issel = True;
   1.117 -Client *clients = NULL;
   1.118 -Client *sel = NULL;
   1.119 -Cursor cursor[CurLast];
   1.120 -Display *dpy;
   1.121 -DC dc = {0};
   1.122 -Window root, barwin;
   1.123 -
   1.124  int
   1.125  getproto(Window w)
   1.126  {
   1.127 @@ -153,12 +228,8 @@
   1.128  int
   1.129  main(int argc, char *argv[])
   1.130  {
   1.131 -	int i, j, xfd;
   1.132 -	unsigned int mask;
   1.133 +	int r, xfd;
   1.134  	fd_set rd;
   1.135 -	Window w;
   1.136 -	XModifierKeymap *modmap;
   1.137 -	XSetWindowAttributes wa;
   1.138  
   1.139  	if(argc == 2 && !strncmp("-v", argv[1], 3)) {
   1.140  		fputs("dwm-"VERSION", (C)opyright MMVI Anselm R. Garbe\n", stdout);
   1.141 @@ -189,70 +260,8 @@
   1.142  	xerrorxlib = XSetErrorHandler(xerror);
   1.143  	XSync(dpy, False);
   1.144  
   1.145 -	/* init atoms */
   1.146 -	wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False);
   1.147 -	wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False);
   1.148 -	netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False);
   1.149 -	netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False);
   1.150 -	XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32,
   1.151 -			PropModeReplace, (unsigned char *) netatom, NetLast);
   1.152 -
   1.153 -	/* init cursors */
   1.154 -	cursor[CurNormal] = XCreateFontCursor(dpy, XC_left_ptr);
   1.155 -	cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing);
   1.156 -	cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur);
   1.157 -
   1.158 -	modmap = XGetModifierMapping(dpy);
   1.159 -	for (i = 0; i < 8; i++) {
   1.160 -		for (j = 0; j < modmap->max_keypermod; j++) {
   1.161 -			if(modmap->modifiermap[i * modmap->max_keypermod + j] == XKeysymToKeycode(dpy, XK_Num_Lock))
   1.162 -				numlockmask = (1 << i);
   1.163 -		}
   1.164 -	}
   1.165 -	XFree(modmap);
   1.166 -
   1.167 -	wa.event_mask = SubstructureRedirectMask | SubstructureNotifyMask | EnterWindowMask | LeaveWindowMask;
   1.168 -	wa.cursor = cursor[CurNormal];
   1.169 -	XChangeWindowAttributes(dpy, root, CWEventMask | CWCursor, &wa);
   1.170 -
   1.171 -	grabkeys();
   1.172 -	initrregs();
   1.173 -
   1.174 -	for(ntags = 0; tags[ntags]; ntags++);
   1.175 -	seltag = emallocz(sizeof(Bool) * ntags);
   1.176 -	seltag[0] = True;
   1.177 -
   1.178 -	/* style */
   1.179 -	dc.bg = getcolor(BGCOLOR);
   1.180 -	dc.fg = getcolor(FGCOLOR);
   1.181 -	dc.border = getcolor(BORDERCOLOR);
   1.182 -	setfont(FONT);
   1.183 -
   1.184 -	sx = sy = 0;
   1.185 -	sw = DisplayWidth(dpy, screen);
   1.186 -	sh = DisplayHeight(dpy, screen);
   1.187 -	mw = (sw * MASTERW) / 100;
   1.188 -
   1.189 -	bx = by = 0;
   1.190 -	bw = sw;
   1.191 -	dc.h = bh = dc.font.height + 4;
   1.192 -	wa.override_redirect = 1;
   1.193 -	wa.background_pixmap = ParentRelative;
   1.194 -	wa.event_mask = ButtonPressMask | ExposureMask;
   1.195 -	barwin = XCreateWindow(dpy, root, bx, by, bw, bh, 0, DefaultDepth(dpy, screen),
   1.196 -			CopyFromParent, DefaultVisual(dpy, screen),
   1.197 -			CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa);
   1.198 -	XDefineCursor(dpy, barwin, cursor[CurNormal]);
   1.199 -	XMapRaised(dpy, barwin);
   1.200 -
   1.201 -	dc.drawable = XCreatePixmap(dpy, root, sw, bh, DefaultDepth(dpy, screen));
   1.202 -	dc.gc = XCreateGC(dpy, root, 0, 0);
   1.203 -
   1.204 -	strcpy(stext, "dwm-"VERSION);
   1.205 +	setup();
   1.206  	drawstatus();
   1.207 -
   1.208 -	issel = XQueryPointer(dpy, root, &w, &w, &i, &i, &i, &i, &mask);
   1.209 -
   1.210  	scan();
   1.211  
   1.212  	/* main event loop, also reads status text from stdin */
   1.213 @@ -264,10 +273,10 @@
   1.214  		if(readin)
   1.215  			FD_SET(STDIN_FILENO, &rd);
   1.216  		FD_SET(xfd, &rd);
   1.217 -		i = select(xfd + 1, &rd, NULL, NULL, NULL);
   1.218 -		if((i == -1) && (errno == EINTR))
   1.219 +		r = select(xfd + 1, &rd, NULL, NULL, NULL);
   1.220 +		if((r == -1) && (errno == EINTR))
   1.221  			continue;
   1.222 -		if(i > 0) {
   1.223 +		if(r > 0) {
   1.224  			if(readin && FD_ISSET(STDIN_FILENO, &rd)) {
   1.225  				readin = NULL != fgets(stext, sizeof(stext), stdin);
   1.226  				if(readin)
   1.227 @@ -277,7 +286,7 @@
   1.228  				drawstatus();
   1.229  			}
   1.230  		}
   1.231 -		else if(i < 0)
   1.232 +		else if(r < 0)
   1.233  			eprint("select failed\n");
   1.234  		procevent();
   1.235  	}