Backport device properties to XI 1.5 instead of XI 2.0
This commit is contained in:
parent
8b9ed7dec2
commit
de1573172a
|
@ -52,6 +52,7 @@ extern Mask DeviceOwnerGrabButtonMask;
|
||||||
extern Mask DeviceButtonGrabMask;
|
extern Mask DeviceButtonGrabMask;
|
||||||
extern Mask DeviceButtonMotionMask;
|
extern Mask DeviceButtonMotionMask;
|
||||||
extern Mask DevicePresenceNotifyMask;
|
extern Mask DevicePresenceNotifyMask;
|
||||||
|
extern Mask DevicePropertyNotifyMask;
|
||||||
extern Mask DeviceEnterWindowMask;
|
extern Mask DeviceEnterWindowMask;
|
||||||
extern Mask DeviceLeaveWindowMask;
|
extern Mask DeviceLeaveWindowMask;
|
||||||
extern Mask PropagateMask[];
|
extern Mask PropagateMask[];
|
||||||
|
@ -72,6 +73,7 @@ extern int DeviceButtonStateNotify;
|
||||||
extern int DeviceMappingNotify;
|
extern int DeviceMappingNotify;
|
||||||
extern int ChangeDeviceNotify;
|
extern int ChangeDeviceNotify;
|
||||||
extern int DevicePresenceNotify;
|
extern int DevicePresenceNotify;
|
||||||
|
extern int DevicePropertyNotify;
|
||||||
extern int DeviceEnterNotify;
|
extern int DeviceEnterNotify;
|
||||||
extern int DeviceLeaveNotify;
|
extern int DeviceLeaveNotify;
|
||||||
|
|
||||||
|
|
93
Xi/extinit.c
93
Xi/extinit.c
|
@ -210,22 +210,24 @@ static int (*ProcIVector[])(ClientPtr) = {
|
||||||
ProcXSetDeviceValuators, /* 33 */
|
ProcXSetDeviceValuators, /* 33 */
|
||||||
ProcXGetDeviceControl, /* 34 */
|
ProcXGetDeviceControl, /* 34 */
|
||||||
ProcXChangeDeviceControl, /* 35 */
|
ProcXChangeDeviceControl, /* 35 */
|
||||||
ProcXQueryDevicePointer, /* 36 */
|
/* XI 1.5 */
|
||||||
ProcXWarpDevicePointer, /* 37 */
|
ProcXListDeviceProperties, /* 36 */
|
||||||
ProcXChangeDeviceCursor, /* 38 */
|
ProcXQueryDeviceProperty, /* 37 */
|
||||||
ProcXChangeDeviceHierarchy, /* 39 */
|
ProcXConfigureDeviceProperty, /* 38 */
|
||||||
ProcXChangeWindowAccess, /* 40 */
|
ProcXChangeDeviceProperty, /* 39 */
|
||||||
ProcXQueryWindowAccess, /* 41 */
|
ProcXDeleteDeviceProperty, /* 40 */
|
||||||
ProcXSetClientPointer, /* 42 */
|
ProcXGetDeviceProperty, /* 41 */
|
||||||
ProcXGetClientPointer, /* 43 */
|
/* XI 2 */
|
||||||
ProcXiSelectEvent, /* 44 */
|
ProcXQueryDevicePointer, /* 42 */
|
||||||
ProcXExtendedGrabDevice, /* 45 */
|
ProcXWarpDevicePointer, /* 43 */
|
||||||
ProcXListDeviceProperties, /* 46 */
|
ProcXChangeDeviceCursor, /* 44 */
|
||||||
ProcXQueryDeviceProperty, /* 47 */
|
ProcXChangeDeviceHierarchy, /* 45 */
|
||||||
ProcXConfigureDeviceProperty, /* 48 */
|
ProcXChangeWindowAccess, /* 46 */
|
||||||
ProcXChangeDeviceProperty, /* 49 */
|
ProcXQueryWindowAccess, /* 47 */
|
||||||
ProcXDeleteDeviceProperty, /* 50 */
|
ProcXSetClientPointer, /* 48 */
|
||||||
ProcXGetDeviceProperty /* 51 */
|
ProcXGetClientPointer, /* 49 */
|
||||||
|
ProcXiSelectEvent, /* 50 */
|
||||||
|
ProcXExtendedGrabDevice /* 51 */
|
||||||
};
|
};
|
||||||
|
|
||||||
/* For swapped clients */
|
/* For swapped clients */
|
||||||
|
@ -266,22 +268,22 @@ static int (*SProcIVector[])(ClientPtr) = {
|
||||||
SProcXSetDeviceValuators, /* 33 */
|
SProcXSetDeviceValuators, /* 33 */
|
||||||
SProcXGetDeviceControl, /* 34 */
|
SProcXGetDeviceControl, /* 34 */
|
||||||
SProcXChangeDeviceControl, /* 35 */
|
SProcXChangeDeviceControl, /* 35 */
|
||||||
SProcXQueryDevicePointer, /* 36 */
|
SProcXListDeviceProperties, /* 36 */
|
||||||
SProcXWarpDevicePointer, /* 37 */
|
SProcXQueryDeviceProperty, /* 37 */
|
||||||
SProcXChangeDeviceCursor, /* 38 */
|
SProcXConfigureDeviceProperty, /* 38 */
|
||||||
SProcXChangeDeviceHierarchy, /* 39 */
|
SProcXChangeDeviceProperty, /* 39 */
|
||||||
SProcXChangeWindowAccess, /* 40 */
|
SProcXDeleteDeviceProperty, /* 40 */
|
||||||
SProcXQueryWindowAccess, /* 41 */
|
SProcXGetDeviceProperty, /* 41 */
|
||||||
SProcXSetClientPointer, /* 42 */
|
SProcXQueryDevicePointer, /* 42 */
|
||||||
SProcXGetClientPointer, /* 43 */
|
SProcXWarpDevicePointer, /* 43 */
|
||||||
SProcXiSelectEvent, /* 44 */
|
SProcXChangeDeviceCursor, /* 44 */
|
||||||
SProcXExtendedGrabDevice, /* 45 */
|
SProcXChangeDeviceHierarchy, /* 45 */
|
||||||
SProcXListDeviceProperties, /* 46 */
|
SProcXChangeWindowAccess, /* 46 */
|
||||||
SProcXQueryDeviceProperty, /* 47 */
|
SProcXQueryWindowAccess, /* 47 */
|
||||||
SProcXConfigureDeviceProperty, /* 48 */
|
SProcXSetClientPointer, /* 48 */
|
||||||
SProcXChangeDeviceProperty, /* 49 */
|
SProcXGetClientPointer, /* 49 */
|
||||||
SProcXDeleteDeviceProperty, /* 50 */
|
SProcXiSelectEvent, /* 50 */
|
||||||
SProcXGetDeviceProperty /* 51 */
|
SProcXExtendedGrabDevice /* 51 */
|
||||||
};
|
};
|
||||||
|
|
||||||
/*****************************************************************
|
/*****************************************************************
|
||||||
|
@ -308,6 +310,7 @@ Mask DeviceOwnerGrabButtonMask;
|
||||||
Mask DeviceButtonGrabMask;
|
Mask DeviceButtonGrabMask;
|
||||||
Mask DeviceButtonMotionMask;
|
Mask DeviceButtonMotionMask;
|
||||||
Mask DevicePresenceNotifyMask;
|
Mask DevicePresenceNotifyMask;
|
||||||
|
Mask DevicePropertyNotifyMask;
|
||||||
Mask DeviceEnterWindowMask;
|
Mask DeviceEnterWindowMask;
|
||||||
Mask DeviceLeaveWindowMask;
|
Mask DeviceLeaveWindowMask;
|
||||||
|
|
||||||
|
@ -327,6 +330,7 @@ int DeviceButtonStateNotify;
|
||||||
int DeviceMappingNotify;
|
int DeviceMappingNotify;
|
||||||
int ChangeDeviceNotify;
|
int ChangeDeviceNotify;
|
||||||
int DevicePresenceNotify;
|
int DevicePresenceNotify;
|
||||||
|
int DevicePropertyNotify;
|
||||||
int DeviceEnterNotify;
|
int DeviceEnterNotify;
|
||||||
int DeviceLeaveNotify;
|
int DeviceLeaveNotify;
|
||||||
|
|
||||||
|
@ -589,6 +593,17 @@ SDevicePresenceNotifyEvent (devicePresenceNotify *from, devicePresenceNotify *to
|
||||||
swaps(&to->control, n);
|
swaps(&to->control, n);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
SDevicePropertyNotifyEvent (devicePropertyNotify *from, devicePropertyNotify *to)
|
||||||
|
{
|
||||||
|
char n;
|
||||||
|
|
||||||
|
*to = *from;
|
||||||
|
swaps(&to->sequenceNumber,n);
|
||||||
|
swapl(&to->time, n);
|
||||||
|
swapl(&to->atom, n);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
SDeviceEnterNotifyEvent (deviceEnterNotify *from, deviceEnterNotify *to)
|
SDeviceEnterNotifyEvent (deviceEnterNotify *from, deviceEnterNotify *to)
|
||||||
{
|
{
|
||||||
|
@ -786,7 +801,8 @@ FixExtensionEvents(ExtensionEntry * extEntry)
|
||||||
DeviceKeyStateNotify = ChangeDeviceNotify + 1;
|
DeviceKeyStateNotify = ChangeDeviceNotify + 1;
|
||||||
DeviceButtonStateNotify = DeviceKeyStateNotify + 1;
|
DeviceButtonStateNotify = DeviceKeyStateNotify + 1;
|
||||||
DevicePresenceNotify = DeviceButtonStateNotify + 1;
|
DevicePresenceNotify = DeviceButtonStateNotify + 1;
|
||||||
DeviceEnterNotify = DevicePresenceNotify + 1;
|
DevicePropertyNotify = DevicePresenceNotify + 1;
|
||||||
|
DeviceEnterNotify = DevicePropertyNotify + 1;
|
||||||
DeviceLeaveNotify = DeviceEnterNotify + 1;
|
DeviceLeaveNotify = DeviceEnterNotify + 1;
|
||||||
|
|
||||||
event_base[KeyClass] = DeviceKeyPress;
|
event_base[KeyClass] = DeviceKeyPress;
|
||||||
|
@ -876,6 +892,9 @@ FixExtensionEvents(ExtensionEntry * extEntry)
|
||||||
DevicePresenceNotifyMask = GetNextExtEventMask();
|
DevicePresenceNotifyMask = GetNextExtEventMask();
|
||||||
SetEventInfo(DevicePresenceNotifyMask, _devicePresence);
|
SetEventInfo(DevicePresenceNotifyMask, _devicePresence);
|
||||||
|
|
||||||
|
DevicePropertyNotifyMask = GetNextExtEventMask();
|
||||||
|
SetMaskForExtEvent(DevicePropertyNotifyMask, DevicePropertyNotify);
|
||||||
|
|
||||||
DeviceEnterWindowMask = GetNextExtEventMask();
|
DeviceEnterWindowMask = GetNextExtEventMask();
|
||||||
SetMaskForExtEvent(DeviceEnterWindowMask, DeviceEnterNotify);
|
SetMaskForExtEvent(DeviceEnterWindowMask, DeviceEnterNotify);
|
||||||
AllowPropagateSuppress(DeviceEnterWindowMask);
|
AllowPropagateSuppress(DeviceEnterWindowMask);
|
||||||
|
@ -929,8 +948,9 @@ RestoreExtensionEvents(void)
|
||||||
DeviceKeyStateNotify = 13;
|
DeviceKeyStateNotify = 13;
|
||||||
DeviceButtonStateNotify = 13;
|
DeviceButtonStateNotify = 13;
|
||||||
DevicePresenceNotify = 14;
|
DevicePresenceNotify = 14;
|
||||||
DeviceEnterNotify = 15;
|
DevicePropertyNotify = 15;
|
||||||
DeviceLeaveNotify = 16;
|
DeviceEnterNotify = 16;
|
||||||
|
DeviceLeaveNotify = 17;
|
||||||
|
|
||||||
BadDevice = 0;
|
BadDevice = 0;
|
||||||
BadEvent = 1;
|
BadEvent = 1;
|
||||||
|
@ -969,6 +989,7 @@ IResetProc(ExtensionEntry * unused)
|
||||||
EventSwapVector[DeviceMappingNotify] = NotImplemented;
|
EventSwapVector[DeviceMappingNotify] = NotImplemented;
|
||||||
EventSwapVector[ChangeDeviceNotify] = NotImplemented;
|
EventSwapVector[ChangeDeviceNotify] = NotImplemented;
|
||||||
EventSwapVector[DevicePresenceNotify] = NotImplemented;
|
EventSwapVector[DevicePresenceNotify] = NotImplemented;
|
||||||
|
EventSwapVector[DevicePropertyNotify] = NotImplemented;
|
||||||
EventSwapVector[DeviceEnterNotify] = NotImplemented;
|
EventSwapVector[DeviceEnterNotify] = NotImplemented;
|
||||||
EventSwapVector[DeviceLeaveNotify] = NotImplemented;
|
EventSwapVector[DeviceLeaveNotify] = NotImplemented;
|
||||||
RestoreExtensionEvents();
|
RestoreExtensionEvents();
|
||||||
|
@ -1072,6 +1093,8 @@ SEventIDispatch(xEvent * from, xEvent * to)
|
||||||
DO_SWAP(SChangeDeviceNotifyEvent, changeDeviceNotify);
|
DO_SWAP(SChangeDeviceNotifyEvent, changeDeviceNotify);
|
||||||
else if (type == DevicePresenceNotify)
|
else if (type == DevicePresenceNotify)
|
||||||
DO_SWAP(SDevicePresenceNotifyEvent, devicePresenceNotify);
|
DO_SWAP(SDevicePresenceNotifyEvent, devicePresenceNotify);
|
||||||
|
else if (type == DevicePropertyNotify)
|
||||||
|
DO_SWAP(SDevicePropertyNotifyEvent, devicePropertyNotify);
|
||||||
else if (type == DeviceEnterNotify)
|
else if (type == DeviceEnterNotify)
|
||||||
DO_SWAP(SDeviceEnterNotifyEvent, deviceEnterNotify);
|
DO_SWAP(SDeviceEnterNotifyEvent, deviceEnterNotify);
|
||||||
else if (type == DeviceLeaveNotify)
|
else if (type == DeviceLeaveNotify)
|
||||||
|
|
|
@ -191,21 +191,18 @@ XIDeleteAllDeviceProperties (DeviceIntPtr device)
|
||||||
{
|
{
|
||||||
XIPropertyPtr prop, next;
|
XIPropertyPtr prop, next;
|
||||||
XIPropertyHandlerPtr curr_handler, next_handler;
|
XIPropertyHandlerPtr curr_handler, next_handler;
|
||||||
devicePropertyNotifyEvent event;
|
devicePropertyNotify event;
|
||||||
|
|
||||||
for (prop = device->properties.properties; prop; prop = next)
|
for (prop = device->properties.properties; prop; prop = next)
|
||||||
{
|
{
|
||||||
next = prop->next;
|
next = prop->next;
|
||||||
|
|
||||||
event.type = GenericEvent;
|
event.type = DevicePropertyNotify;
|
||||||
event.extension = IReqCode;
|
|
||||||
event.evtype = XI_DevicePropertyNotify;
|
|
||||||
event.length = 0;
|
|
||||||
event.deviceid = device->id;
|
event.deviceid = device->id;
|
||||||
event.state = PropertyDelete;
|
event.state = PropertyDelete;
|
||||||
event.atom = prop->propertyName;
|
event.atom = prop->propertyName;
|
||||||
event.time = currentTime.milliseconds;
|
event.time = currentTime.milliseconds;
|
||||||
SendEventToAllWindows(device, XI_DevicePropertyNotifyMask,
|
SendEventToAllWindows(device, DevicePropertyNotifyMask,
|
||||||
(xEvent*)&event, 1);
|
(xEvent*)&event, 1);
|
||||||
|
|
||||||
XIDestroyDeviceProperty(prop);
|
XIDestroyDeviceProperty(prop);
|
||||||
|
@ -226,7 +223,7 @@ int
|
||||||
XIDeleteDeviceProperty (DeviceIntPtr device, Atom property, Bool fromClient)
|
XIDeleteDeviceProperty (DeviceIntPtr device, Atom property, Bool fromClient)
|
||||||
{
|
{
|
||||||
XIPropertyPtr prop, *prev;
|
XIPropertyPtr prop, *prev;
|
||||||
devicePropertyNotifyEvent event;
|
devicePropertyNotify event;
|
||||||
|
|
||||||
for (prev = &device->properties.properties; (prop = *prev); prev = &(prop->next))
|
for (prev = &device->properties.properties; (prop = *prev); prev = &(prop->next))
|
||||||
if (prop->propertyName == property)
|
if (prop->propertyName == property)
|
||||||
|
@ -238,15 +235,12 @@ XIDeleteDeviceProperty (DeviceIntPtr device, Atom property, Bool fromClient)
|
||||||
if (prop)
|
if (prop)
|
||||||
{
|
{
|
||||||
*prev = prop->next;
|
*prev = prop->next;
|
||||||
event.type = GenericEvent;
|
event.type = DevicePropertyNotify;
|
||||||
event.extension = IReqCode;
|
|
||||||
event.length = 0;
|
|
||||||
event.evtype = XI_DevicePropertyNotify;
|
|
||||||
event.deviceid = device->id;
|
event.deviceid = device->id;
|
||||||
event.state = PropertyDelete;
|
event.state = PropertyDelete;
|
||||||
event.atom = prop->propertyName;
|
event.atom = prop->propertyName;
|
||||||
event.time = currentTime.milliseconds;
|
event.time = currentTime.milliseconds;
|
||||||
SendEventToAllWindows(device, XI_DevicePropertyNotifyMask,
|
SendEventToAllWindows(device, DevicePropertyNotifyMask,
|
||||||
(xEvent*)&event, 1);
|
(xEvent*)&event, 1);
|
||||||
XIDestroyDeviceProperty (prop);
|
XIDestroyDeviceProperty (prop);
|
||||||
}
|
}
|
||||||
|
@ -261,7 +255,7 @@ XIChangeDeviceProperty (DeviceIntPtr dev, Atom property, Atom type,
|
||||||
Bool fromClient)
|
Bool fromClient)
|
||||||
{
|
{
|
||||||
XIPropertyPtr prop;
|
XIPropertyPtr prop;
|
||||||
devicePropertyNotifyEvent event;
|
devicePropertyNotify event;
|
||||||
int size_in_bytes;
|
int size_in_bytes;
|
||||||
int total_size;
|
int total_size;
|
||||||
unsigned long total_len;
|
unsigned long total_len;
|
||||||
|
@ -379,15 +373,12 @@ XIChangeDeviceProperty (DeviceIntPtr dev, Atom property, Atom type,
|
||||||
|
|
||||||
if (sendevent)
|
if (sendevent)
|
||||||
{
|
{
|
||||||
event.type = GenericEvent;
|
event.type = DevicePropertyNotify;
|
||||||
event.extension = IReqCode;
|
|
||||||
event.length = 0;
|
|
||||||
event.evtype = XI_DevicePropertyNotify;
|
|
||||||
event.deviceid = dev->id;
|
event.deviceid = dev->id;
|
||||||
event.state = PropertyNewValue;
|
event.state = PropertyNewValue;
|
||||||
event.atom = prop->propertyName;
|
event.atom = prop->propertyName;
|
||||||
event.time = currentTime.milliseconds;
|
event.time = currentTime.milliseconds;
|
||||||
SendEventToAllWindows(dev, XI_DevicePropertyNotifyMask,
|
SendEventToAllWindows(dev, DevicePropertyNotifyMask,
|
||||||
(xEvent*)&event, 1);
|
(xEvent*)&event, 1);
|
||||||
}
|
}
|
||||||
return(Success);
|
return(Success);
|
||||||
|
@ -786,17 +777,14 @@ ProcXGetDeviceProperty (ClientPtr client)
|
||||||
|
|
||||||
if (stuff->delete && (reply.bytesAfter == 0))
|
if (stuff->delete && (reply.bytesAfter == 0))
|
||||||
{
|
{
|
||||||
devicePropertyNotifyEvent event;
|
devicePropertyNotify event;
|
||||||
|
|
||||||
event.type = GenericEvent;
|
event.type = DevicePropertyNotify;
|
||||||
event.extension = IReqCode;
|
|
||||||
event.length = 0;
|
|
||||||
event.evtype = XI_DevicePropertyNotify;
|
|
||||||
event.deviceid = dev->id;
|
event.deviceid = dev->id;
|
||||||
event.state = PropertyDelete;
|
event.state = PropertyDelete;
|
||||||
event.atom = prop->propertyName;
|
event.atom = prop->propertyName;
|
||||||
event.time = currentTime.milliseconds;
|
event.time = currentTime.milliseconds;
|
||||||
SendEventToAllWindows(dev, XI_DevicePropertyNotifyMask,
|
SendEventToAllWindows(dev, DevicePropertyNotifyMask,
|
||||||
(xEvent*)&event, 1);
|
(xEvent*)&event, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue