diff options
-rw-r--r-- | src/lib/ecore_drm/Ecore_Drm.h | 14 | ||||
-rw-r--r-- | src/lib/ecore_drm/ecore_drm_device.c | 24 | ||||
-rw-r--r-- | src/lib/ecore_drm/ecore_drm_evdev.c | 8 | ||||
-rw-r--r-- | src/lib/ecore_drm/ecore_drm_private.h | 1 |
4 files changed, 46 insertions, 1 deletions
diff --git a/src/lib/ecore_drm/Ecore_Drm.h b/src/lib/ecore_drm/Ecore_Drm.h index 8d2787b187..ca11e96855 100644 --- a/src/lib/ecore_drm/Ecore_Drm.h +++ b/src/lib/ecore_drm/Ecore_Drm.h | |||
@@ -836,6 +836,20 @@ EAPI void ecore_drm_output_gamma_set(Ecore_Drm_Output *output, uint16_t size, ui | |||
836 | EAPI void ecore_drm_device_pointer_xy_get(Ecore_Drm_Device *dev, int *x, int *y); | 836 | EAPI void ecore_drm_device_pointer_xy_get(Ecore_Drm_Device *dev, int *x, int *y); |
837 | 837 | ||
838 | /** | 838 | /** |
839 | * Warp the pointer position of Ecore_Drm_Device | ||
840 | * | ||
841 | * This function will set the pointer position of Ecore_Drm_Device | ||
842 | * | ||
843 | * @param dev The Ecore_Drm_Device to set pointer position for | ||
844 | * @param x The new x co-ordinate | ||
845 | * @param y The new y co-ordinate | ||
846 | * | ||
847 | * @ingroup Ecore_Drm_Device_Group | ||
848 | * @since 1.18 | ||
849 | */ | ||
850 | EAPI void ecore_drm_device_pointer_warp(Ecore_Drm_Device *dev, int x, int y); | ||
851 | |||
852 | /** | ||
839 | * Get the list of drm devices which are allocated. | 853 | * Get the list of drm devices which are allocated. |
840 | * | 854 | * |
841 | * @return Eina_List of drm devices, NULL otherwise | 855 | * @return Eina_List of drm devices, NULL otherwise |
diff --git a/src/lib/ecore_drm/ecore_drm_device.c b/src/lib/ecore_drm/ecore_drm_device.c index 16a7843cd6..95117d2b9d 100644 --- a/src/lib/ecore_drm/ecore_drm_device.c +++ b/src/lib/ecore_drm/ecore_drm_device.c | |||
@@ -509,6 +509,30 @@ ecore_drm_device_pointer_xy_get(Ecore_Drm_Device *dev, int *x, int *y) | |||
509 | } | 509 | } |
510 | } | 510 | } |
511 | 511 | ||
512 | EAPI void | ||
513 | ecore_drm_device_pointer_warp(Ecore_Drm_Device *dev, int x, int y) | ||
514 | { | ||
515 | Ecore_Drm_Seat *seat; | ||
516 | Ecore_Drm_Evdev *edev; | ||
517 | Eina_List *l, *ll; | ||
518 | |||
519 | /* check for valid device */ | ||
520 | EINA_SAFETY_ON_TRUE_RETURN((!dev) || (dev->drm.fd < 0)); | ||
521 | EINA_LIST_FOREACH(dev->seats, l, seat) | ||
522 | { | ||
523 | EINA_LIST_FOREACH(seat->devices, ll, edev) | ||
524 | { | ||
525 | if (!libinput_device_has_capability(edev->device, | ||
526 | LIBINPUT_DEVICE_CAP_POINTER)) | ||
527 | continue; | ||
528 | |||
529 | seat->ptr.dx = seat->ptr.ix = x; | ||
530 | seat->ptr.dy = seat->ptr.iy = y; | ||
531 | _ecore_drm_pointer_motion_post(edev); | ||
532 | } | ||
533 | } | ||
534 | } | ||
535 | |||
512 | EAPI Eina_Bool | 536 | EAPI Eina_Bool |
513 | ecore_drm_device_software_setup(Ecore_Drm_Device *dev) | 537 | ecore_drm_device_software_setup(Ecore_Drm_Device *dev) |
514 | { | 538 | { |
diff --git a/src/lib/ecore_drm/ecore_drm_evdev.c b/src/lib/ecore_drm/ecore_drm_evdev.c index 35534f51ff..cf418f3442 100644 --- a/src/lib/ecore_drm/ecore_drm_evdev.c +++ b/src/lib/ecore_drm/ecore_drm_evdev.c | |||
@@ -399,7 +399,7 @@ _device_pointer_motion(Ecore_Drm_Evdev *edev, struct libinput_event_pointer *eve | |||
399 | ev->window = (Ecore_Window)input->dev->window; | 399 | ev->window = (Ecore_Window)input->dev->window; |
400 | ev->event_window = (Ecore_Window)input->dev->window; | 400 | ev->event_window = (Ecore_Window)input->dev->window; |
401 | ev->root_window = (Ecore_Window)input->dev->window; | 401 | ev->root_window = (Ecore_Window)input->dev->window; |
402 | ev->timestamp = libinput_event_pointer_get_time(event); | 402 | if (event) ev->timestamp = libinput_event_pointer_get_time(event); |
403 | ev->same_screen = 1; | 403 | ev->same_screen = 1; |
404 | 404 | ||
405 | _device_modifiers_update(edev); | 405 | _device_modifiers_update(edev); |
@@ -424,6 +424,12 @@ _device_pointer_motion(Ecore_Drm_Evdev *edev, struct libinput_event_pointer *eve | |||
424 | ecore_event_add(ECORE_EVENT_MOUSE_MOVE, ev, NULL, NULL); | 424 | ecore_event_add(ECORE_EVENT_MOUSE_MOVE, ev, NULL, NULL); |
425 | } | 425 | } |
426 | 426 | ||
427 | void | ||
428 | _ecore_drm_pointer_motion_post(Ecore_Drm_Evdev *edev) | ||
429 | { | ||
430 | _device_pointer_motion(edev, NULL); | ||
431 | } | ||
432 | |||
427 | static void | 433 | static void |
428 | _device_handle_pointer_motion(struct libinput_device *device, struct libinput_event_pointer *event) | 434 | _device_handle_pointer_motion(struct libinput_device *device, struct libinput_event_pointer *event) |
429 | { | 435 | { |
diff --git a/src/lib/ecore_drm/ecore_drm_private.h b/src/lib/ecore_drm/ecore_drm_private.h index b4b0fb244c..21ec098aa5 100644 --- a/src/lib/ecore_drm/ecore_drm_private.h +++ b/src/lib/ecore_drm/ecore_drm_private.h | |||
@@ -283,6 +283,7 @@ void _ecore_drm_tty_restore(Ecore_Drm_Device *dev); | |||
283 | Ecore_Drm_Evdev *_ecore_drm_evdev_device_create(Ecore_Drm_Seat *seat, struct libinput_device *device); | 283 | Ecore_Drm_Evdev *_ecore_drm_evdev_device_create(Ecore_Drm_Seat *seat, struct libinput_device *device); |
284 | void _ecore_drm_evdev_device_destroy(Ecore_Drm_Evdev *evdev); | 284 | void _ecore_drm_evdev_device_destroy(Ecore_Drm_Evdev *evdev); |
285 | Eina_Bool _ecore_drm_evdev_event_process(struct libinput_event *event); | 285 | Eina_Bool _ecore_drm_evdev_event_process(struct libinput_event *event); |
286 | void _ecore_drm_pointer_motion_post(Ecore_Drm_Evdev *evdev); | ||
286 | 287 | ||
287 | Ecore_Drm_Fb *_ecore_drm_fb_create(Ecore_Drm_Device *dev, int width, int height); | 288 | Ecore_Drm_Fb *_ecore_drm_fb_create(Ecore_Drm_Device *dev, int width, int height); |
288 | void _ecore_drm_fb_destroy(Ecore_Drm_Fb *fb); | 289 | void _ecore_drm_fb_destroy(Ecore_Drm_Fb *fb); |