summary refs log tree commit diff
diff options
context:
space:
mode:
authorokan <okan>2013-04-17 13:52:20 +0000
committerokan <okan>2013-04-17 13:52:20 +0000
commit302690624e29eddb506e4a377b59eac029128f3f (patch)
tree59804d704a190ab7f347ff8112dddb25e09f0dfd
parent1dbcc394aed6f7e4161ab065516128fa94bd0149 (diff)
downloadcwm-302690624e29eddb506e4a377b59eac029128f3f.tar.gz
cwm-302690624e29eddb506e4a377b59eac029128f3f.tar.xz
cwm-302690624e29eddb506e4a377b59eac029128f3f.zip
slightly rework WM_STATE set/get to make it less ambigious; will be more clear
on what needs to change to make it right in the end.
-rw-r--r--calmwm.h2
-rw-r--r--client.c18
-rw-r--r--xutil.c5
3 files changed, 14 insertions, 11 deletions
diff --git a/calmwm.h b/calmwm.h
index 5166984..ad8555a 100644
--- a/calmwm.h
+++ b/calmwm.h
@@ -477,7 +477,7 @@ int			 xu_ptr_regrab(int, Cursor);
 void			 xu_ptr_setpos(Window, int, int);
 void			 xu_ptr_ungrab(void);
 void			 xu_sendmsg(Window, Atom, long);
-void			 xu_setstate(struct client_ctx *, int);
+void			 xu_setstate(Window win, int);
 void 			 xu_xorcolor(XRenderColor, XRenderColor,
 			     XRenderColor *);
 
diff --git a/client.c b/client.c
index 932b4bc..01f4347 100644
--- a/client.c
+++ b/client.c
@@ -101,13 +101,14 @@ client_new(Window win, struct screen_ctx *sc, int mapped)
 
 	if (wattr.map_state != IsViewable) {
 		client_placecalc(cc);
+		client_move(cc);
 		if ((wmhints = XGetWMHints(X_Dpy, cc->win)) != NULL) {
-			if (wmhints->flags & StateHint)
-				xu_setstate(cc, wmhints->initial_state);
-
+			if (wmhints->flags & StateHint) {
+				cc->state = wmhints->initial_state;
+				xu_setstate(cc->win, cc->state);
+			}
 			XFree(wmhints);
 		}
-		client_move(cc);
 	}
 	client_draw_border(cc);
 
@@ -151,7 +152,8 @@ client_delete(struct client_ctx *cc)
 	group_client_delete(cc);
 
 	XGrabServer(X_Dpy);
-	xu_setstate(cc, WithdrawnState);
+	cc->state = WithdrawnState;
+	xu_setstate(cc->win, cc->state);
 	XRemoveFromSaveSet(X_Dpy, cc->win);
 
 	XSync(X_Dpy, False);
@@ -451,7 +453,8 @@ client_hide(struct client_ctx *cc)
 
 	cc->active = 0;
 	cc->flags |= CLIENT_HIDDEN;
-	xu_setstate(cc, IconicState);
+	cc->state = IconicState;
+	xu_setstate(cc->win, cc->state);
 
 	if (cc == client_current())
 		client_none(cc->sc);
@@ -463,7 +466,8 @@ client_unhide(struct client_ctx *cc)
 	XMapRaised(X_Dpy, cc->win);
 
 	cc->flags &= ~CLIENT_HIDDEN;
-	xu_setstate(cc, NormalState);
+	cc->state = NormalState;
+	xu_setstate(cc->win, cc->state);
 	client_draw_border(cc);
 }
 
diff --git a/xutil.c b/xutil.c
index a663150..8a22e21 100644
--- a/xutil.c
+++ b/xutil.c
@@ -218,15 +218,14 @@ xu_getstate(Window win, int *state)
 }
 
 void
-xu_setstate(struct client_ctx *cc, int state)
+xu_setstate(Window win, int state)
 {
 	long	 dat[2];
 
 	dat[0] = state;
 	dat[1] = None;
 
-	cc->state = state;
-	XChangeProperty(X_Dpy, cc->win,
+	XChangeProperty(X_Dpy, win,
 	    cwmh[WM_STATE].atom, cwmh[WM_STATE].atom, 32,
 	    PropModeReplace, (unsigned char *)dat, 2);
 }