From 6a9f47a2fd62cdba3e13e2cd9757e4a0d669c2c6 Mon Sep 17 00:00:00 2001 From: "duna.oh" Date: Fri, 11 Mar 2022 13:46:01 +0900 Subject: [PATCH] e_input_evdev: fix mouse event coord. according to the associated output Change-Id: Ia07319c6d3f7ca0827a68cf4eae01115d4ff6c30 --- src/bin/e_input_evdev.c | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/bin/e_input_evdev.c b/src/bin/e_input_evdev.c index 27ea2d7..d18fca1 100644 --- a/src/bin/e_input_evdev.c +++ b/src/bin/e_input_evdev.c @@ -639,6 +639,7 @@ _device_pointer_motion(E_Input_Evdev *edev, struct libinput_event_pointer *event Ecore_Event_Mouse_Move *ev; Ecore_Device *ecore_dev = NULL, *data, *detent_data = NULL; Eina_List *l; + int x = 0, y = 0, w = 0, h = 0; if (!(input = edev->seat->input)) return; @@ -681,15 +682,17 @@ _device_pointer_motion(E_Input_Evdev *edev, struct libinput_event_pointer *event if (!(ev = calloc(1, sizeof(Ecore_Event_Mouse_Move)))) return; - if (edev->seat->ptr.ix < edev->mouse.minx) - edev->seat->ptr.dx = edev->seat->ptr.ix = edev->mouse.minx; - else if (edev->seat->ptr.ix >= (edev->mouse.minx + edev->mouse.maxw)) - edev->seat->ptr.dx = edev->seat->ptr.ix = (edev->mouse.minx + edev->mouse.maxw - 1); + _device_configured_size_get(edev, &x, &y, &w, &h); + + if (edev->seat->ptr.ix < x) + edev->seat->ptr.dx = edev->seat->ptr.ix = x; + else if (edev->seat->ptr.ix >= (x + w)) + edev->seat->ptr.dx = edev->seat->ptr.ix = (x + w - 1); - if (edev->seat->ptr.iy < edev->mouse.miny) - edev->seat->ptr.dy = edev->seat->ptr.iy = edev->mouse.miny; - else if (edev->seat->ptr.iy >= (edev->mouse.miny + edev->mouse.maxh)) - edev->seat->ptr.dy = edev->seat->ptr.iy = (edev->mouse.miny + edev->mouse.maxh - 1); + if (edev->seat->ptr.iy < y) + edev->seat->ptr.dy = edev->seat->ptr.iy = y; + else if (edev->seat->ptr.iy >= (y + h)) + edev->seat->ptr.dy = edev->seat->ptr.iy = (y + h - 1); edev->mouse.dx = edev->seat->ptr.dx; edev->mouse.dy = edev->seat->ptr.dy; @@ -1384,6 +1387,15 @@ _device_configured_size_get(E_Input_Evdev *edev, int *x, int *y, int *w, int *h) edev->mouse.miny = output->config.geom.y; edev->mouse.maxw = output->config.geom.w; edev->mouse.maxh = output->config.geom.h; + if (libinput_device_has_capability(edev->device, LIBINPUT_DEVICE_CAP_POINTER)) + { + edev->seat->ptr.dx = (double)(edev->mouse.maxw / 2); + edev->seat->ptr.dy = (double)(edev->mouse.maxh / 2); + edev->seat->ptr.ix = (int)edev->seat->ptr.dx; + edev->seat->ptr.iy = (int)edev->seat->ptr.dy; + edev->mouse.dx = edev->seat->ptr.dx; + edev->mouse.dy = edev->seat->ptr.dy; + } } } -- 2.7.4