POINTER_EMULATED merely sets XIPointerEmulated in the generated DeviceEvent.
Signed-off-by: Daniel Stone <[email protected]> --- dix/getevents.c | 6 ++++++ include/input.h | 1 + test/xi2/protocol-eventconvert.c | 18 +++++++++++++++++- 3 files changed, 24 insertions(+), 1 deletions(-) v2: Also add flags to the RawEvent. diff --git a/dix/getevents.c b/dix/getevents.c index 7088b1a..03c7938 100644 --- a/dix/getevents.c +++ b/dix/getevents.c @@ -58,6 +58,7 @@ #endif #include <X11/extensions/XI.h> +#include <X11/extensions/XI2.h> #include <X11/extensions/XIproto.h> #include <pixman.h> #include "exglobals.h" @@ -1174,6 +1175,11 @@ fill_pointer_events(InternalEvent *events, DeviceIntPtr pDev, int type, event->root_x_frac = screenx - trunc(screenx); event->root_y_frac = screeny - trunc(screeny); + if (flags & POINTER_EMULATED) { + raw->flags = XIRawEmulated; + event->flags = XIPointerEmulated; + } + set_valuators(pDev, event, &mask); return num_events; diff --git a/include/input.h b/include/input.h index 512e12c..caf5196 100644 --- a/include/input.h +++ b/include/input.h @@ -66,6 +66,7 @@ SOFTWARE. #define POINTER_ABSOLUTE (1 << 2) #define POINTER_ACCELERATE (1 << 3) #define POINTER_SCREEN (1 << 4) /* Data in screen coordinates */ +#define POINTER_EMULATED (1 << 5) /* Event was emulated from another event */ /*int constants for pointer acceleration schemes*/ #define PtrAccelNoOp 0 diff --git a/test/xi2/protocol-eventconvert.c b/test/xi2/protocol-eventconvert.c index 7db3fd2..e0de7d3 100644 --- a/test/xi2/protocol-eventconvert.c +++ b/test/xi2/protocol-eventconvert.c @@ -41,6 +41,7 @@ static void test_values_XIRawEvent(RawDeviceEvent *in, xXIRawEvent *out, int nvals = 0; int bits_set; int len; + uint32_t flagmask = 0; if (swap) { @@ -64,7 +65,17 @@ static void test_values_XIRawEvent(RawDeviceEvent *in, xXIRawEvent *out, assert(out->detail == in->detail.button); assert(out->deviceid == in->deviceid); assert(out->valuators_len >= bytes_to_int32(bits_to_bytes(sizeof(in->valuators.mask)))); - assert(out->flags == 0); /* FIXME: we don't set the flags yet */ + + switch (in->type) { + case ET_RawMotion: + case ET_RawButtonPress: + case ET_RawButtonRelease: + flagmask = XIRawEmulated; + break; + default: + flagmask = 0; + } + assert((out->flags & ~flagmask) == 0); ptr = (unsigned char*)&out[1]; bits_set = 0; @@ -310,6 +321,11 @@ static void test_values_XIDeviceEvent(DeviceEvent *in, xXIDeviceEvent *out, assert(out->sourceid == in->sourceid); switch (in->type) { + case ET_ButtonPress: + case ET_Motion: + case ET_ButtonRelease: + flagmask = XIPointerEmulated; + break; case ET_KeyPress: flagmask = XIKeyRepeat; break; -- 1.7.5.3 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
