[mutter] clutter/seat: Add private method to peek list of input devices



commit 45c14f74b4521b47519fd3de950219dc26186fe0
Author: Jonas Dreßler <verdre v0yd nl>
Date:   Tue Mar 3 10:47:25 2020 +0100

    clutter/seat: Add private method to peek list of input devices
    
    Add a method to ClutterSeat that allows peeking the list of input
    devices and allow looping through devices a bit faster. The API left is
    private so we can make use of peeking the GList internally, but don't
    have to expose any details to the outside, which means we'd have to
    eventually stick with a GList forever to avoid breaking API.
    
    Since we now have the peek_devices() API internally, we can implement
    ClutterSeats public list_devices() API using g_list_copy() on the list
    returned by peek_devices().
    
    https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1275

 clutter/clutter/clutter-seat.c         | 13 ++++++++++++-
 clutter/clutter/clutter-seat.h         |  3 ++-
 src/backends/native/meta-seat-native.c | 13 ++++---------
 src/backends/x11/meta-seat-x11.c       | 12 ++++--------
 4 files changed, 22 insertions(+), 19 deletions(-)
---
diff --git a/clutter/clutter/clutter-seat.c b/clutter/clutter/clutter-seat.c
index a641aae992..73672bd361 100644
--- a/clutter/clutter/clutter-seat.c
+++ b/clutter/clutter/clutter-seat.c
@@ -354,6 +354,17 @@ clutter_seat_get_keyboard (ClutterSeat *seat)
   return CLUTTER_SEAT_GET_CLASS (seat)->get_keyboard (seat);
 }
 
+/**
+ * clutter_seat_peek_devices: (skip)
+ **/
+const GList *
+clutter_seat_peek_devices (ClutterSeat *seat)
+{
+  g_return_val_if_fail (CLUTTER_IS_SEAT (seat), NULL);
+
+  return CLUTTER_SEAT_GET_CLASS (seat)->peek_devices (seat);
+}
+
 /**
  * clutter_seat_list_devices:
  * @seat: a #ClutterSeat
@@ -370,7 +381,7 @@ clutter_seat_list_devices (ClutterSeat *seat)
 {
   g_return_val_if_fail (CLUTTER_IS_SEAT (seat), NULL);
 
-  return CLUTTER_SEAT_GET_CLASS (seat)->list_devices (seat);
+  return g_list_copy ((GList *)clutter_seat_peek_devices (seat));
 }
 
 void
diff --git a/clutter/clutter/clutter-seat.h b/clutter/clutter/clutter-seat.h
index e12965e00f..7818647af5 100644
--- a/clutter/clutter/clutter-seat.h
+++ b/clutter/clutter/clutter-seat.h
@@ -96,7 +96,7 @@ struct _ClutterSeatClass
   ClutterInputDevice * (* get_pointer)  (ClutterSeat *seat);
   ClutterInputDevice * (* get_keyboard) (ClutterSeat *seat);
 
-  GList * (* list_devices) (ClutterSeat *seat);
+  const GList * (* peek_devices) (ClutterSeat *seat);
 
   void (* bell_notify) (ClutterSeat *seat);
 
@@ -133,6 +133,7 @@ CLUTTER_EXPORT
 ClutterInputDevice * clutter_seat_get_keyboard (ClutterSeat *seat);
 CLUTTER_EXPORT
 GList * clutter_seat_list_devices (ClutterSeat *seat);
+const GList * clutter_seat_peek_devices (ClutterSeat *seat);
 CLUTTER_EXPORT
 void clutter_seat_bell_notify (ClutterSeat *seat);
 
diff --git a/src/backends/native/meta-seat-native.c b/src/backends/native/meta-seat-native.c
index ecff929bd8..fa984fd1b3 100644
--- a/src/backends/native/meta-seat-native.c
+++ b/src/backends/native/meta-seat-native.c
@@ -2636,17 +2636,12 @@ meta_seat_native_get_keyboard (ClutterSeat *seat)
   return seat_native->core_keyboard;
 }
 
-static GList *
-meta_seat_native_list_devices (ClutterSeat *seat)
+static const GList *
+meta_seat_native_peek_devices (ClutterSeat *seat)
 {
   MetaSeatNative *seat_native = META_SEAT_NATIVE (seat);
-  GList *devices = NULL;
-  GSList *l;
-
-  for (l = seat_native->devices; l; l = l->next)
-    devices = g_list_prepend (devices, l->data);
 
-  return devices;
+  return (const GList *) seat_native->devices;
 }
 
 static void
@@ -2771,7 +2766,7 @@ meta_seat_native_class_init (MetaSeatNativeClass *klass)
 
   seat_class->get_pointer = meta_seat_native_get_pointer;
   seat_class->get_keyboard = meta_seat_native_get_keyboard;
-  seat_class->list_devices = meta_seat_native_list_devices;
+  seat_class->peek_devices = meta_seat_native_peek_devices;
   seat_class->bell_notify = meta_seat_native_bell_notify;
   seat_class->get_keymap = meta_seat_native_get_keymap;
   seat_class->copy_event_data = meta_seat_native_copy_event_data;
diff --git a/src/backends/x11/meta-seat-x11.c b/src/backends/x11/meta-seat-x11.c
index f20cac1481..1a29bbbac7 100644
--- a/src/backends/x11/meta-seat-x11.c
+++ b/src/backends/x11/meta-seat-x11.c
@@ -1471,16 +1471,12 @@ meta_seat_x11_get_keyboard (ClutterSeat *seat)
   return seat_x11->core_keyboard;
 }
 
-static GList *
-meta_seat_x11_list_devices (ClutterSeat *seat)
+static const GList *
+meta_seat_x11_peek_devices (ClutterSeat *seat)
 {
   MetaSeatX11 *seat_x11 = META_SEAT_X11 (seat);
-  GList *retval = NULL, *l;
 
-  for (l = seat_x11->devices; l; l = l->next)
-    retval = g_list_prepend (retval, l->data);
-
-  return retval;
+  return (const GList *) seat_x11->devices;
 }
 
 static void
@@ -1565,7 +1561,7 @@ meta_seat_x11_class_init (MetaSeatX11Class *klass)
 
   seat_class->get_pointer = meta_seat_x11_get_pointer;
   seat_class->get_keyboard = meta_seat_x11_get_keyboard;
-  seat_class->list_devices = meta_seat_x11_list_devices;
+  seat_class->peek_devices = meta_seat_x11_peek_devices;
   seat_class->bell_notify = meta_seat_x11_bell_notify;
   seat_class->get_keymap = meta_seat_x11_get_keymap;
   seat_class->copy_event_data = meta_seat_x11_copy_event_data;


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