about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--dwm.h20
-rw-r--r--main.c181
-rw-r--r--view.c2
3 files changed, 104 insertions, 99 deletions
diff --git a/dwm.h b/dwm.h
index b96facd..4e9c6b5 100644
--- a/dwm.h
+++ b/dwm.h
@@ -11,15 +11,10 @@
 #define MOUSEMASK		(BUTTONMASK | PointerMotionMask)
 #define PROTODELWIN		1
 
-typedef union Arg Arg;
-typedef struct Client Client;
-typedef struct DC DC;
-typedef struct Fnt Fnt;
-
-union Arg {
+typedef union {
 	const char *cmd;
 	int i;
-};
+} Arg;
 
 /* atoms */
 enum { NetSupported, NetWMName, NetLast };
@@ -28,18 +23,18 @@ enum { WMProtocols, WMDelete, WMLast };
 /* cursor */
 enum { CurNormal, CurResize, CurMove, CurLast };
 
-/* windowcorners */
+/* window corners */
 typedef enum { TopLeft, TopRight, BotLeft, BotRight } Corner;
 
-struct Fnt {
+typedef struct {
 	int ascent;
 	int descent;
 	int height;
 	XFontSet set;
 	XFontStruct *xfont;
-};
+} Fnt;
 
-struct DC { /* draw context */
+typedef struct { /* draw context */
 	int x, y, w, h;
 	unsigned long bg;
 	unsigned long fg;
@@ -47,8 +42,9 @@ struct DC { /* draw context */
 	Drawable drawable;
 	Fnt font;
 	GC gc;
-};
+} DC;
 
+typedef struct Client Client;
 struct Client {
 	char name[256];
 	int proto;
diff --git a/main.c b/main.c
index 6da3ccd..6544e9c 100644
--- a/main.c
+++ b/main.c
@@ -15,6 +15,22 @@
 #include <X11/Xatom.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 int (*xerrorxlib)(Display *, XErrorEvent *);
@@ -62,6 +78,79 @@ scan()
 		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
  * is already running.
@@ -75,20 +164,6 @@ xerrorstart(Display *dsply, XErrorEvent *ee)
 
 /* 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
 getproto(Window w)
 {
@@ -153,12 +228,8 @@ xerror(Display *dpy, XErrorEvent *ee)
 int
 main(int argc, char *argv[])
 {
-	int i, j, xfd;
-	unsigned int mask;
+	int r, xfd;
 	fd_set rd;
-	Window w;
-	XModifierKeymap *modmap;
-	XSetWindowAttributes wa;
<
tErrorHandler(xerror); XSync(dpy, False); - /* 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); - - strcpy(stext, "dwm-"VERSION); + setup(); drawstatus(); - - issel = XQueryPointer(dpy, root, &w, &w, &i, &i, &i, &i, &mask); - scan(); /* main event loop, also reads status text from stdin */ @@ -264,10 +273,10 @@ main(int argc, char *argv[]) if(readin) FD_SET(STDIN_FILENO, &rd); FD_SET(xfd, &rd); - i = select(xfd + 1, &rd, NULL, NULL, NULL); - if((i == -1) && (errno == EINTR)) + r = select(xfd + 1, &rd, NULL, NULL, NULL); + if((r == -1) && (errno == EINTR)) continue; - if(i > 0) { + if(r > 0) { if(readin && FD_ISSET(STDIN_FILENO, &rd)) { readin = NULL != fgets(stext, sizeof(stext), stdin); if(readin) @@ -277,7 +286,7 @@ main(int argc, char *argv[]) drawstatus(); } } - else if(i < 0) + else if(r < 0) eprint("select failed\n"); procevent(); } diff --git a/view.c b/view.c index d9aa6e4..22b1794 100644 --- a/view.c +++ b/view.c @@ -195,7 +195,7 @@ restack() void togglemode(Arg *arg) { - arrange = arrange == dofloat ? dotile : dofloat; + arrange = (arrange == dofloat) ? dotile : dofloat; if(sel) arrange(NULL); else