summary refs log tree commit diff
path: root/xutil.c
diff options
context:
space:
mode:
authorokan <okan>2015-08-21 16:30:02 +0000
committerokan <okan>2015-08-21 16:30:02 +0000
commit1d31f9000cabc965f478991c4ad11c43f163c30f (patch)
tree768fdfb6f6999e16d3de4a908570156aff4476cb /xutil.c
parent05478f061e0b934a0d7d729f0e8ea5755b167487 (diff)
downloadcwm-1d31f9000cabc965f478991c4ad11c43f163c30f.tar.gz
cwm-1d31f9000cabc965f478991c4ad11c43f163c30f.tar.xz
cwm-1d31f9000cabc965f478991c4ad11c43f163c30f.zip
Add client freeze extension to _NET_WM_STATE Atom, allowing flag to
persist. As usual with new Atoms, requires X restart.
Diffstat (limited to 'xutil.c')
-rw-r--r--xutil.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/xutil.c b/xutil.c
index c6248c4..51e3fec 100644
--- a/xutil.c
+++ b/xutil.c
@@ -374,6 +374,9 @@ xu_ewmh_handle_net_wm_state_msg(struct client_ctx *cc, int action,
 		int property;
 		void (*toggle)(struct client_ctx *);
 	} handlers[] = {
+		{ _CWM_WM_STATE_FREEZE,
+			CLIENT_FREEZE,
+			client_toggle_freeze },
 		{ _NET_WM_STATE_STICKY,
 			CLIENT_STICKY,
 			client_toggle_sticky },
@@ -421,6 +424,8 @@ xu_ewmh_restore_net_wm_state(struct client_ctx *cc)
 
 	atoms = xu_ewmh_get_net_wm_state(cc, &n);
 	for (i = 0; i < n; i++) {
+		if (atoms[i] == ewmh[_CWM_WM_STATE_FREEZE])
+			client_toggle_freeze(cc);
 		if (atoms[i] == ewmh[_NET_WM_STATE_STICKY])
 			client_toggle_sticky(cc);
 		if (atoms[i] == ewmh[_NET_WM_STATE_MAXIMIZED_HORZ])
@@ -446,7 +451,8 @@ xu_ewmh_set_net_wm_state(struct client_ctx *cc)
 	oatoms = xu_ewmh_get_net_wm_state(cc, &n);
 	atoms = xreallocarray(NULL, (n + _NET_WM_STATES_NITEMS), sizeof(Atom));
 	for (i = j = 0; i < n; i++) {
-		if (oatoms[i] != ewmh[_NET_WM_STATE_STICKY] &&
+		if (oatoms[i] != ewmh[_CWM_WM_STATE_FREEZE] &&
+		    oatoms[i] != ewmh[_NET_WM_STATE_STICKY] &&
 		    oatoms[i] != ewmh[_NET_WM_STATE_MAXIMIZED_HORZ] &&
 		    oatoms[i] != ewmh[_NET_WM_STATE_MAXIMIZED_VERT] &&
 		    oatoms[i] != ewmh[_NET_WM_STATE_HIDDEN] &&
@@ -455,6 +461,8 @@ xu_ewmh_set_net_wm_state(struct client_ctx *cc)
 			atoms[j++] = oatoms[i];
 	}
 	free(oatoms);
+	if (cc->flags & CLIENT_FREEZE)
+		atoms[j++] = ewmh[_CWM_WM_STATE_FREEZE];
 	if (cc->flags & CLIENT_STICKY)
 		atoms[j++] = ewmh[_NET_WM_STATE_STICKY];
 	if (cc->flags & CLIENT_HIDDEN)