From 5adf87cddab6a4ee742e85fd18623e79fe315f0d Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 12 Aug 2021 15:24:32 +1000 Subject: [PATCH] tools: hook up absolute pointer motion in the demo client Prints the regions and sets the pointer to somewhere around 150/150 Signed-off-by: Peter Hutterer --- tools/ei-demo-client.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/tools/ei-demo-client.c b/tools/ei-demo-client.c index ed821fa..21c5543 100644 --- a/tools/ei-demo-client.c +++ b/tools/ei-demo-client.c @@ -131,6 +131,24 @@ handle_keymap(struct ei_event *event) } } +static void +handle_regions(struct ei_device *device) +{ + uint32_t idx = 0; + struct ei_region *r; + + while ((r = ei_device_get_region (device, idx++))) { + int x, y, w, h; + x = ei_region_get_x(r); + y = ei_region_get_y(r); + w = ei_region_get_width(r); + h = ei_region_get_height(r); + + colorprint("%s has region %dx%d@%d,%d\n", + ei_device_get_name(device), w, h, x, y); + } +} + static void usage(FILE *fp, const char *argv0) { @@ -237,10 +255,12 @@ int main(int argc, char **argv) }; _unref_(ei_device) *ptr = NULL; _unref_(ei_device) *kbd = NULL; + _unref_(ei_device) *abs = NULL; bool stop = false; bool have_ptr = false; bool have_kbd = false; + bool have_abs = false; struct ei_seat *default_seat = NULL; while (!stop && poll(&fds, 1, 2000) > -1) { @@ -291,6 +311,11 @@ int main(int argc, char **argv) kbd = device; handle_keymap(e); } + if (ei_device_has_capability(device, EI_DEVICE_CAP_POINTER_ABSOLUTE)) { + colorprint("New abs pointer device: %s\n", ei_device_get_name(device)); + abs = device; + handle_regions(device); + } } break; case EI_EVENT_DEVICE_RESUMED: @@ -302,6 +327,10 @@ int main(int argc, char **argv) colorprint("Keyboard device was resumed\n"); have_kbd = true; } + if (ei_event_get_device(e) == abs) { + colorprint("Abs pointer device was resumed\n"); + have_abs = true; + } break; case EI_EVENT_DEVICE_SUSPENDED: if (ei_event_get_device(e) == ptr) { @@ -312,6 +341,10 @@ int main(int argc, char **argv) colorprint("Keyboard device was resumed\n"); have_kbd = false; } + if (ei_event_get_device(e) == abs) { + colorprint("Abs pointer device was resumed\n"); + have_abs = false; + } break; case EI_EVENT_DEVICE_REMOVED: { @@ -342,6 +375,12 @@ int main(int argc, char **argv) ei_device_keyboard_key(kbd, KEY_Q + key, false); /* KEY_Q */ key = (key + 1) % 6; } + + if (have_abs) { + static int x, y; + colorprint("sending abs event\n"); + ei_device_pointer_motion_absolute(abs, 150 + ++x, 150 - ++y); + } } return 0;