summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Ådahl <jadahl@gmail.com>2018-06-28 11:41:09 +0200
committerJonas Ådahl <jadahl@gmail.com>2018-06-28 12:01:48 +0200
commit3354d9109062d12890787bc1f1d23ddc1c3ea77a (patch)
treeea5fd0f0a3b67d654c94c5ea717ec570ad7b9d64
parent5afc01d9951e1a5b8906d00fa05173a21c31b9e3 (diff)
downloadgtk+-3354d9109062d12890787bc1f1d23ddc1c3ea77a.tar.gz
wayland: Update cursor surface scale when output scale changes
Cursor surfaces didn't listen for output scale changes, meaning they didn't adapt their scale when an output changed scale, which could happen for example when changing the monitor scale via Settings.
-rw-r--r--gdk/wayland/gdkdevice-wayland.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/gdk/wayland/gdkdevice-wayland.c b/gdk/wayland/gdkdevice-wayland.c
index 807f0a29ff..fb3cfcb505 100644
--- a/gdk/wayland/gdkdevice-wayland.c
+++ b/gdk/wayland/gdkdevice-wayland.c
@@ -310,6 +310,9 @@ struct _GdkWaylandDeviceManagerClass
GdkDeviceManagerClass parent_class;
};
+static void
+pointer_surface_update_scale (GdkDevice *device);
+
static void deliver_key_event (GdkWaylandSeat *seat,
uint32_t time_,
uint32_t key,
@@ -4502,9 +4505,17 @@ static const struct zwp_tablet_seat_v2_listener tablet_seat_listener = {
};
static void
+on_monitors_changed (GdkScreen *screen,
+ GdkWaylandSeat *seat)
+{
+ pointer_surface_update_scale (seat->master_pointer);
+}
+
+static void
init_devices (GdkWaylandSeat *seat)
{
GdkWaylandDeviceManager *device_manager = GDK_WAYLAND_DEVICE_MANAGER (seat->device_manager);
+ GdkWaylandDisplay *display = GDK_WAYLAND_DISPLAY (seat->display);
/* pointer */
seat->master_pointer = g_object_new (GDK_TYPE_WAYLAND_DEVICE,
@@ -4524,6 +4535,9 @@ init_devices (GdkWaylandSeat *seat)
g_list_prepend (device_manager->devices, seat->master_pointer);
g_signal_emit_by_name (device_manager, "device-added", seat->master_pointer);
+ g_signal_connect (display->screen, "monitors-changed",
+ G_CALLBACK (on_monitors_changed), seat);
+
/* keyboard */
seat->master_keyboard = g_object_new (GDK_TYPE_WAYLAND_DEVICE,
"name", "Core Keyboard",