aboutsummaryrefslogtreecommitdiffstats
path: root/xutil.c
diff options
context:
space:
mode:
authorokan2013-12-13 14:40:52 +0000
committerokan2013-12-13 14:40:52 +0000
commit8bf0caccf5ae3af242795fe54cb48ec4b847d0e3 (patch)
tree2f1b843524267a87193b4f21e9b478e5646cbf96 /xutil.c
parent754e61eb263aa34c713a1854a432f4fc979453d7 (diff)
downloadcwm-8bf0caccf5ae3af242795fe54cb48ec4b847d0e3.tar.gz
Add support for XUrgency and matching _NET_WM_STATE_DEMANDS_ATTENTION
ewmh hint; urgencyborder is configurable. The urgency flag will stick, even while on a client in a non-viewable group, until the client receives focus (where the border is reset). Initial diff from Thomas Adam with some changes/enhancements from me.
Diffstat (limited to 'xutil.c')
-rw-r--r--xutil.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/xutil.c b/xutil.c
index 439d7ae..3033463 100644
--- a/xutil.c
+++ b/xutil.c
@@ -15,7 +15,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * $OpenBSD: xutil.c,v 1.79 2013/12/11 14:16:10 okan Exp $
+ * $OpenBSD: xutil.c,v 1.80 2013/12/13 14:40:52 okan Exp $
*/
#include <sys/param.h>
@@ -333,6 +333,9 @@ xu_ewmh_handle_net_wm_state_msg(struct client_ctx *cc, int action,
{ _NET_WM_STATE_MAXIMIZED_HORZ,
CLIENT_HMAXIMIZED,
client_hmaximize },
+ { _NET_WM_STATE_DEMANDS_ATTENTION,
+ CLIENT_URGENCY,
+ client_urgency },
};
for (i = 0; i < nitems(handlers); i++) {
@@ -366,6 +369,8 @@ xu_ewmh_restore_net_wm_state(struct client_ctx *cc)
client_hmaximize(cc);
if (atoms[i] == ewmh[_NET_WM_STATE_MAXIMIZED_VERT])
client_vmaximize(cc);
+ if (atoms[i] == ewmh[_NET_WM_STATE_DEMANDS_ATTENTION])
+ client_urgency(cc);
}
free(atoms);
}
@@ -380,7 +385,8 @@ xu_ewmh_set_net_wm_state(struct client_ctx *cc)
atoms = xcalloc((n + _NET_WM_STATES_NITEMS), sizeof(Atom));
for (i = j = 0; i < n; i++) {
if (oatoms[i] != ewmh[_NET_WM_STATE_MAXIMIZED_HORZ] &&
- oatoms[i] != ewmh[_NET_WM_STATE_MAXIMIZED_VERT])
+ oatoms[i] != ewmh[_NET_WM_STATE_MAXIMIZED_VERT] &&
+ oatoms[i] != ewmh[_NET_WM_STATE_DEMANDS_ATTENTION])
atoms[j++] = oatoms[i];
}
free(oatoms);
@@ -388,6 +394,8 @@ xu_ewmh_set_net_wm_state(struct client_ctx *cc)
atoms[j++] = ewmh[_NET_WM_STATE_MAXIMIZED_HORZ];
if (cc->flags & CLIENT_VMAXIMIZED)
atoms[j++] = ewmh[_NET_WM_STATE_MAXIMIZED_VERT];
+ if (cc->flags & CLIENT_URGENCY)
+ atoms[j++] = ewmh[_NET_WM_STATE_DEMANDS_ATTENTION];
if (j > 0)
XChangeProperty(X_Dpy, cc->win, ewmh[_NET_WM_STATE],
XA_ATOM, 32, PropModeReplace, (unsigned char *)atoms, j);