From 976a0161becef40cda31090ffd17a12442905b0c Mon Sep 17 00:00:00 2001 From: okan Date: Tue, 21 May 2013 00:29:20 +0000 Subject: handle _NET_WM_STATE ClientMessage; from Alexander Polakov. --- xutil.c | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) (limited to 'xutil.c') diff --git a/xutil.c b/xutil.c index 7273702..7872ee9 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.65 2013/05/20 21:13:58 okan Exp $ + * $OpenBSD: xutil.c,v 1.66 2013/05/21 00:29:20 okan Exp $ */ #include @@ -439,6 +439,43 @@ xu_ewmh_get_net_wm_state(struct client_ctx *cc, int *n) return (state); } +void +xu_ewmh_handle_net_wm_state_msg(struct client_ctx *cc, int action, + Atom first, Atom second) +{ + int i; + static struct handlers { + int atom; + int property; + void (*toggle)(struct client_ctx *); + } handlers[] = { + { _NET_WM_STATE_MAXIMIZED_VERT, + CLIENT_VMAXIMIZED, + client_vmaximize }, + { _NET_WM_STATE_MAXIMIZED_HORZ, + CLIENT_HMAXIMIZED, + client_hmaximize }, + }; + + for (i = 0; i < nitems(handlers); i++) { + if (first != ewmh[handlers[i].atom].atom && + second != ewmh[handlers[i].atom].atom) + continue; + switch (action) { + case _NET_WM_STATE_ADD: + if ((cc->flags & handlers[i].property) == 0) + handlers[i].toggle(cc); + break; + case _NET_WM_STATE_REMOVE: + if (cc->flags & handlers[i].property) + handlers[i].toggle(cc); + break; + case _NET_WM_STATE_TOGGLE: + handlers[i].toggle(cc); + } + } +} + void xu_ewmh_restore_net_wm_state(struct client_ctx *cc) { -- cgit v1.2.3-2-gb3c3