[gtk: 1/2] wayland: Update cursor surface scale when output scale changes



commit dfd1372a9be2aa8bab778658cca361ead201cf7c
Author: Jonas Ã…dahl <jadahl gmail com>
Date:   Thu Jun 28 12:44:22 2018 +0200

    wayland: Update cursor surface scale when output scale changes
    
    Also update the cursor surfaces of every seat when an output changes
    scale. This could for example happen when a monitor scale is changed via
    Settings.

 gdk/wayland/gdkdevice-wayland.c  |  6 ++++++
 gdk/wayland/gdkdisplay-wayland.c | 12 ++++++++++++
 gdk/wayland/gdkseat-wayland.h    |  2 ++
 3 files changed, 20 insertions(+)
---
diff --git a/gdk/wayland/gdkdevice-wayland.c b/gdk/wayland/gdkdevice-wayland.c
index 9c9b79b563..64ab005aed 100644
--- a/gdk/wayland/gdkdevice-wayland.c
+++ b/gdk/wayland/gdkdevice-wayland.c
@@ -4516,6 +4516,12 @@ pointer_surface_update_scale (GdkDevice *device)
   gdk_wayland_device_update_surface_cursor (device);
 }
 
+void
+gdk_wayland_seat_update_cursor_scale (GdkWaylandSeat *seat)
+{
+  pointer_surface_update_scale (seat->master_pointer);
+}
+
 static void
 pointer_surface_enter (void              *data,
                        struct wl_surface *wl_surface,
diff --git a/gdk/wayland/gdkdisplay-wayland.c b/gdk/wayland/gdkdisplay-wayland.c
index b64f2f105b..c4c710847a 100644
--- a/gdk/wayland/gdkdisplay-wayland.c
+++ b/gdk/wayland/gdkdisplay-wayland.c
@@ -38,6 +38,7 @@
 #include "gdkdisplay.h"
 #include "gdkdisplay-wayland.h"
 #include "gdkmonitor-wayland.h"
+#include "gdkseat-wayland.h"
 #include "gdkinternals.h"
 #include "gdkdeviceprivate.h"
 #include "gdkkeysprivate.h"
@@ -1871,9 +1872,20 @@ transform_to_string (int transform)
 static void
 update_scale (GdkDisplay *display)
 {
+  GList *seats;
+  GList *l;
+
   g_list_foreach (gdk_wayland_display_get_toplevel_surfaces (display),
                   (GFunc)gdk_wayland_surface_update_scale,
                   NULL);
+  seats = gdk_display_list_seats (display);
+  for (l = seats; l; l = l->next)
+    {
+      GdkSeat *seat = l->data;
+
+      gdk_wayland_seat_update_cursor_scale (GDK_WAYLAND_SEAT (seat));
+    }
+  g_list_free (seats);
 }
 
 static void
diff --git a/gdk/wayland/gdkseat-wayland.h b/gdk/wayland/gdkseat-wayland.h
index 52c73e22ee..eccc792817 100644
--- a/gdk/wayland/gdkseat-wayland.h
+++ b/gdk/wayland/gdkseat-wayland.h
@@ -41,4 +41,6 @@ struct _GdkWaylandSeatClass
 
 GType gdk_wayland_seat_get_type (void) G_GNUC_CONST;
 
+void gdk_wayland_seat_update_cursor_scale (GdkWaylandSeat *seat);
+
 #endif /* __GDK_WAYLAND_SEAT_H__ */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]