glx: Only register wire handlers for the events the server supports
This commit is contained in:
@@ -81,7 +81,7 @@ static XEXT_GENERATE_FIND_DISPLAY (DRI2FindDisplay,
|
||||
dri2Info,
|
||||
dri2ExtensionName,
|
||||
&dri2ExtensionHooks,
|
||||
DRI2NumberEvents, NULL)
|
||||
0, NULL)
|
||||
|
||||
static Bool
|
||||
DRI2WireToEvent(Display *dpy, XEvent *event, xEvent *wire)
|
||||
@@ -182,6 +182,7 @@ DRI2QueryVersion(Display * dpy, int *major, int *minor)
|
||||
XExtDisplayInfo *info = DRI2FindDisplay(dpy);
|
||||
xDRI2QueryVersionReply rep;
|
||||
xDRI2QueryVersionReq *req;
|
||||
int i, nevents;
|
||||
|
||||
XextCheckExtension(dpy, info, dri2ExtensionName, False);
|
||||
|
||||
@@ -201,6 +202,24 @@ DRI2QueryVersion(Display * dpy, int *major, int *minor)
|
||||
UnlockDisplay(dpy);
|
||||
SyncHandle();
|
||||
|
||||
switch (rep.minorVersion) {
|
||||
case 1:
|
||||
nevents = 0;
|
||||
break;
|
||||
case 2:
|
||||
nevents = 1;
|
||||
break;
|
||||
case 3:
|
||||
default:
|
||||
nevents = 2;
|
||||
break;
|
||||
}
|
||||
|
||||
for (i = 0; i < nevents; i++) {
|
||||
XESetWireToEvent (dpy, info->codes->first_event + i, DRI2WireToEvent);
|
||||
XESetEventToWire (dpy, info->codes->first_event + i, DRI2EventToWire);
|
||||
}
|
||||
|
||||
return True;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user