X-Git-Url: https://git.xinqibao.xyz/dwm.git/blobdiff_plain/7d7cde0fd6ceae2f7d759b924afd8df279a4ddde..10885d349a8426f0a55f34e78a2592267e8e55be:/event.c?ds=inline

diff --git a/event.c b/event.c
index df0a5ef..eab9b12 100644
--- a/event.c
+++ b/event.c
@@ -20,23 +20,6 @@ KEYS
 
 #define CLEANMASK(mask) (mask & ~(numlockmask | LockMask))
 
-static void
-synconfig(Client *c, int x, int y, int w, int h, unsigned int border) {
-	XEvent synev;
-
-	synev.type = ConfigureNotify;
-	synev.xconfigure.display = dpy;
-	synev.xconfigure.event = c->win;
-	synev.xconfigure.window = c->win;
-	synev.xconfigure.x = x;
-	synev.xconfigure.y = y;
-	synev.xconfigure.width = w;
-	synev.xconfigure.height = h;
-	synev.xconfigure.border_width = border;
-	synev.xconfigure.above = None;
-	XSendEvent(dpy, c->win, True, NoEventMask, &synev);
-}
-
 static void
 movemouse(Client *c) {
 	int x1, y1, ocx, ocy, di;
@@ -52,14 +35,12 @@ movemouse(Client *c) {
 	c->ismax = False;
 	XQueryPointer(dpy, root, &dummy, &dummy, &x1, &y1, &di, &di, &dui);
 	for(;;) {
-		XMaskEvent(dpy, MOUSEMASK | ExposureMask | StructureNotifyMask, &ev);
+		XMaskEvent(dpy, MOUSEMASK | ExposureMask, &ev);
 		switch (ev.type) {
-		default:
-			break;
-		case ConfigureRequest:
-			synconfig(c, c->x, c->y, c->w, c->h, ev.xconfigure.border_width);
-			XSync(dpy, False);
-			break;
+		case ButtonRelease:
+			resize(c, True, TopLeft);
+			XUngrabPointer(dpy, CurrentTime);
+			return;
 		case Expose:
 			handler[Expose](&ev);
 			break;
@@ -69,14 +50,6 @@ movemouse(Client *c) {
 			c->y = ocy + (ev.xmotion.y - y1);
 			resize(c, False, TopLeft);
 			break;
-		case ButtonRelease:
-			XUngrabPointer(dpy, CurrentTime);
-			return;
-		case DestroyNotify:
-		case UnmapNotify:
-			XUngrabPointer(dpy, CurrentTime);
-			handler[ev.type](&ev);
-			return;
 		}
 	}
 }
@@ -96,14 +69,12 @@ resizemouse(Client *c) {
 	c->ismax = False;
 	XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w, c->h);
 	for(;;) {
-		XMaskEvent(dpy, MOUSEMASK | ExposureMask | StructureNotifyMask, &ev);
+		XMaskEvent(dpy, MOUSEMASK | ExposureMask, &ev);
 		switch(ev.type) {
-		default:
-			break;
-		case ConfigureRequest:
-			synconfig(c, c->x, c->y, c->w, c->h, ev.xconfigure.border_width);
-			XSync(dpy, False);
-			break;
+		case ButtonRelease:
+			resize(c, True, TopLeft);
+			XUngrabPointer(dpy, CurrentTime);
+			return;
 		case Expose:
 			handler[Expose](&ev);
 			break;
@@ -121,14 +92,6 @@ resizemouse(Client *c) {
 				sticky = (ocy <= ev.xmotion.y) ? TopRight : BotRight;
 			resize(c, True, sticky);
 			break;
-		case ButtonRelease:
-			XUngrabPointer(dpy, CurrentTime);
-			return;
-		case DestroyNotify:
-		case UnmapNotify:
-			XUngrabPointer(dpy, CurrentTime);
-			handler[ev.type](&ev);
-			return;
 		}
 	}
 }
@@ -160,10 +123,8 @@ buttonpress(XEvent *e) {
 				return;
 			}
 		}
-		if(ev->x < x + bmw) {
-			if(ev->button == Button1)
-				togglemode(NULL);
-		}
+		if((ev->x < x + bmw) && (ev->button == Button1))
+			togglemode(NULL);
 	}
 	else if((c = getclient(ev->window))) {
 		focus(c);
@@ -211,10 +172,13 @@ configurerequest(XEvent *e) {
 		if(newmask)
 			XConfigureWindow(dpy, c->win, newmask, &wc);
 		else
-			synconfig(c, c->x, c->y, c->w, c->h, c->border);
+			configure(c);
 		XSync(dpy, False);
-		if(c->isfloat)
+		if(c->isfloat) {
 			resize(c, False, TopLeft);
+			if(!isvisible(c))
+				ban(c);
+		}
 		else
 			arrange(NULL);
 	}
@@ -353,6 +317,7 @@ propertynotify(XEvent *e) {
 		}
 		if(ev->atom == XA_WM_NAME || ev->atom == netatom[NetWMName]) {
 			updatetitle(c);
+			resizetitle(c);
 			drawtitle(c);
 		}
 	}