diff --git a/src/glx/dri2.c b/src/glx/dri2.c index e4ff538..dbf3420 100644 --- a/src/glx/dri2.c +++ b/src/glx/dri2.c @@ -99,6 +99,12 @@ DRI2WireToEvent(Display *dpy, XEvent *event, xEvent *wire) { GLXBufferSwapComplete *aevent = (GLXBufferSwapComplete *)event; xDRI2BufferSwapComplete *awire = (xDRI2BufferSwapComplete *)wire; + __GLXDRIdrawable *pdraw = GetGLXDRIDrawable(dpy, awire->drawable, NULL); + + /* Ignore swap events if we're not looking for them */ + if (!(pdraw->eventMask & GLX_BUFFER_SWAP_COMPLETE_INTEL_MASK)) + return False; + aevent->serial = _XSetLastRequestRead(dpy, (xGenericReply *) wire); aevent->type = glx_info->codes->first_event + GLX_BufferSwapComplete; aevent->send_event = (awire->type & 0x80) != 0; diff --git a/src/glx/glx_pbuffer.c b/src/glx/glx_pbuffer.c index b8d0f21..c081836 100644 --- a/src/glx/glx_pbuffer.c +++ b/src/glx/glx_pbuffer.c @@ -86,8 +86,10 @@ ChangeDrawableAttribute(Display * dpy, GLXDrawable drawable, const CARD32 * attribs, size_t num_attribs) { __GLXdisplayPrivate *priv = __glXInitialize(dpy); + __GLXDRIdrawable *pdraw = GetGLXDRIDrawable(dpy, drawable, NULL); CARD32 *output; CARD8 opcode; + int i; if ((dpy == NULL) || (drawable == 0)) { return; @@ -129,6 +131,15 @@ ChangeDrawableAttribute(Display * dpy, GLXDrawable drawable, UnlockDisplay(dpy); SyncHandle(); + for (i = 0; i < num_attribs; i++) { + switch(attribs[i * 2]) { + case GLX_EVENT_MASK: + /* Keep a local copy for masking out DRI2 proto events as needed */ + pdraw->eventMask = attribs[i * 2 + 1]; + break; + } + } + return; } diff --git a/src/glx/glxclient.h b/src/glx/glxclient.h index b41073f..49f31a1 100644 --- a/src/glx/glxclient.h +++ b/src/glx/glxclient.h @@ -176,6 +176,7 @@ struct __GLXDRIdrawableRec GLenum textureTarget; __DRIdrawable *driDrawable; GLenum textureFormat; /* EXT_texture_from_pixmap support */ + unsigned long eventMask; }; /*