summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stone <daniel@fooishbar.org>2011-12-14 15:29:48 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2011-12-20 13:01:03 +1000
commitbec51f5ec6575a1971ae5371a4b6d8563933032c (patch)
treef9e1b1ce56967d25988931c81f33d3de25e70faa
parent5c63dc6dbcbebbb19d79575a9f1ec9878e6537f1 (diff)
dix: add GetTouchOwnership event API
No callers yet. This API is not to be used by drivers, it's an API for the DIX which will create ownership events mainly on touch acceptance/rejection. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
-rw-r--r--dix/getevents.c35
-rw-r--r--include/input.h8
2 files changed, 43 insertions, 0 deletions
diff --git a/dix/getevents.c b/dix/getevents.c
index 39f8ca7b6..b38928187 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -156,6 +156,17 @@ key_autorepeats(DeviceIntPtr pDev, int key_code)
}
static void
+init_touch_ownership(DeviceIntPtr dev, TouchOwnershipEvent *event, Time ms)
+{
+ memset(event, 0, sizeof(TouchOwnershipEvent));
+ event->header = ET_Internal;
+ event->type = ET_TouchOwnership;
+ event->length = sizeof(TouchOwnershipEvent);
+ event->time = ms;
+ event->deviceid = dev->id;
+}
+
+static void
init_raw(DeviceIntPtr dev, RawDeviceEvent *event, Time ms, int type, int detail)
{
memset(event, 0, sizeof(RawDeviceEvent));
@@ -1631,6 +1642,30 @@ GetProximityEvents(InternalEvent *events, DeviceIntPtr pDev, int type, const Val
return num_events;
}
+int
+GetTouchOwnershipEvents(InternalEvent *events, DeviceIntPtr pDev,
+ TouchPointInfoPtr ti, uint8_t reason, XID resource,
+ uint32_t flags)
+{
+ TouchClassPtr t = pDev->touch;
+ TouchOwnershipEvent *event;
+ CARD32 ms = GetTimeInMillis();
+
+ if (!pDev->enabled || !t || !ti)
+ return 0;
+
+ event = &events->touch_ownership_event;
+ init_touch_ownership(pDev, event, ms);
+
+ event->touchid = ti->client_id;
+ event->sourceid = ti->sourceid;
+ event->resource = resource;
+ event->flags = flags;
+ event->reason = reason;
+
+ return 1;
+}
+
/**
* Generate internal events representing this touch event and enqueue them
* on the event queue.
diff --git a/include/input.h b/include/input.h
index 834dd273d..4d60792cd 100644
--- a/include/input.h
+++ b/include/input.h
@@ -503,6 +503,14 @@ void QueueTouchEvents(DeviceIntPtr device,
int flags,
const ValuatorMask *mask);
+extern int GetTouchOwnershipEvents(
+ InternalEvent *events,
+ DeviceIntPtr pDev,
+ TouchPointInfoPtr ti,
+ uint8_t mode,
+ XID resource,
+ uint32_t flags);
+
extern _X_EXPORT int GetProximityEvents(
InternalEvent *events,
DeviceIntPtr pDev,