diff --git a/xfixes/xfixes.c b/xfixes/xfixes.c index 4ea9171d9..3ba7314a7 100644 --- a/xfixes/xfixes.c +++ b/xfixes/xfixes.c @@ -61,6 +61,7 @@ static DevPrivateKeyRec XFixesClientPrivateKeyRec; static int ProcXFixesQueryVersion(ClientPtr client) { + int major, minor; XFixesClientPtr pXFixesClient = GetXFixesClient(client); xXFixesQueryVersionReply rep = { .type = X_Reply, @@ -75,16 +76,17 @@ ProcXFixesQueryVersion(ClientPtr client) if (version_compare(stuff->majorVersion, stuff->minorVersion, SERVER_XFIXES_MAJOR_VERSION, SERVER_XFIXES_MINOR_VERSION) < 0) { - rep.majorVersion = stuff->majorVersion; - rep.minorVersion = stuff->minorVersion; + major = max(pXFixesClient->major_version, stuff->majorVersion); + minor = stuff->minorVersion; } else { - rep.majorVersion = SERVER_XFIXES_MAJOR_VERSION; - rep.minorVersion = SERVER_XFIXES_MINOR_VERSION; + major = SERVER_XFIXES_MAJOR_VERSION; + minor = SERVER_XFIXES_MINOR_VERSION; } - pXFixesClient->major_version = rep.majorVersion; - pXFixesClient->minor_version = rep.minorVersion; + pXFixesClient->major_version = major; + rep.majorVersion = min(stuff->majorVersion, major); + rep.minorVersion = minor; if (client->swapped) { swaps(&rep.sequenceNumber); swapl(&rep.length); diff --git a/xfixes/xfixesint.h b/xfixes/xfixesint.h index f597354a0..cf9a8f9bd 100644 --- a/xfixes/xfixesint.h +++ b/xfixes/xfixesint.h @@ -64,7 +64,6 @@ extern int XFixesEventBase; typedef struct _XFixesClient { CARD32 major_version; - CARD32 minor_version; } XFixesClientRec, *XFixesClientPtr; #define GetXFixesClient(pClient) ((XFixesClientPtr)dixLookupPrivate(&(pClient)->devPrivates, XFixesClientPrivateKey))