X-Git-Url: https://git.xinqibao.xyz/dwm.git/blobdiff_plain/39ed54a468f339535f82cce2c0a79b92e74a7c09..317137149804c759e14a9e7d4704ac89262bd4e6:/event.c?ds=inline

diff --git a/event.c b/event.c
index db3ce46..540aeb6 100644
--- a/event.c
+++ b/event.c
@@ -11,7 +11,7 @@
 typedef struct {
 	unsigned long mod;
 	KeySym keysym;
-	void (*func)(Arg *arg);
+	void (*func)(Arg arg);
 	Arg arg;
 } Key;
 
@@ -20,6 +20,14 @@ KEYS
 #define CLEANMASK(mask) (mask & ~(numlockmask | LockMask))
 #define MOUSEMASK		(BUTTONMASK | PointerMotionMask)
 
+static Client *
+getclient(Window w) {
+	Client *c;
+
+	for(c = clients; c && c->win != w; c = c->next);
+	return c;
+}
+
 static void
 movemouse(Client *c) {
 	int x1, y1, ocx, ocy, di, nx, ny;
@@ -116,31 +124,32 @@ buttonpress(XEvent *e) {
 			if(ev->x < x) {
 				if(ev->button == Button1) {
 					if(ev->state & MODKEY)
-						tag(&a);
+						tag(a);
 					else
-						view(&a);
+						view(a);
 				}
 				else if(ev->button == Button3) {
 					if(ev->state & MODKEY)
-						toggletag(&a);
+						toggletag(a);
 					else
-						toggleview(&a);
+						toggleview(a);
 				}
 				return;
 			}
 		}
-		if(ev->x < x + bmw)
+		if(ev->x < x + blw)
 			switch(ev->button) {
 			case Button1:
-				togglemode(NULL);
+				a.i = -1;
+				setlayout(a);
 				break;
 			case Button4:
 				a.i = 1;
-				incnmaster(&a);
+				incnmaster(a);
 				break;
 			case Button5:
 				a.i = -1;
-				incnmaster(&a);
+				incnmaster(a);
 				break;
 			}
 	}
@@ -148,14 +157,14 @@ buttonpress(XEvent *e) {
 		focus(c);
 		if(CLEANMASK(ev->state) != MODKEY)
 			return;
-		if(ev->button == Button1 && (arrange == dofloat || c->isfloat)) {
+		if(ev->button == Button1 && (lt->arrange == versatile || c->isversatile)) {
 			restack();
 			movemouse(c);
 		}
 		else if(ev->button == Button2)
-			zoom(NULL);
+			zoom(a);
 		else if(ev->button == Button3
-		&& (arrange == dofloat || c->isfloat) && !c->isfixed)
+		&& (lt->arrange == versatile || c->isversatile) && !c->isfixed)
 		{
 			restack();
 			resizemouse(c);
@@ -173,7 +182,7 @@ configurerequest(XEvent *e) {
 		c->ismax = False;
 		if(ev->value_mask & CWBorderWidth)
 			c->border = ev->border_width;
-		if(c->isfixed || c->isfloat || (arrange == dofloat)) {
+		if(c->isfixed || c->isversatile || (lt->arrange == versatile)) {
 			if(ev->value_mask & CWX)
 				c->x = ev->x;
 			if(ev->value_mask & CWY)
@@ -252,7 +261,7 @@ keypress(XEvent *e) {
 		&& CLEANMASK(key[i].mod) == CLEANMASK(ev->state))
 		{
 			if(key[i].func)
-				key[i].func(&key[i].arg);
+				key[i].func(key[i].arg);
 		}
 }
 
@@ -301,8 +310,8 @@ propertynotify(XEvent *e) {
 			default: break;
 			case XA_WM_TRANSIENT_FOR:
 				XGetTransientForHint(dpy, c->win, &trans);
-				if(!c->isfloat && (c->isfloat = (trans != 0)))
-					arrange();
+				if(!c->isversatile && (c->isversatile = (getclient(trans) != NULL)))
+					lt->arrange();
 				break;
 			case XA_WM_NORMAL_HINTS:
 				updatesizehints(c);
@@ -360,14 +369,3 @@ grabkeys(void) {
 				GrabModeAsync, GrabModeAsync);
 	}
 }
-
-void
-procevent(void) {
-	XEvent ev;
-
-	while(XPending(dpy)) {
-		XNextEvent(dpy, &ev);
-		if(handler[ev.type])
-			(handler[ev.type])(&ev); /* call handler */
-	}
-}