X-Git-Url: https://git.xinqibao.xyz/dwm.git/blobdiff_plain/ca65478c8968434c78aacf4a102ccbbe4a66ad9e..10885d349a8426f0a55f34e78a2592267e8e55be:/event.c

diff --git a/event.c b/event.c
index c59385d..eab9b12 100644
--- a/event.c
+++ b/event.c
@@ -32,12 +32,15 @@ movemouse(Client *c) {
 	if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync,
 			None, cursor[CurMove], CurrentTime) != GrabSuccess)
 		return;
+	c->ismax = False;
 	XQueryPointer(dpy, root, &dummy, &dummy, &x1, &y1, &di, &di, &dui);
 	for(;;) {
 		XMaskEvent(dpy, MOUSEMASK | ExposureMask, &ev);
 		switch (ev.type) {
-		default:
-			break;
+		case ButtonRelease:
+			resize(c, True, TopLeft);
+			XUngrabPointer(dpy, CurrentTime);
+			return;
 		case Expose:
 			handler[Expose](&ev);
 			break;
@@ -47,9 +50,6 @@ movemouse(Client *c) {
 			c->y = ocy + (ev.xmotion.y - y1);
 			resize(c, False, TopLeft);
 			break;
-		case ButtonRelease:
-			XUngrabPointer(dpy, CurrentTime);
-			return;
 		}
 	}
 }
@@ -66,21 +66,24 @@ resizemouse(Client *c) {
 	if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync,
 				None, cursor[CurResize], CurrentTime) != GrabSuccess)
 		return;
+	c->ismax = False;
 	XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w, c->h);
 	for(;;) {
 		XMaskEvent(dpy, MOUSEMASK | ExposureMask, &ev);
 		switch(ev.type) {
-		default:
-			break;
+		case ButtonRelease:
+			resize(c, True, TopLeft);
+			XUngrabPointer(dpy, CurrentTime);
+			return;
 		case Expose:
 			handler[Expose](&ev);
 			break;
 		case MotionNotify:
 			XSync(dpy, False);
 			if((nw = abs(ocx - ev.xmotion.x)))
-				c->w = abs(ocx - ev.xmotion.x);
+				c->w = nw;
 			if((nh = abs(ocy - ev.xmotion.y)))
-				c->h = abs(ocy - ev.xmotion.y);
+				c->h = nh;
 			c->x = (ocx <= ev.xmotion.x) ? ocx : ocx - c->w;
 			c->y = (ocy <= ev.xmotion.y) ? ocy : ocy - c->h;
 			if(ocx <= ev.xmotion.x)
@@ -89,9 +92,6 @@ resizemouse(Client *c) {
 				sticky = (ocy <= ev.xmotion.y) ? TopRight : BotRight;
 			resize(c, True, sticky);
 			break;
-		case ButtonRelease:
-			XUngrabPointer(dpy, CurrentTime);
-			return;
 		}
 	}
 }
@@ -123,45 +123,26 @@ 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);
-		if(maximized || CLEANMASK(ev->state) != MODKEY)
+		if(CLEANMASK(ev->state) != MODKEY)
 			return;
 		if(ev->button == Button1 && (arrange == dofloat || c->isfloat)) {
-			restack(c);
+			restack();
 			movemouse(c);
 		}
 		else if(ev->button == Button2)
 			zoom(NULL);
 		else if(ev->button == Button3 && (arrange == dofloat || c->isfloat)) {
-			restack(c);
+			restack();
 			resizemouse(c);
 		}
 	}
 }
 
-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
 configurerequest(XEvent *e) {
 	unsigned long newmask;
@@ -170,11 +151,7 @@ configurerequest(XEvent *e) {
 	XWindowChanges wc;
 
 	if((c = getclient(ev->window))) {
-		if((c == sel) && !c->isfloat && (arrange != dofloat) && maximized) {
-			synconfig(c, sx, sy + bh, sw - 2, sh - 2 - bh, ev->border_width);
-			XSync(dpy, False);
-			return;
-		}
+		c->ismax = False;
 		gravitate(c, True);
 		if(ev->value_mask & CWX)
 			c->x = ev->x;
@@ -195,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);
 	}
@@ -232,7 +212,7 @@ enternotify(XEvent *e) {
 	if(ev->mode != NotifyNormal || ev->detail == NotifyInferior)
 		return;
 
-	if((c = getclient(ev->window)) || (c = getctitle(ev->window)))
+	if(((c = getclient(ev->window)) || (c = getctitle(ev->window))) && isvisible(c))
 		focus(c);
 	else if(ev->window == root) {
 		issel = True;
@@ -337,6 +317,7 @@ propertynotify(XEvent *e) {
 		}
 		if(ev->atom == XA_WM_NAME || ev->atom == netatom[NetWMName]) {
 			updatetitle(c);
+			resizetitle(c);
 			drawtitle(c);
 		}
 	}
@@ -368,7 +349,7 @@ void (*handler[LASTEvent]) (XEvent *) = {
 };
 
 void
-grabkeys() {
+grabkeys(void) {
 	static unsigned int len = sizeof(key) / sizeof(key[0]);
 	unsigned int i;
 	KeyCode code;
@@ -388,7 +369,7 @@ grabkeys() {
 }
 
 void
-procevent() {
+procevent(void) {
 	XEvent ev;
 
 	while(XPending(dpy)) {