mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2025-12-27 21:00:07 +01:00
dix: Allocate the space for the DCCE when the last SD is removed.
This still doesn't fix reset the MD's classes (a TODO that's been here for ages), but at least we don't segfault anymore when detaching the last SD. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
689be0cb4b
commit
08a3d6928c
1 changed files with 13 additions and 6 deletions
|
|
@ -2569,21 +2569,28 @@ AttachDevice(ClientPtr client, DeviceIntPtr dev, DeviceIntPtr master)
|
|||
if (!it) /* no dev is paired with old master */
|
||||
{
|
||||
/* XXX: reset to defaults */
|
||||
EventList event = { NULL, 0};
|
||||
EventListPtr event = NULL;
|
||||
char* classbuf;
|
||||
int namelen = 0; /* dummy */
|
||||
int len = sizeof(xEvent);
|
||||
deviceClassesChangedEvent *dcce;
|
||||
|
||||
event = InitEventList(1);
|
||||
SizeDeviceInfo(oldmaster, &namelen, &len);
|
||||
SetMinimumEventSize(event, 1, len);
|
||||
|
||||
/* Send event to clients */
|
||||
CreateClassesChangedEvent(&event, oldmaster, oldmaster);
|
||||
dcce = (deviceClassesChangedEvent*)event.event;
|
||||
CreateClassesChangedEvent(event, oldmaster, oldmaster);
|
||||
dcce = (deviceClassesChangedEvent*)event->event;
|
||||
dcce->deviceid = oldmaster->id;
|
||||
dcce->num_classes = 0;
|
||||
classbuf = (char*)&event.event[1];
|
||||
dcce->length = (len - sizeof(xEvent))/4;
|
||||
classbuf = (char*)&event->event[1];
|
||||
CopySwapClasses(NullClient, oldmaster,
|
||||
&dcce->num_classes, &classbuf);
|
||||
SendEventToAllWindows(oldmaster, XI_DeviceClassesChangedMask,
|
||||
event.event, 1);
|
||||
xfree(event.event);
|
||||
event->event, 1);
|
||||
FreeEventList(event, 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue