Xi: reset xkb-stuff to NULL after copying (DeepCopyDeviceClasses)
Having two devices point to the same xkb stuff causes SIGABRTs. Also, don't init a MD's xkbInfo unless the SD has an xkbInfo.
This commit is contained in:
parent
1635832c16
commit
18833d648f
|
@ -178,9 +178,9 @@ CopyKeyClass(DeviceIntPtr device, DeviceIntPtr master)
|
||||||
mk->modifierKeyCount[i] = dk->modifierKeyCount[i];
|
mk->modifierKeyCount[i] = dk->modifierKeyCount[i];
|
||||||
|
|
||||||
#ifdef XKB
|
#ifdef XKB
|
||||||
if (!mk->xkbInfo || !mk->xkbInfo->desc)
|
|
||||||
XkbInitDevice(master);
|
|
||||||
if (!noXkbExtension && dk->xkbInfo && dk->xkbInfo->desc) {
|
if (!noXkbExtension && dk->xkbInfo && dk->xkbInfo->desc) {
|
||||||
|
if (!mk->xkbInfo || !mk->xkbInfo->desc)
|
||||||
|
XkbInitDevice(master);
|
||||||
if (!XkbCopyKeymap(dk->xkbInfo->desc, mk->xkbInfo->desc, True))
|
if (!XkbCopyKeymap(dk->xkbInfo->desc, mk->xkbInfo->desc, True))
|
||||||
FatalError("Couldn't pivot keymap from device to core!\n");
|
FatalError("Couldn't pivot keymap from device to core!\n");
|
||||||
}
|
}
|
||||||
|
@ -238,18 +238,36 @@ DeepCopyDeviceClasses(DeviceIntPtr from, DeviceIntPtr to)
|
||||||
}
|
}
|
||||||
|
|
||||||
ALLOC_COPY_CLASS_IF(button, ButtonClassRec);
|
ALLOC_COPY_CLASS_IF(button, ButtonClassRec);
|
||||||
|
#ifdef XKB
|
||||||
|
if (to->button)
|
||||||
|
{
|
||||||
|
to->button->xkb_acts = NULL;
|
||||||
/* XXX: XkbAction needs to be copied */
|
/* XXX: XkbAction needs to be copied */
|
||||||
|
}
|
||||||
|
#endif
|
||||||
ALLOC_COPY_CLASS_IF(focus, FocusClassRec);
|
ALLOC_COPY_CLASS_IF(focus, FocusClassRec);
|
||||||
ALLOC_COPY_CLASS_IF(proximity, ProximityClassRec);
|
ALLOC_COPY_CLASS_IF(proximity, ProximityClassRec);
|
||||||
ALLOC_COPY_CLASS_IF(absolute, AbsoluteClassRec);
|
ALLOC_COPY_CLASS_IF(absolute, AbsoluteClassRec);
|
||||||
ALLOC_COPY_CLASS_IF(kbdfeed, KbdFeedbackClassRec);
|
ALLOC_COPY_CLASS_IF(kbdfeed, KbdFeedbackClassRec);
|
||||||
|
#ifdef XKB
|
||||||
|
if (to->kbdfeed)
|
||||||
|
{
|
||||||
|
to->kbdfeed->xkb_sli = NULL;
|
||||||
/* XXX: XkbSrvLedInfo needs to be copied*/
|
/* XXX: XkbSrvLedInfo needs to be copied*/
|
||||||
|
}
|
||||||
|
#endif
|
||||||
ALLOC_COPY_CLASS_IF(ptrfeed, PtrFeedbackClassRec);
|
ALLOC_COPY_CLASS_IF(ptrfeed, PtrFeedbackClassRec);
|
||||||
ALLOC_COPY_CLASS_IF(intfeed, IntegerFeedbackClassRec);
|
ALLOC_COPY_CLASS_IF(intfeed, IntegerFeedbackClassRec);
|
||||||
ALLOC_COPY_CLASS_IF(stringfeed, StringFeedbackClassRec);
|
ALLOC_COPY_CLASS_IF(stringfeed, StringFeedbackClassRec);
|
||||||
ALLOC_COPY_CLASS_IF(bell, BellFeedbackClassRec);
|
ALLOC_COPY_CLASS_IF(bell, BellFeedbackClassRec);
|
||||||
ALLOC_COPY_CLASS_IF(leds, LedFeedbackClassRec);
|
ALLOC_COPY_CLASS_IF(leds, LedFeedbackClassRec);
|
||||||
/* XXX: XkbSrvLedInfo needs to be copied. */
|
#ifdef XKB
|
||||||
|
if (to->leds)
|
||||||
|
{
|
||||||
|
to->leds->xkb_sli = NULL;
|
||||||
|
/* XXX: XkbSrvLedInfo needs to be copied*/
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
Loading…
Reference in New Issue
Block a user