diff --git a/gdk/wayland/gdkdevice-wayland.c b/gdk/wayland/gdkdevice-wayland.c index f1dab93f1b..63e55c9900 100644 --- a/gdk/wayland/gdkdevice-wayland.c +++ b/gdk/wayland/gdkdevice-wayland.c @@ -284,6 +284,7 @@ struct _GdkWaylandDevicePadClass }; static void gdk_wayland_device_pad_iface_init (GdkDevicePadInterface *iface); +static void pointer_surface_update_scale (GdkDevice *device); #define GDK_TYPE_WAYLAND_DEVICE_PAD (gdk_wayland_device_pad_get_type ()) GType gdk_wayland_device_pad_get_type (void); @@ -3496,6 +3497,11 @@ tablet_tool_handle_proximity_in (void *data, gdk_event_set_source_device (event, tablet->current_device); gdk_event_set_device_tool (event, tool->tool); + tablet->pointer_info.pointer_surface_outputs = + g_slist_append (tablet->pointer_info.pointer_surface_outputs, + gdk_wayland_surface_get_wl_output (surface)); + pointer_surface_update_scale (tablet->master); + GDK_DISPLAY_NOTE (seat->display, EVENTS, g_message ("proximity in, seat %p surface %p tool %d", seat, tablet->pointer_info.focus, @@ -3523,7 +3529,11 @@ tablet_tool_handle_proximity_out (void *data, gdk_wayland_pointer_stop_cursor_animation (&tablet->pointer_info); - gdk_wayland_device_update_surface_cursor (tablet->master); + tablet->pointer_info.pointer_surface_outputs = + g_slist_remove (tablet->pointer_info.pointer_surface_outputs, + gdk_wayland_surface_get_wl_output (tablet->pointer_info.focus)); + pointer_surface_update_scale (tablet->master); + g_object_unref (tablet->pointer_info.focus); tablet->pointer_info.focus = NULL; @@ -4447,7 +4457,15 @@ pointer_surface_update_scale (GdkDevice *device) void gdk_wayland_seat_update_cursor_scale (GdkWaylandSeat *seat) { + GList *l; + pointer_surface_update_scale (seat->master_pointer); + + for (l = seat->tablets; l; l = l->next) + { + GdkWaylandTabletData *tablet = l->data; + pointer_surface_update_scale (tablet->master); + } } static void