diff --git a/src/wayland/meta-wayland-tablet-manager.c b/src/wayland/meta-wayland-tablet-manager.c index eb7ce427e..722a721fd 100644 --- a/src/wayland/meta-wayland-tablet-manager.c +++ b/src/wayland/meta-wayland-tablet-manager.c @@ -33,6 +33,7 @@ #include "meta-wayland-private.h" #include "meta-wayland-tablet-manager.h" #include "meta-wayland-tablet-seat.h" +#include "meta-wayland-tablet-tool.h" static void unbind_resource (struct wl_resource *resource) @@ -237,3 +238,30 @@ meta_wayland_tablet_manager_ensure_seat (MetaWaylandTabletManager *manager, return tablet_seat; } + +void +meta_wayland_tablet_manager_update_cursor_position (MetaWaylandTabletManager *manager, + const ClutterEvent *event) +{ + MetaWaylandTabletSeat *tablet_seat = NULL; + MetaWaylandTabletTool *tool = NULL; + ClutterInputDeviceTool *device_tool; + ClutterInputDevice *device; + + device = clutter_event_get_source_device (event); + device_tool = clutter_event_get_device_tool (event); + + if (device) + tablet_seat = meta_wayland_tablet_manager_lookup_seat (manager, device); + + if (tablet_seat && device_tool) + tool = meta_wayland_tablet_seat_lookup_tool (tablet_seat, device_tool); + + if (tool) + { + gfloat new_x, new_y; + + clutter_event_get_coords (event, &new_x, &new_y); + meta_wayland_tablet_tool_set_cursor_position (tool, new_x, new_y); + } +} diff --git a/src/wayland/meta-wayland-tablet-manager.h b/src/wayland/meta-wayland-tablet-manager.h index b39d3a973..0e0103982 100644 --- a/src/wayland/meta-wayland-tablet-manager.h +++ b/src/wayland/meta-wayland-tablet-manager.h @@ -51,4 +51,7 @@ MetaWaylandTabletSeat * meta_wayland_tablet_manager_ensure_seat (MetaWaylandTabletManager *manager, MetaWaylandSeat *seat); +void meta_wayland_tablet_manager_update_cursor_position (MetaWaylandTabletManager *manager, + const ClutterEvent *event); + #endif /* META_WAYLAND_TABLET_MANAGER_H */ diff --git a/src/wayland/meta-wayland-tablet-tool.c b/src/wayland/meta-wayland-tablet-tool.c index fac292498..cbb22b31c 100644 --- a/src/wayland/meta-wayland-tablet-tool.c +++ b/src/wayland/meta-wayland-tablet-tool.c @@ -879,3 +879,12 @@ meta_wayland_tablet_tool_handle_event (MetaWaylandTabletTool *tool, return CLUTTER_EVENT_STOP; } + +void +meta_wayland_tablet_tool_set_cursor_position (MetaWaylandTabletTool *tool, + int new_x, + int new_y) +{ + if (tool->cursor_renderer) + meta_cursor_renderer_set_position (tool->cursor_renderer, new_x, new_y); +} diff --git a/src/wayland/meta-wayland-tablet-tool.h b/src/wayland/meta-wayland-tablet-tool.h index da680e48d..89ca2a6e1 100644 --- a/src/wayland/meta-wayland-tablet-tool.h +++ b/src/wayland/meta-wayland-tablet-tool.h @@ -73,4 +73,9 @@ void meta_wayland_tablet_tool_update (MetaWaylandTabletTool *t gboolean meta_wayland_tablet_tool_handle_event (MetaWaylandTabletTool *tool, const ClutterEvent *event); +void meta_wayland_tablet_tool_set_cursor_position (MetaWaylandTabletTool *tool, + int new_x, + int new_y); + + #endif /* META_WAYLAND_TABLET_TOOL_H */