X-Git-Url: https://git.xinqibao.xyz/dwm.git/blobdiff_plain/7696c89c90c926f6371b1ee3ec1b13dd2414aa40..66da15324eef4f85c6dda13eba80430dc4cc97bb:/event.c

diff --git a/event.c b/event.c
index 604420d..e85e11f 100644
--- a/event.c
+++ b/event.c
@@ -9,7 +9,7 @@
 #include <X11/keysym.h>
 #include <X11/Xatom.h>
 
-#include "wm.h"
+#include "dwm.h"
 
 /* local functions */
 static void buttonpress(XEvent *e);
@@ -37,13 +37,11 @@ void (*handler[LASTEvent]) (XEvent *) = {
 	[UnmapNotify] = unmapnotify
 };
 
-unsigned int
+void
 discard_events(long even_mask)
 {
 	XEvent ev;
-	unsigned int n = 0;
-	while(XCheckMaskEvent(dpy, even_mask, &ev)) n++;
-	return n;
+	while(XCheckMaskEvent(dpy, even_mask, &ev));
 }
 
 static void
@@ -53,6 +51,7 @@ buttonpress(XEvent *e)
 	Client *c;
 
 	if((c = getclient(ev->window))) {
+		craise(c);
 		switch(ev->button) {
 		default:
 			break;
@@ -60,7 +59,7 @@ buttonpress(XEvent *e)
 			mmove(c);
 			break;
 		case Button2:
-			XLowerWindow(dpy, c->win);
+			lower(c);
 			break;
 		case Button3:
 			mresize(c);
@@ -78,6 +77,7 @@ configurerequest(XEvent *e)
 
 	ev->value_mask &= ~CWSibling;
 	if((c = getclient(ev->window))) {
+		gravitate(c, True);
 		if(ev->value_mask & CWX)
 			c->x = ev->x;
 		if(ev->value_mask & CWY)
@@ -86,6 +86,10 @@ configurerequest(XEvent *e)
 			c->w = ev->width;
 		if(ev->value_mask & CWHeight)
 			c->h = ev->height;
+		if(ev->value_mask & CWBorderWidth)
+			c->border = ev->border_width;
+		gravitate(c, False);
+		resize(c, True);
 	}
 
 	wc.x = ev->x;
@@ -122,10 +126,8 @@ enternotify(XEvent *e)
 
 	if((c = getclient(ev->window)))
 		focus(c);
-	else if(ev->window == root) {
-		sel_screen = True;
-		/*draw_frames();*/
-	}
+	else if(ev->window == root)
+		issel = True;
 }
 
 static void
@@ -133,10 +135,8 @@ leavenotify(XEvent *e)
 {
 	XCrossingEvent *ev = &e->xcrossing;
 
-	if((ev->window == root) && !ev->same_screen) {
-		sel_screen = True;
-		/*draw_frames();*/
-	}
+	if((ev->window == root) && !ev->same_screen)
+		issel = True;
 }
 
 static void
@@ -148,8 +148,6 @@ expose(XEvent *e)
 	if(ev->count == 0) {
 		if((c = gettitle(ev->window)))
 			draw_client(c);
-		else if(ev->window == barwin)
-			draw_bar();
 	}
 }
 
@@ -182,32 +180,31 @@ static void
 propertynotify(XEvent *e)
 {
 	XPropertyEvent *ev = &e->xproperty;
+	Window trans;
 	Client *c;
 
 	if(ev->state == PropertyDelete)
 		return; /* ignore */
 
-	if(ev->atom == wm_atom[WMProtocols]) {
-		c->proto = win_proto(c->win);
-		return;
-	}
 	if((c = getclient(ev->window))) {
+		if(ev->atom == wm_atom[WMProtocols]) {
+			c->proto = win_proto(c->win);
+			return;
+		}
 		switch (ev->atom) {
 			default: break;
 			case XA_WM_TRANSIENT_FOR:
-				XGetTransientForHint(dpy, c->win, &c->trans);
+				XGetTransientForHint(dpy, c->win, &trans);
+				if(!c->floating && (c->floating = (trans != 0)))
+					arrange(NULL);
 				break;
-				update_size(c);
 			case XA_WM_NORMAL_HINTS:
 				update_size(c);
 				break;
 		}
 		if(ev->atom == XA_WM_NAME || ev->atom == net_atom[NetWMName]) {
 			update_name(c);
-			if(c == stack)
-				draw_bar();
-			else
-				draw_client(c);
+			draw_client(c);
 		}
 	}
 }