mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-11-15 05:00:09 +00:00
gdkdevice-wayland: Update pointer scale on tablet tool proximity events
When the user approaches a tablet tool to the screen we get a proximity-in event and in this moment we need to check the surface output scale to find the scaling to be applied to the cursor. And the same should be done when the tool is detached or the monitors configuration changes. https://gitlab.gnome.org/GNOME/gtk/issues/1675
This commit is contained in:
parent
acaa257469
commit
8385543e1c
@ -284,6 +284,7 @@ struct _GdkWaylandDevicePadClass
|
|||||||
};
|
};
|
||||||
|
|
||||||
static void gdk_wayland_device_pad_iface_init (GdkDevicePadInterface *iface);
|
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 ())
|
#define GDK_TYPE_WAYLAND_DEVICE_PAD (gdk_wayland_device_pad_get_type ())
|
||||||
GType gdk_wayland_device_pad_get_type (void);
|
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_source_device (event, tablet->current_device);
|
||||||
gdk_event_set_device_tool (event, tool->tool);
|
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,
|
GDK_DISPLAY_NOTE (seat->display, EVENTS,
|
||||||
g_message ("proximity in, seat %p surface %p tool %d",
|
g_message ("proximity in, seat %p surface %p tool %d",
|
||||||
seat, tablet->pointer_info.focus,
|
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_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);
|
g_object_unref (tablet->pointer_info.focus);
|
||||||
tablet->pointer_info.focus = NULL;
|
tablet->pointer_info.focus = NULL;
|
||||||
|
|
||||||
@ -4447,7 +4457,15 @@ pointer_surface_update_scale (GdkDevice *device)
|
|||||||
void
|
void
|
||||||
gdk_wayland_seat_update_cursor_scale (GdkWaylandSeat *seat)
|
gdk_wayland_seat_update_cursor_scale (GdkWaylandSeat *seat)
|
||||||
{
|
{
|
||||||
|
GList *l;
|
||||||
|
|
||||||
pointer_surface_update_scale (seat->master_pointer);
|
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
|
static void
|
||||||
|
Loading…
Reference in New Issue
Block a user