Xi: process raw touch events

No-one can generated them yet, but if they could, we'd be processing them
like there was no tomorrow.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
This commit is contained in:
Peter Hutterer 2011-12-14 13:21:59 +10:00
parent 84db813b9d
commit 3390d3fc03
8 changed files with 41 additions and 2 deletions

View File

@ -1063,6 +1063,9 @@ ProcessOtherEvent(InternalEvent *ev, DeviceIntPtr device)
case ET_RawButtonPress:
case ET_RawButtonRelease:
case ET_RawMotion:
case ET_RawTouchBegin:
case ET_RawTouchUpdate:
case ET_RawTouchEnd:
DeliverRawEvent(&ev->raw_event, device);
break;
default:

View File

@ -868,6 +868,9 @@ XI2EventSwap(xGenericEvent *from, xGenericEvent *to)
case XI_RawKeyRelease:
case XI_RawButtonPress:
case XI_RawButtonRelease:
case XI_RawTouchBegin:
case XI_RawTouchUpdate:
case XI_RawTouchEnd:
SRawEvent((xXIRawEvent*)from, (xXIRawEvent*)to);
break;
default:

View File

@ -145,7 +145,10 @@ ProcXISelectEvents(ClientPtr client)
BitIsOn(bits, XI_RawKeyRelease) ||
BitIsOn(bits, XI_RawButtonPress) ||
BitIsOn(bits, XI_RawButtonRelease) ||
BitIsOn(bits, XI_RawMotion))
BitIsOn(bits, XI_RawMotion) ||
BitIsOn(bits, XI_RawTouchBegin) ||
BitIsOn(bits, XI_RawTouchUpdate) ||
BitIsOn(bits, XI_RawTouchEnd))
{
client->errorValue = XI_RawKeyPress;
return BadValue;

View File

@ -158,6 +158,9 @@ EventToCore(InternalEvent *event, xEvent **core_out, int *count_out)
case ET_RawButtonPress:
case ET_RawButtonRelease:
case ET_RawMotion:
case ET_RawTouchBegin:
case ET_RawTouchUpdate:
case ET_RawTouchEnd:
case ET_TouchBegin:
case ET_TouchUpdate:
case ET_TouchEnd:
@ -211,6 +214,9 @@ EventToXI(InternalEvent *ev, xEvent **xi, int *count)
case ET_RawButtonPress:
case ET_RawButtonRelease:
case ET_RawMotion:
case ET_RawTouchBegin:
case ET_RawTouchUpdate:
case ET_RawTouchEnd:
case ET_TouchBegin:
case ET_TouchUpdate:
case ET_TouchEnd:
@ -270,6 +276,9 @@ EventToXI2(InternalEvent *ev, xEvent **xi)
case ET_RawButtonPress:
case ET_RawButtonRelease:
case ET_RawMotion:
case ET_RawTouchBegin:
case ET_RawTouchUpdate:
case ET_RawTouchEnd:
return eventToRawEvent(&ev->raw_event, xi);
default:
break;
@ -827,6 +836,9 @@ GetXI2Type(enum EventType type)
case ET_RawButtonPress: xi2type = XI_RawButtonPress; break;
case ET_RawButtonRelease: xi2type = XI_RawButtonRelease; break;
case ET_RawMotion: xi2type = XI_RawMotion; break;
case ET_RawTouchBegin: xi2type = XI_RawTouchBegin; break;
case ET_RawTouchUpdate: xi2type = XI_RawTouchUpdate; break;
case ET_RawTouchEnd: xi2type = XI_RawTouchEnd; break;
case ET_FocusIn: xi2type = XI_FocusIn; break;
case ET_FocusOut: xi2type = XI_FocusOut; break;
case ET_TouchBegin: xi2type = XI_TouchBegin; break;

View File

@ -2463,6 +2463,9 @@ FixUpEventFromWindow(
case XI_RawButtonPress:
case XI_RawButtonRelease:
case XI_RawMotion:
case XI_RawTouchBegin:
case XI_RawTouchUpdate:
case XI_RawTouchEnd:
case XI_DeviceChanged:
case XI_HierarchyChanged:
case XI_PropertyEvent:

View File

@ -161,7 +161,16 @@ init_raw(DeviceIntPtr dev, RawDeviceEvent *event, Time ms, int type, int detail)
memset(event, 0, sizeof(RawDeviceEvent));
event->header = ET_Internal;
event->length = sizeof(RawDeviceEvent);
event->type = ET_RawKeyPress - ET_KeyPress + type;
switch(type) {
case MotionNotify: event->type = ET_RawMotion; break;
case ButtonPress: event->type = ET_RawButtonPress; break;
case ButtonRelease: event->type = ET_RawButtonRelease; break;
case KeyPress: event->type = ET_RawKeyPress; break;
case KeyRelease: event->type = ET_RawKeyRelease; break;
case XI_TouchBegin: event->type = ET_RawTouchBegin; break;
case XI_TouchUpdate: event->type = ET_RawTouchUpdate; break;
case XI_TouchEnd: event->type = ET_RawTouchEnd; break;
}
event->time = ms;
event->deviceid = dev->id;
event->sourceid = dev->id;

View File

@ -67,6 +67,9 @@ enum EventType {
ET_RawButtonPress,
ET_RawButtonRelease,
ET_RawMotion,
ET_RawTouchBegin,
ET_RawTouchUpdate,
ET_RawTouchEnd,
ET_XQuartz,
ET_Internal = 0xFF /* First byte */
};

View File

@ -384,6 +384,9 @@ ChangeDeviceID(DeviceIntPtr dev, InternalEvent* event)
case ET_RawButtonPress:
case ET_RawButtonRelease:
case ET_RawMotion:
case ET_RawTouchBegin:
case ET_RawTouchEnd:
case ET_RawTouchUpdate:
event->raw_event.deviceid = dev->id;
break;
default: