X-Git-Url: https://git.xinqibao.xyz/dwm.git/blobdiff_plain/83aa110c6fabbf5f5a14b698a6ca22072cb80629..f2512243f494915fe91ebb5e67ac94abd5b528c6:/event.c?ds=sidebyside

diff --git a/event.c b/event.c
index 949812f..4bedf18 100644
--- a/event.c
+++ b/event.c
@@ -16,7 +16,7 @@ typedef struct {
 
 KEYS
 
-#define CLEANMASK(mask) (mask & ~(numlockmask | LockMask))
+#define CLEANMASK(mask)		(mask & ~(numlockmask | LockMask))
 #define MOUSEMASK		(BUTTONMASK | PointerMotionMask)
 
 static Client *
@@ -138,25 +138,21 @@ buttonpress(XEvent *e) {
 				return;
 			}
 		}
-		if(ev->x < x + blw)
-			switch(ev->button) {
-			case Button1:
-				setlayout(NULL);
-				break;
-			}
+		if((ev->x < x + blw) && ev->button == Button1)
+			setlayout(NULL);
 	}
 	else if((c = getclient(ev->window))) {
 		focus(c);
 		if(CLEANMASK(ev->state) != MODKEY)
 			return;
-		if(ev->button == Button1 && (lt->arrange == floating || c->isfloating)) {
+		if(ev->button == Button1 && (isfloating() || c->isfloating)) {
 			restack();
 			movemouse(c);
 		}
 		else if(ev->button == Button2)
 			zoom(NULL);
 		else if(ev->button == Button3
-		&& (lt->arrange == floating || c->isfloating) && !c->isfixed)
+		&& (isfloating() || c->isfloating) && !c->isfixed)
 		{
 			restack();
 			resizemouse(c);
@@ -174,7 +170,7 @@ configurerequest(XEvent *e) {
 		c->ismax = False;
 		if(ev->value_mask & CWBorderWidth)
 			c->border = ev->border_width;
-		if(c->isfixed || c->isfloating || (lt->arrange == floating)) {
+		if(c->isfixed || c->isfloating || isfloating()) {
 			if(ev->value_mask & CWX)
 				c->x = ev->x;
 			if(ev->value_mask & CWY)
@@ -220,23 +216,10 @@ configurenotify(XEvent *e) {
 		dc.drawable = XCreatePixmap(dpy, root, sw, bh, DefaultDepth(dpy, screen));
 		XResizeWindow(dpy, barwin, sw, bh);
 		updatebarpos();
-		lt->arrange();
+		arrange();
 	}
 }
 
-static void
-createnotify(XEvent *e) {
-	static XWindowAttributes wa;
-	XCreateWindowEvent *ev = &e->xcreatewindow;
-
-	if(!XGetWindowAttributes(dpy, ev->window, &wa))
-		return;
-	if(wa.override_redirect)
-		return;
-	if(!getclient(ev->window) && (wa.map_state == IsViewable))
-		manage(ev->window, &wa);
-}
-
 static void
 destroynotify(XEvent *e) {
 	Client *c;
@@ -334,7 +317,7 @@ propertynotify(XEvent *e) {
 			case XA_WM_TRANSIENT_FOR:
 				XGetTransientForHint(dpy, c->win, &trans);
 				if(!c->isfloating && (c->isfloating = (getclient(trans) != NULL)))
-					lt->arrange();
+					arrange();
 				break;
 			case XA_WM_NORMAL_HINTS:
 				updatesizehints(c);
@@ -353,8 +336,10 @@ unmapnotify(XEvent *e) {
 	Client *c;
 	XUnmapEvent *ev = &e->xunmap;
 
-	if((c = getclient(ev->window)))
-		unmanage(c);
+	if((c = getclient(ev->window)) && (ev->event == root)) {
+		if(ev->send_event || c->unmapped-- == 0)
+			unmanage(c);
+	}
 }
 
 /* extern */
@@ -363,7 +348,6 @@ void (*handler[LASTEvent]) (XEvent *) = {
 	[ButtonPress] = buttonpress,
 	[ConfigureRequest] = configurerequest,
 	[ConfigureNotify] = configurenotify,
-	[CreateNotify] = createnotify,
 	[DestroyNotify] = destroynotify,
 	[EnterNotify] = enternotify,
 	[LeaveNotify] = leavenotify,