aboutsummaryrefslogtreecommitdiffstats
path: root/client.c
diff options
context:
space:
mode:
authorokan2013-05-19 17:02:04 +0000
committerokan2013-05-19 17:02:04 +0000
commit905535649273a456101caa2811abfed2c65774eb (patch)
treecb1436ccd6f2b96baebacb5750ac2d5e1762e5ae /client.c
parent77a164a48574c8ebaf00e3f96cf203f982e60b67 (diff)
downloadcwm-905535649273a456101caa2811abfed2c65774eb.tar.gz
use XGetWMProtocols and simplify WM_PROTOCOL handling
Diffstat (limited to '')
-rw-r--r--client.c35
1 files changed, 16 insertions, 19 deletions
diff --git a/client.c b/client.c
index e71e22b..147f392 100644
--- a/client.c
+++ b/client.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: client.c,v 1.129 2013/05/11 22:01:07 okan Exp $
+ * $OpenBSD: client.c,v 1.130 2013/05/19 17:02:04 okan Exp $
*/
#include <sys/param.h>
@@ -36,7 +36,7 @@ static struct client_ctx *client_mruprev(struct client_ctx *);
static void client_mtf(struct client_ctx *);
static void client_none(struct screen_ctx *);
static void client_placecalc(struct client_ctx *);
-static void client_update(struct client_ctx *);
+static void client_wm_protocols(struct client_ctx *);
static void client_getmwmhints(struct client_ctx *);
static int client_inbound(struct client_ctx *, int, int);
@@ -132,7 +132,7 @@ client_init(Window win, struct screen_ctx *sc, int mapped)
xu_ewmh_net_client_list(sc);
- client_update(cc);
+ client_wm_protocols(cc);
if (mapped)
group_autogroup(cc);
@@ -497,29 +497,26 @@ client_draw_border(struct client_ctx *cc)
}
static void
-client_update(struct client_ctx *cc)
+client_wm_protocols(struct client_ctx *cc)
{
Atom *p;
- int i;
- long n;
-
- if ((n = xu_getprop(cc->win, cwmh[WM_PROTOCOLS].atom,
- XA_ATOM, 20L, (u_char **)&p)) <= 0)
- return;
-
- for (i = 0; i < n; i++)
- if (p[i] == cwmh[WM_DELETE_WINDOW].atom)
- cc->xproto |= CLIENT_PROTO_DELETE;
- else if (p[i] == cwmh[WM_TAKE_FOCUS].atom)
- cc->xproto |= CLIENT_PROTO_TAKEFOCUS;
-
- XFree(p);
+ int i, j;
+
+ if (XGetWMProtocols(X_Dpy, cc->win, &p, &j)) {
+ for (i = 0; i < j; i++) {
+ if (p[i] == cwmh[WM_DELETE_WINDOW].atom)
+ cc->xproto |= _WM_DELETE_WINDOW;
+ else if (p[i] == cwmh[WM_TAKE_FOCUS].atom)
+ cc->xproto |= _WM_TAKE_FOCUS;
+ }
+ XFree(p);
+ }
}
void
client_send_delete(struct client_ctx *cc)
{
- if (cc->xproto & CLIENT_PROTO_DELETE)
+ if (cc->xproto & _WM_DELETE_WINDOW)
xu_sendmsg(cc->win,
cwmh[WM_PROTOCOLS].atom, cwmh[WM_DELETE_WINDOW].atom);
else