about summary refs log tree commit diff
diff options
context:
space:
mode:
authorokan <okan>2013-12-11 15:41:11 +0000
committerokan <okan>2013-12-11 15:41:11 +0000
commit7e0749b0b1e62f490f37aeb65302cd38b1fb52be (patch)
treefa75c29cd62866b96ffb123d2f4ce2a34bc9ce8c
parent0d9b1becff4661134895780e4d610521582dc288 (diff)
downloadcwm-7e0749b0b1e62f490f37aeb65302cd38b1fb52be.tar.gz
cwm-7e0749b0b1e62f490f37aeb65302cd38b1fb52be.tar.xz
cwm-7e0749b0b1e62f490f37aeb65302cd38b1fb52be.zip
Add client wrapper for XWMHints to support XA_WM_HINTS in PropertyNotify
events; based off a diff from Thomas Adam.
-rw-r--r--calmwm.h1
-rw-r--r--client.c18
-rw-r--r--xevents.c3
3 files changed, 15 insertions, 7 deletions
diff --git a/calmwm.h b/calmwm.h
index d2db949..9dfe66a 100644
--- a/calmwm.h
+++ b/calmwm.h
@@ -398,6 +398,7 @@ void			 client_unhide(struct client_ctx *);
 void			 client_vmaximize(struct client_ctx *);
 void 			 client_vtile(struct client_ctx *);
 void			 client_warp(struct client_ctx *);
+void			 client_wm_hints(struct client_ctx *);
 
 void			 group_alltoggle(struct screen_ctx *);
 void			 group_autogroup(struct client_ctx *);
diff --git a/client.c b/client.c
index 6cbd0d5..51162aa 100644
--- a/client.c
+++ b/client.c
@@ -77,7 +77,7 @@ client_init(Window win, struct screen_ctx *sc, int mapped)
 	conf_client(cc);
 
 	XGetClassHint(X_Dpy, cc->win, &cc->ch);
-	cc->wmh = XGetWMHints(X_Dpy, cc->win);
+	client_wm_hints(cc);
 	client_getmwmhints(cc);
 	client_wm_protocols(cc);
 	client_getsizehints(cc);
@@ -93,12 +93,6 @@ client_init(Window win, struct screen_ctx *sc, int mapped)
 	cc->geom.h = wattr.height;
 	cc->colormap = wattr.colormap;
 
-	if (cc->wmh != NULL) {
-		if (cc->wmh->flags & InputHint) {
-			if (cc->wmh->input == 1)
-				cc->flags |= CLIENT_INPUT;
-		}
-	}
 	if (wattr.map_state != IsViewable) {
 		client_placecalc(cc);
 		client_move(cc);
@@ -510,6 +504,16 @@ client_wm_protocols(struct client_ctx *cc)
 }
 
 void
+client_wm_hints(struct client_ctx *cc)
+{
+	if ((cc->wmh = XGetWMHints(X_Dpy, cc->win)) == NULL)
+		return;
+
+	if ((cc->wmh->flags & InputHint) && (cc->wmh->input))
+		cc->flags |= CLIENT_INPUT;
+}
+
+void
 client_msg(struct client_ctx *cc, Atom proto)
 {
 	XClientMessageEvent	 cm;
diff --git a/xevents.c b/xevents.c
index e2d8b67..60944d7 100644
--- a/xevents.c
+++ b/xevents.c
@@ -186,6 +186,9 @@ xev_handle_propertynotify(XEvent *ee)
 		case XA_WM_NAME:
 			client_setname(cc);
 			break;
+		case XA_WM_HINTS:
+			client_wm_hints(cc);
+			break;
 		case XA_WM_TRANSIENT_FOR:
 			client_transient(cc);
 			break;