X-Git-Url: https://git.xinqibao.xyz/dwm.git/blobdiff_plain/26157e6973f240a9b5ee407b9d2d5eca9358844f..1802fad2f9b2a432b04f642b9e954159d1f2554f:/main.c?ds=sidebyside

diff --git a/main.c b/main.c
index 9856354..488ebc1 100644
--- a/main.c
+++ b/main.c
@@ -19,14 +19,14 @@
 
 char stext[1024];
 Bool *seltag;
-int bx, by, bw, bh, bmw, mw, screen, sx, sy, sw, sh;
+int bx, by, bw, bh, bmw, master, screen, sx, sy, sw, sh;
 unsigned int ntags, numlockmask;
 Atom wmatom[WMLast], netatom[NetLast];
 Bool running = True;
 Bool issel = True;
-Bool maximized = False;
 Client *clients = NULL;
 Client *sel = NULL;
+Client *stack = NULL;
 Cursor cursor[CurLast];
 Display *dpy;
 DC dc = {0};
@@ -38,8 +38,7 @@ static int (*xerrorxlib)(Display *, XErrorEvent *);
 static Bool otherwm, readin;
 
 static void
-cleanup()
-{
+cleanup(void) {
 	close(STDIN_FILENO);
 	while(sel) {
 		resize(sel, True, TopLeft);
@@ -55,11 +54,11 @@ cleanup()
 	XDestroyWindow(dpy, barwin);
 	XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
 	XSync(dpy, False);
+	free(seltag);
 }
 
 static void
-scan()
-{
+scan(void) {
 	unsigned int i, num;
 	Window *wins, d1, d2;
 	XWindowAttributes wa;
@@ -80,8 +79,7 @@ scan()
 }
 
 static void
-setup()
-{
+setup(void) {
 	int i, j;
 	unsigned int mask;
 	Window w;
@@ -110,7 +108,8 @@ setup()
 	}
 	XFree(modmap);
 
-	wa.event_mask = SubstructureRedirectMask | SubstructureNotifyMask | EnterWindowMask | LeaveWindowMask;
+	wa.event_mask = SubstructureRedirectMask | SubstructureNotifyMask
+		| EnterWindowMask | LeaveWindowMask;
 	wa.cursor = cursor[CurNormal];
 	XChangeWindowAttributes(dpy, root, CWEventMask | CWCursor, &wa);
 
@@ -134,7 +133,7 @@ setup()
 	sx = sy = 0;
 	sw = DisplayWidth(dpy, screen);
 	sh = DisplayHeight(dpy, screen);
-	mw = (sw * MASTERW) / 100;
+	updatemaster();
 
 	bx = by = 0;
 	bw = sw;
@@ -161,8 +160,7 @@ setup()
  * is already running.
  */
 static int
-xerrorstart(Display *dsply, XErrorEvent *ee)
-{
+xerrorstart(Display *dsply, XErrorEvent *ee) {
 	otherwm = True;
 	return -1;
 }
@@ -170,8 +168,7 @@ xerrorstart(Display *dsply, XErrorEvent *ee)
 /* extern */
 
 int
-getproto(Window w)
-{
+getproto(Window w) {
 	int i, format, protos, status;
 	unsigned long extra, res;
 	Atom *protocols, real;
@@ -189,8 +186,7 @@ getproto(Window w)
 }
 
 void
-sendevent(Window w, Atom a, long value)
-{
+sendevent(Window w, Atom a, long value) {
 	XEvent e;
 
 	e.type = ClientMessage;
@@ -204,35 +200,33 @@ sendevent(Window w, Atom a, long value)
 }
 
 void
-quit(Arg *arg)
-{
+quit(Arg *arg) {
 	readin = running = False;
 }
 
 /*
  * There's no way to check accesses to destroyed windows, thus those cases are
  * ignored (especially on UnmapNotify's).  Other types of errors call Xlibs
- * default error handler, which calls exit().
+ * default error handler, which may call exit.
  */
 int
-xerror(Display *dpy, XErrorEvent *ee)
-{
+xerror(Display *dpy, XErrorEvent *ee) {
 	if(ee->error_code == BadWindow
 	|| (ee->request_code == X_SetInputFocus && ee->error_code == BadMatch)
 	|| (ee->request_code == X_PolyText8 && ee->error_code == BadDrawable)
 	|| (ee->request_code == X_PolyFillRectangle && ee->error_code == BadDrawable)
 	|| (ee->request_code == X_PolySegment && ee->error_code == BadDrawable)
 	|| (ee->request_code == X_ConfigureWindow && ee->error_code == BadMatch)
-	|| (ee->request_code == X_GrabKey && ee->error_code == BadAccess))
+	|| (ee->request_code == X_GrabKey && ee->error_code == BadAccess)
+	|| (ee->request_code == X_CopyArea && ee->error_code == BadDrawable))
 		return 0;
 	fprintf(stderr, "dwm: fatal error: request code=%d, error code=%d\n",
 		ee->request_code, ee->error_code);
-	return xerrorxlib(dpy, ee); /* may call exit() */
+	return xerrorxlib(dpy, ee); /* may call exit */
 }
 
 int
-main(int argc, char *argv[])
-{
+main(int argc, char *argv[]) {
 	int r, xfd;
 	fd_set rd;