enable adding devices after removal of a middle device
Allow new devices to be added after a device that _wasn't_ the last on the list was removed, by ensuring inputInfo.numDevices always increases, and never decreases.
This commit is contained in:
parent
a31d11a7a8
commit
458c63a841
11
Xi/listdev.c
11
Xi/listdev.c
|
@ -96,7 +96,7 @@ int
|
|||
ProcXListInputDevices(register ClientPtr client)
|
||||
{
|
||||
xListInputDevicesReply rep;
|
||||
int numdevs;
|
||||
int numdevs = 0;
|
||||
int namesize = 1; /* need 1 extra byte for strcpy */
|
||||
int size = 0;
|
||||
int total_length;
|
||||
|
@ -115,12 +115,15 @@ ProcXListInputDevices(register ClientPtr client)
|
|||
rep.sequenceNumber = client->sequence;
|
||||
|
||||
AddOtherInputDevices();
|
||||
numdevs = inputInfo.numDevices;
|
||||
|
||||
for (d = inputInfo.devices; d; d = d->next)
|
||||
for (d = inputInfo.devices; d; d = d->next) {
|
||||
SizeDeviceInfo(d, &namesize, &size);
|
||||
for (d = inputInfo.off_devices; d; d = d->next)
|
||||
numdevs++;
|
||||
}
|
||||
for (d = inputInfo.off_devices; d; d = d->next) {
|
||||
SizeDeviceInfo(d, &namesize, &size);
|
||||
numdevs++;
|
||||
}
|
||||
|
||||
total_length = numdevs * sizeof(xDeviceInfo) + size + namesize;
|
||||
devbuf = (char *)xalloc(total_length);
|
||||
|
|
|
@ -536,7 +536,7 @@ RemoveDevice(DeviceIntPtr dev)
|
|||
ErrorF("want to remove device %p, kb is %p, pointer is %p\n", dev, inputInfo.keyboard, inputInfo.pointer);
|
||||
#endif
|
||||
|
||||
if (!dev)
|
||||
if (!dev || dev == inputInfo.keyboard || dev == inputInfo.pointer)
|
||||
return BadImplementation;
|
||||
|
||||
prev = NULL;
|
||||
|
@ -550,13 +550,6 @@ RemoveDevice(DeviceIntPtr dev)
|
|||
else
|
||||
prev->next = next;
|
||||
|
||||
inputInfo.numDevices--;
|
||||
|
||||
if (inputInfo.keyboard == tmp)
|
||||
inputInfo.keyboard = NULL;
|
||||
else if (inputInfo.pointer == tmp)
|
||||
inputInfo.pointer = NULL;
|
||||
|
||||
ret = Success;
|
||||
}
|
||||
}
|
||||
|
@ -572,13 +565,6 @@ RemoveDevice(DeviceIntPtr dev)
|
|||
else
|
||||
prev->next = next;
|
||||
|
||||
inputInfo.numDevices--;
|
||||
|
||||
if (inputInfo.keyboard == tmp)
|
||||
inputInfo.keyboard = NULL;
|
||||
else if (inputInfo.pointer == tmp)
|
||||
inputInfo.pointer = NULL;
|
||||
|
||||
ret = Success;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user