dri2: Track event mask in client code.
When direct rendering is being used, DRI2 BufferSwapComplete events are sent unconditionally to clients, even if they haven't been requested. This causes error messages to be printed by every freeglut application of the form freeglut (./gears): Unknown X event type: 104 and might confuse other clients. This is a fixed up version of the patch by Jesse Barnes, which drops BufferSwapComplete events if they are not requested by clients. Fixes fdo bug 27962. Signed-off-by: Nick Bowler <nbowler@draconx.ca> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
This commit is contained in:

committed by
Jesse Barnes

parent
467928c6e0
commit
f8d81c31ce
@@ -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;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user