dix: Don't track the XKB client versions in the ClientRec
XKB stores some stuff in the ClientRec that, style-wise, should probably be in a client private. vMinor tracks the client's idea of the XKB minor version, but is never read, we can just nuke it. vMajor is only used for a bug-compat workaround for X11R6.0-vintage clients. We're only using though (1<<4) for xkbClientFlags in the protocol, so we can pack that field down to a u8 and store the bug-compat flag there. Signed-off-by: Adam Jackson <ajax@redhat.com> Reviewed-by: Julien Cristau <jcristau@debian.org>
This commit is contained in:
parent
bc5fb8c092
commit
c2c6e9e68a
|
@ -100,10 +100,9 @@ typedef struct _Client {
|
|||
CARD32 req_len; /* length of current request */
|
||||
unsigned int replyBytesRemaining;
|
||||
PrivateRec *devPrivates;
|
||||
unsigned short xkbClientFlags;
|
||||
unsigned short mapNotifyMask;
|
||||
unsigned short newKeyboardNotifyMask;
|
||||
unsigned short vMajor, vMinor;
|
||||
unsigned char xkbClientFlags;
|
||||
KeyCode minKC, maxKC;
|
||||
|
||||
int smart_start_tick;
|
||||
|
|
|
@ -235,7 +235,8 @@ typedef struct _XkbSrvLedInfo {
|
|||
* Settings for xkbClientFlags field (used by DIX)
|
||||
* These flags _must_ not overlap with XkbPCF_*
|
||||
*/
|
||||
#define _XkbClientInitialized (1<<15)
|
||||
#define _XkbClientInitialized (1<<7)
|
||||
#define _XkbClientIsAncient (1<<6)
|
||||
|
||||
#define _XkbWantsDetectableAutoRepeat(c)\
|
||||
((c)->xkbClientFlags&XkbPCF_DetectableAutoRepeatMask)
|
||||
|
|
|
@ -172,8 +172,8 @@ ProcXkbUseExtension(ClientPtr client)
|
|||
|
||||
if ((supported) && (!(client->xkbClientFlags & _XkbClientInitialized))) {
|
||||
client->xkbClientFlags = _XkbClientInitialized;
|
||||
client->vMajor = stuff->wantedMajor;
|
||||
client->vMinor = stuff->wantedMinor;
|
||||
if (stuff->wantedMajor == 0)
|
||||
client->xkbClientFlags |= _XkbClientIsAncient;
|
||||
}
|
||||
else if (xkbDebugFlags & 0x1) {
|
||||
ErrorF
|
||||
|
@ -2388,7 +2388,8 @@ _XkbSetMapChecks(ClientPtr client, DeviceIntPtr dev, xkbSetMapReq * req,
|
|||
|
||||
if ((xkb->min_key_code != req->minKeyCode) ||
|
||||
(xkb->max_key_code != req->maxKeyCode)) {
|
||||
if (client->vMajor != 1) { /* pre 1.0 versions of Xlib have a bug */
|
||||
if (client->xkbClientFlags & _XkbClientIsAncient) {
|
||||
/* pre 1.0 versions of Xlib have a bug */
|
||||
req->minKeyCode = xkb->min_key_code;
|
||||
req->maxKeyCode = xkb->max_key_code;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue