[gtk/seat-model: 2/3] Port all users to gdk_display_get_seats




commit 4032ef15097ab025dc01208de4b3888c9fb8d985
Author: Matthias Clasen <mclasen redhat com>
Date:   Sat Sep 5 23:43:18 2020 -0400

    Port all users to gdk_display_get_seats

 gdk/gdksurface.c                 | 17 ++++++++++-------
 gdk/wayland/gdkdevice-wayland.c  | 23 ++++++++++++-----------
 gdk/wayland/gdkdisplay-wayland.c | 14 +++++++-------
 gdk/x11/gdkdisplay-x11.c         | 21 ++++++++-------------
 gtk/gtkpopover.c                 | 14 ++++++++------
 gtk/gtkwindow.c                  | 14 ++++++++------
 gtk/inspector/general.c          | 30 ++++++++++++++++++------------
 testsuite/gdk/seat.c             | 20 ++++++++++----------
 8 files changed, 81 insertions(+), 72 deletions(-)
---
diff --git a/gdk/gdksurface.c b/gdk/gdksurface.c
index 3a03292251..4c8bf7c9c1 100644
--- a/gdk/gdksurface.c
+++ b/gdk/gdksurface.c
@@ -1790,7 +1790,7 @@ gdk_surface_get_cursor (GdkSurface *surface)
  */
 void
 gdk_surface_set_cursor (GdkSurface *surface,
-                        GdkCursor *cursor)
+                        GdkCursor  *cursor)
 {
   g_return_if_fail (GDK_IS_SURFACE (surface));
 
@@ -1803,30 +1803,33 @@ gdk_surface_set_cursor (GdkSurface *surface,
   if (!GDK_SURFACE_DESTROYED (surface))
     {
       GdkDevice *device;
-      GList *seats, *s;
+      GListModel *seats;
+      guint i, n;
 
       if (cursor)
         surface->cursor = g_object_ref (cursor);
 
-      seats = gdk_display_list_seats (surface->display);
+      seats = gdk_display_get_seats (surface->display);
 
-      for (s = seats; s; s = s->next)
+      for (i = 0, n = g_list_model_get_n_items (seats); i < n; i++)
         {
+          GdkSeat *seat;
           GList *devices, *d;
 
-          device = gdk_seat_get_pointer (s->data);
+          seat = g_list_model_get_item (seats, i);
+          device = gdk_seat_get_pointer (seat);
           gdk_surface_set_cursor_internal (surface, device, surface->cursor);
 
-          devices = gdk_seat_get_devices (s->data, GDK_SEAT_CAPABILITY_TABLET_STYLUS);
+          devices = gdk_seat_get_devices (seat, GDK_SEAT_CAPABILITY_TABLET_STYLUS);
           for (d = devices; d; d = d->next)
             {
               device = d->data;
               gdk_surface_set_cursor_internal (surface, device, surface->cursor);
             }
           g_list_free (devices);
+          g_object_unref (seat);
         }
 
-      g_list_free (seats);
       g_object_notify_by_pspec (G_OBJECT (surface), properties[PROP_CURSOR]);
     }
 }
diff --git a/gdk/wayland/gdkdevice-wayland.c b/gdk/wayland/gdkdevice-wayland.c
index fbbceacb65..0664202a60 100644
--- a/gdk/wayland/gdkdevice-wayland.c
+++ b/gdk/wayland/gdkdevice-wayland.c
@@ -4819,22 +4819,23 @@ _gdk_wayland_display_remove_seat (GdkWaylandDisplay *display_wayland,
                                   guint32            id)
 {
   GdkDisplay *display = GDK_DISPLAY (display_wayland);
-  GList *l, *seats;
+  GListModel *seats;
+  guint i, n;
+  gboolean removed = FALSE;
 
-  seats = gdk_display_list_seats (display);
-
-  for (l = seats; l != NULL; l = l->next)
+  seats = gdk_display_get_seats (display);
+  for (i = 0, n = g_list_model_get_n_items (seats); i < n && !removed; i++)
     {
-      GdkWaylandSeat *seat = l->data;
+      GdkWaylandSeat *seat = g_list_model_get_item (seats, i);
 
-      if (seat->id != id)
-        continue;
+      if (seat->id == id)
+        {
+          gdk_display_remove_seat (display, GDK_SEAT (seat));
+          removed = TRUE;
+        }
 
-      gdk_display_remove_seat (display, GDK_SEAT (seat));
-      break;
+      g_object_unref (seat);
     }
-
-  g_list_free (seats);
 }
 
 uint32_t
diff --git a/gdk/wayland/gdkdisplay-wayland.c b/gdk/wayland/gdkdisplay-wayland.c
index 461e0f0110..f599b745b5 100644
--- a/gdk/wayland/gdkdisplay-wayland.c
+++ b/gdk/wayland/gdkdisplay-wayland.c
@@ -2213,20 +2213,20 @@ transform_to_string (int transform)
 static void
 update_scale (GdkDisplay *display)
 {
-  GList *seats;
-  GList *l;
+  GListModel *seats;
+  guint i, n;
 
   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;
 
+  seats = gdk_display_get_seats (display);
+  for (i = 0, n = g_list_model_get_n_items (seats); i < n; i++)
+    {
+      GdkSeat *seat = g_list_model_get_item (seats, i);
       gdk_wayland_seat_update_cursor_scale (GDK_WAYLAND_SEAT (seat));
+      g_object_unref (seat);
     }
-  g_list_free (seats);
 }
 
 static void
diff --git a/gdk/x11/gdkdisplay-x11.c b/gdk/x11/gdkdisplay-x11.c
index 378f591f8a..a42ceba1df 100644
--- a/gdk/x11/gdkdisplay-x11.c
+++ b/gdk/x11/gdkdisplay-x11.c
@@ -2796,34 +2796,29 @@ gdk_x11_display_get_keymap (GdkDisplay *display)
 static GdkSeat *
 gdk_x11_display_get_default_seat (GdkDisplay *display)
 {
-  GList *seats, *l;
+  GListModel *seats;
+  guint i, n;
   int device_id;
   gboolean result = FALSE;
 
-  seats = gdk_display_list_seats (display);
+  seats = gdk_display_get_seats (display);
 
   gdk_x11_display_error_trap_push (display);
   result = XIGetClientPointer (GDK_DISPLAY_XDISPLAY (display),
                                None, &device_id);
   gdk_x11_display_error_trap_pop_ignored (display);
 
-  for (l = seats; l; l = l->next)
+  for (i = 0, n = g_list_model_get_n_items (seats); i < n; i++)
     {
-      GdkDevice *pointer;
+      GdkSeat *seat = g_list_model_get_item (seats, i);
+      GdkDevice *pointer = gdk_seat_get_pointer (seat);
 
-      pointer = gdk_seat_get_pointer (l->data);
+      g_object_unref (seat);
 
       if (gdk_x11_device_get_id (pointer) == device_id || !result)
-        {
-          GdkSeat *seat = l->data;
-          g_list_free (seats);
-
-          return seat;
-        }
+        return seat;
     }
 
-  g_list_free (seats);
-
   return NULL;
 }
 
diff --git a/gtk/gtkpopover.c b/gtk/gtkpopover.c
index 5130d68ede..e12c95ca65 100644
--- a/gtk/gtkpopover.c
+++ b/gtk/gtkpopover.c
@@ -608,16 +608,20 @@ close_menu (GtkPopover *popover)
 static gboolean
 gtk_popover_has_mnemonic_modifier_pressed (GtkPopover *popover)
 {
-  GList *seats, *s;
+  GListModel *seats;
+  guint i, n;
   gboolean retval = FALSE;
 
-  seats = gdk_display_list_seats (gtk_widget_get_display (GTK_WIDGET (popover)));
+  seats = gdk_display_get_seats (gtk_widget_get_display (GTK_WIDGET (popover)));
 
-  for (s = seats; s; s = s->next)
+  for (i = 0, n = g_list_model_get_n_items (seats); i < n; i++)
     {
-      GdkDevice *dev = gdk_seat_get_keyboard (s->data);
+      GdkSeat *seat = g_list_model_get_item (seats, i);
+      GdkDevice *dev = gdk_seat_get_keyboard (seat);
       GdkModifierType mask;
 
+      g_object_unref (seat);
+
       mask = gdk_device_get_modifier_state (dev);
       if ((mask & gtk_accelerator_get_default_mod_mask ()) == GDK_ALT_MASK)
         {
@@ -626,8 +630,6 @@ gtk_popover_has_mnemonic_modifier_pressed (GtkPopover *popover)
         }
     }
 
-  g_list_free (seats);
-
   return retval;
 }
 
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index 40673a037c..570aee0668 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -4792,16 +4792,20 @@ gtk_window_real_activate_focus (GtkWindow *window)
 static gboolean
 gtk_window_has_mnemonic_modifier_pressed (GtkWindow *window)
 {
-  GList *seats, *s;
+  GListModel *seats;
+  guint i, n;
   gboolean retval = FALSE;
 
-  seats = gdk_display_list_seats (gtk_widget_get_display (GTK_WIDGET (window)));
+  seats = gdk_display_get_seats (gtk_widget_get_display (GTK_WIDGET (window)));
 
-  for (s = seats; s; s = s->next)
+  for (i = 0, n = g_list_model_get_n_items (seats); i < n; i++)
     {
-      GdkDevice *dev = gdk_seat_get_keyboard (s->data);
+      GdkSeat *seat = g_list_model_get_item (seats, i);
+      GdkDevice *dev = gdk_seat_get_keyboard (seat);
       GdkModifierType mask;
 
+      g_object_unref (seat);
+
       mask = gdk_device_get_modifier_state (dev);
       if ((mask & gtk_accelerator_get_default_mod_mask ()) == GDK_ALT_MASK)
         {
@@ -4810,8 +4814,6 @@ gtk_window_has_mnemonic_modifier_pressed (GtkWindow *window)
         }
     }
 
-  g_list_free (seats);
-
   return retval;
 }
 
diff --git a/gtk/inspector/general.c b/gtk/inspector/general.c
index ab368e2f8d..a5b7c769b3 100644
--- a/gtk/inspector/general.c
+++ b/gtk/inspector/general.c
@@ -828,18 +828,20 @@ static void
 populate_seats (GtkInspectorGeneral *gen)
 {
   GtkWidget *child;
-  GList *list, *l;
-  int i;
+  GListModel *seats;
+  guint i, n;
 
   while ((child = gtk_widget_get_first_child (gen->device_box)))
     gtk_list_box_remove (GTK_LIST_BOX (gen->device_box), child);
 
-  list = gdk_display_list_seats (gen->display);
-
-  for (l = list, i = 0; l; l = l->next, i++)
-    add_seat (gen, GDK_SEAT (l->data), i);
+  seats = gdk_display_get_seats (gen->display);
 
-  g_list_free (list);
+  for (i = 0, n = g_list_model_get_n_items (seats); i < n; i++)
+    {
+      GdkSeat *seat = g_list_model_get_item (seats, i);
+      add_seat (gen, seat, i);
+      g_object_unref (seat);
+    }
 }
 
 static void
@@ -935,17 +937,21 @@ static void
 gtk_inspector_general_dispose (GObject *object)
 {
   GtkInspectorGeneral *gen = GTK_INSPECTOR_GENERAL (object);
-  GList *list, *l;
+  GListModel *seats;
+  guint i, n;
 
   g_clear_pointer (&gen->swin, gtk_widget_unparent);
 
   g_signal_handlers_disconnect_by_func (gen->display, G_CALLBACK (seat_added), gen);
   g_signal_handlers_disconnect_by_func (gen->display, G_CALLBACK (seat_removed), gen);
 
-  list = gdk_display_list_seats (gen->display);
-  for (l = list; l; l = l->next)
-    disconnect_seat (gen, GDK_SEAT (l->data));
-  g_list_free (list);
+  seats = gdk_display_get_seats (gen->display);
+  for (i = 0, n = g_list_model_get_n_items (seats); i < n; i++)
+    {
+      GdkSeat *seat = g_list_model_get_item (seats, i);
+      disconnect_seat (gen, seat);
+      g_object_unref (seat);
+    }
 
   G_OBJECT_CLASS (gtk_inspector_general_parent_class)->dispose (object);
 }
diff --git a/testsuite/gdk/seat.c b/testsuite/gdk/seat.c
index bd98236132..91cb25cb67 100644
--- a/testsuite/gdk/seat.c
+++ b/testsuite/gdk/seat.c
@@ -1,11 +1,12 @@
 #include <gtk/gtk.h>
 
 static void
-test_list_seats (void)
+test_get_seats (void)
 {
   GdkDisplay *display;
   GdkSeat *seat0, *seat;
-  GList *list, *l;
+  GListModel *seats;
+  guint i, n;
   gboolean found_default;
 
   display = gdk_display_get_default ();
@@ -14,25 +15,24 @@ test_list_seats (void)
     g_assert_true (GDK_IS_SEAT (seat0));
 
   found_default = FALSE;
-  list = gdk_display_list_seats (display);
-
-  for (l = list; l; l = l->next)
+  seats = gdk_display_get_seats (display);
+  for (i = 0, n = g_list_model_get_n_items (seats); i < n; i++)
     {
-      seat = l->data;
+      seat = g_list_model_get_item (seats, i);
 
       g_assert_true (GDK_IS_SEAT (seat));
       g_assert (gdk_seat_get_display (seat) == display);
 
       if (seat == seat0)
         found_default = TRUE;
+
+      g_object_unref (seat);
     }
 
   if (seat0 != NULL)
     g_assert_true (found_default);
   else
-    g_assert_true (list == NULL);
-
-  g_list_free (list);
+    g_assert_true (n == 0);
 }
 
 static void
@@ -118,7 +118,7 @@ main (int argc, char *argv[])
 
   gtk_init ();
 
-  g_test_add_func ("/seat/list", test_list_seats);
+  g_test_add_func ("/seat/list", test_get_seats);
   g_test_add_func ("/seat/default", test_default_seat);
 
   return g_test_run ();


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