about summary refs log tree commit diff
path: root/client.c
diff options
context:
space:
mode:
authorokan <okan>2013-06-20 02:33:57 +0000
committerokan <okan>2013-06-20 02:33:57 +0000
commit9a12ca3520e1f8d5673755d0dbe73e9d94bdbc79 (patch)
tree1f679799de165046b7704886b55cde893eff0cc1 /client.c
parentc30653b1c34cff7ca527e15918595e8bea6941c3 (diff)
parent7004700ce0b216f4ea4bb84043acb311928c9a6d (diff)
downloadcwm-9a12ca3520e1f8d5673755d0dbe73e9d94bdbc79.tar.gz
cwm-9a12ca3520e1f8d5673755d0dbe73e9d94bdbc79.tar.xz
cwm-9a12ca3520e1f8d5673755d0dbe73e9d94bdbc79.zip
cvsimport
Diffstat (limited to 'client.c')
-rw-r--r--client.c45
1 files changed, 40 insertions, 5 deletions
diff --git a/client.c b/client.c
index cfa253b..da943ea 100644
--- a/client.c
+++ b/client.c
@@ -123,7 +123,7 @@ client_init(Window win, struct screen_ctx *sc, int mapped)
 	client_transient(cc);
 
 	/* Notify client of its configuration. */
-	xu_configure(cc);
+	client_config(cc);
 
 	(state == IconicState) ? client_hide(cc) : client_unhide(cc);
 
@@ -400,14 +400,14 @@ client_resize(struct client_ctx *cc, int reset)
 
 	XMoveResizeWindow(X_Dpy, cc->win, cc->geom.x,
 	    cc->geom.y, cc->geom.w, cc->geom.h);
-	xu_configure(cc);
+	client_config(cc);
 }
 
 void
 client_move(struct client_ctx *cc)
 {
 	XMoveWindow(X_Dpy, cc->win, cc->geom.x, cc->geom.y);
-	xu_configure(cc);
+	client_config(cc);
 }
 
 void
@@ -423,6 +423,26 @@ client_raise(struct client_ctx *cc)
 }
 
 void
+client_config(struct client_ctx *cc)
+{
+	XConfigureEvent	 cn;
+
+	bzero(&cn, sizeof(cn));
+	cn.type = ConfigureNotify;
+	cn.event = cc->win;
+	cn.window = cc->win;
+	cn.x = cc->geom.x;
+	cn.y = cc->geom.y;
+	cn.width = cc->geom.w;
+	cn.height = cc->geom.h;
+	cn.border_width = cc->bwidth;
+	cn.above = None;
+	cn.override_redirect = 0;
+
+	XSendEvent(X_Dpy, cc->win, False, StructureNotifyMask, (XEvent *)&cn);
+}
+
+void
 client_ptrwarp(struct client_ctx *cc)
 {
 	int	 x = cc->ptr.x, y = cc->ptr.y;
@@ -519,11 +539,26 @@ client_wm_protocols(struct client_ctx *cc)
 }
 
 void
+client_msg(struct client_ctx *cc, Atom proto)
+{
+	XClientMessageEvent	 cm;
+
+	bzero(&cm, sizeof(cm));
+	cm.type = ClientMessage;
+	cm.window = cc->win;
+	cm.message_type = cwmh[WM_PROTOCOLS].atom;
+	cm.format = 32;
+	cm.data.l[0] = proto;
+	cm.data.l[1] = CurrentTime;
+
+	XSendEvent(X_Dpy, cc->win, False, NoEventMask, (XEvent *)&cm);
+}
+
+void
 client_send_delete(struct client_ctx *cc)
 {
 	if (cc->xproto & _WM_DELETE_WINDOW)
-		xu_sendmsg(cc->win,
-		    cwmh[WM_PROTOCOLS].atom, cwmh[WM_DELETE_WINDOW].atom);
+		client_msg(cc, cwmh[WM_DELETE_WINDOW].atom);
 	else
 		XKillClient(X_Dpy, cc->win);
 }