summary refs log tree commit diff
path: root/xevents.c
diff options
context:
space:
mode:
authorokan <okan>2008-06-14 22:04:11 +0000
committerokan <okan>2008-06-14 22:04:11 +0000
commit96d7310b4a224d50aeb2e5e94031d14b9bd6daf5 (patch)
tree5bbf38a0903b2a911e0feb308eda083d7cdd1486 /xevents.c
parent160228210ba05be788d3537ee64e269882a66aa9 (diff)
downloadcwm-96d7310b4a224d50aeb2e5e94031d14b9bd6daf5.tar.gz
cwm-96d7310b4a224d50aeb2e5e94031d14b9bd6daf5.tar.xz
cwm-96d7310b4a224d50aeb2e5e94031d14b9bd6daf5.zip
(mostly) proper xshape event support
ok oga@
Diffstat (limited to 'xevents.c')
-rw-r--r--xevents.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/xevents.c b/xevents.c
index fed91e6..e70d218 100644
--- a/xevents.c
+++ b/xevents.c
@@ -260,7 +260,6 @@ xev_handle_buttonrelease(struct xevent *xev, XEvent *ee)
 		group_sticky_toggle_exit(cc);
 
 	xev_register(xev);
-
 }
 
 void
@@ -354,6 +353,16 @@ out:
 	xev_register(xev);
 }
 
+void
+xev_handle_shape(struct xevent *xev, XEvent *ee)
+{
+	XShapeEvent *sev = (XShapeEvent *) ee;
+	struct client_ctx *cc;
+
+	if ((cc = client_find(sev->window)) != NULL)
+		client_do_shape(cc);
+}
+
 /*
  * X Event handling
  */
@@ -411,8 +420,10 @@ xev_handle_expose(struct xevent *xev, XEvent *ee)
 	XExposeEvent *e = &ee->xexpose;
 	struct client_ctx *cc;
 
-	if ((cc = client_find(e->window)) != NULL && e->count == 0)
+	if ((cc = client_find(e->window)) != NULL && e->count == 0) {
 		client_draw_border(cc);
+		client_do_shape(cc);
+	}
 
 	xev_register(xev);
 }
@@ -478,7 +489,9 @@ xev_loop(void)
 		case ClientMessage:
 			ASSIGN1(xclient);
 			break;
-		default:	/* XXX - still need shape event support. */
+		default:
+			if (e.type == Shape_ev)
+				xev_handle_shape(xev, &e);
 			break;
 		}