(mostly) proper xshape event support

ok oga@
This commit is contained in:
okan 2008-06-14 22:04:11 +00:00
parent a880cefb2e
commit b3cbe6ba11
4 changed files with 22 additions and 11 deletions

View File

@ -15,7 +15,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
* *
* $Id: calmwm.h,v 1.52 2008/06/14 21:48:54 okan Exp $ * $Id: calmwm.h,v 1.53 2008/06/14 22:04:11 okan Exp $
*/ */
#ifndef _CALMWM_H_ #ifndef _CALMWM_H_
@ -384,6 +384,7 @@ void xev_handle_keypress(struct xevent *, XEvent *);
void xev_handle_keyrelease(struct xevent *, XEvent *); void xev_handle_keyrelease(struct xevent *, XEvent *);
void xev_handle_expose(struct xevent *, XEvent *); void xev_handle_expose(struct xevent *, XEvent *);
void xev_handle_clientmessage(struct xevent *, XEvent *); void xev_handle_clientmessage(struct xevent *, XEvent *);
void xev_handle_shape(struct xevent *, XEvent *);
#define XEV_QUICK(a, b, c, d, e) do { \ #define XEV_QUICK(a, b, c, d, e) do { \
xev_register(xev_new(a, b, c, d, e)); \ xev_register(xev_new(a, b, c, d, e)); \

View File

@ -15,7 +15,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
* *
* $Id: client.c,v 1.29 2008/06/12 04:59:51 okan Exp $ * $Id: client.c,v 1.30 2008/06/14 22:04:11 okan Exp $
*/ */
#include "headers.h" #include "headers.h"
@ -140,7 +140,6 @@ client_new(Window win, struct screen_ctx *sc, int mapped)
CWOverrideRedirect | CWBackPixel | CWEventMask, &pxattr); CWOverrideRedirect | CWBackPixel | CWEventMask, &pxattr);
cc->active = 0; cc->active = 0;
client_draw_border(cc);
XAddToSaveSet(X_Dpy, cc->win); XAddToSaveSet(X_Dpy, cc->win);
XSetWindowBorderWidth(X_Dpy, cc->win, 0); XSetWindowBorderWidth(X_Dpy, cc->win, 0);
@ -463,8 +462,6 @@ client_draw_border(struct client_ctx *cc)
XClearWindow(X_Dpy, cc->pwin); XClearWindow(X_Dpy, cc->pwin);
} }
client_do_shape(cc);
} }
u_long u_long

View File

@ -15,7 +15,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
* *
* $Id: grab.c,v 1.17 2008/06/12 18:55:35 okan Exp $ * $Id: grab.c,v 1.18 2008/06/14 22:04:11 okan Exp $
*/ */
#include "headers.h" #include "headers.h"
@ -94,6 +94,7 @@ grab_sweep(struct client_ctx *cc)
cc->bwidth, cc->bwidth, cc->bwidth, cc->bwidth,
cc->geom.width, cc->geom.height); cc->geom.width, cc->geom.height);
client_do_shape(cc);
break; break;
case ButtonRelease: case ButtonRelease:
XUnmapWindow(X_Dpy, sc->menuwin); XUnmapWindow(X_Dpy, sc->menuwin);
@ -107,7 +108,6 @@ grab_sweep(struct client_ctx *cc)
cc->ptr.y = cc->geom.height - cc->bwidth; cc->ptr.y = cc->geom.height - cc->bwidth;
client_ptrwarp(cc); client_ptrwarp(cc);
client_do_shape(cc);
return; return;
} }
} }

View File

@ -15,7 +15,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
* *
* $Id: xevents.c,v 1.19 2008/06/14 21:48:54 okan Exp $ * $Id: xevents.c,v 1.20 2008/06/14 22:04:11 okan Exp $
*/ */
/* /*
@ -260,7 +260,6 @@ xev_handle_buttonrelease(struct xevent *xev, XEvent *ee)
group_sticky_toggle_exit(cc); group_sticky_toggle_exit(cc);
xev_register(xev); xev_register(xev);
} }
void void
@ -354,6 +353,16 @@ out:
xev_register(xev); 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 * X Event handling
*/ */
@ -411,8 +420,10 @@ xev_handle_expose(struct xevent *xev, XEvent *ee)
XExposeEvent *e = &ee->xexpose; XExposeEvent *e = &ee->xexpose;
struct client_ctx *cc; 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_draw_border(cc);
client_do_shape(cc);
}
xev_register(xev); xev_register(xev);
} }
@ -478,7 +489,9 @@ xev_loop(void)
case ClientMessage: case ClientMessage:
ASSIGN1(xclient); ASSIGN1(xclient);
break; break;
default: /* XXX - still need shape event support. */ default:
if (e.type == Shape_ev)
xev_handle_shape(xev, &e);
break; break;
} }