]> rtime.felk.cvut.cz Git - sojka/lightdm.git/commitdiff
Simplify finding seats by name
authorRobert Ancell <robert.ancell@canonical.com>
Wed, 27 Aug 2014 02:57:03 +0000 (14:57 +1200)
committerRobert Ancell <robert.ancell@canonical.com>
Wed, 27 Aug 2014 02:57:03 +0000 (14:57 +1200)
src/display-manager.c
src/display-manager.h
src/lightdm.c

index f8c8d2dfa61679e4cfac8a3c1bc19764ddd466c7..05c46bb075930300d7135afcdaa05f22366a4a63 100644 (file)
@@ -56,6 +56,22 @@ display_manager_get_seats (DisplayManager *manager)
     return manager->priv->seats;
 }
 
+Seat *
+display_manager_get_seat (DisplayManager *manager, const gchar *name)
+{
+    GList *link;
+
+    for (link = manager->priv->seats; link; link = link->next)
+    {
+        Seat *seat = link->data;
+
+        if (strcmp (seat_get_name (seat), name) == 0)
+            return seat;
+    }
+
+    return NULL;
+}
+
 static void
 check_stopped (DisplayManager *manager)
 {
index 0ae12dd773fbdae1d23dee4628e083562c62a8d9..48ba01f2c0e7af2669c15cd2342cc89bd2693eda 100644 (file)
@@ -46,6 +46,8 @@ gboolean display_manager_add_seat (DisplayManager *manager, Seat *seat);
 
 GList *display_manager_get_seats (DisplayManager *manager);
 
+Seat *display_manager_get_seat (DisplayManager *manager, const gchar *name);
+
 void display_manager_start (DisplayManager *manager);
 
 void display_manager_stop (DisplayManager *manager);
index d8ed96fe0ca33bb2583c09ee6acf0799e4fb9f68..1437a605073b5b7de40be306745127c1984012dd 100644 (file)
@@ -1044,27 +1044,12 @@ login1_service_seat_added_cb (Login1Service *service, Login1Seat *login1_seat)
 static void
 login1_service_seat_removed_cb (Login1Service *service, Login1Seat *login1_seat)
 {
-    GList *seats, *link;
     Seat *seat;
-    const gchar *seat_name = login1_seat_get_id (login1_seat);
-
-    /* Stop all seats matching given xdg-seat property value.
-     * Copy the list as it might be modified if a seat stops during this loop */
-    seats = g_list_copy (display_manager_get_seats (display_manager));
-
-    /* FIXME: This loop should be uneeded, provided we can ensure
-     *        there's only one Seat object in DisplayManager list
-     *        matching given Login1Seat object id. */
-    g_debug ("Seat removed from logind: %s", seat_name);
-    for (link = seats; link; link = link->next)
-    {
-        seat = link->data;
 
-        if (g_strcmp0 (seat_get_name (seat), seat_name) == 0)
-            seat_stop (seat);
-    }
-
-    g_list_free (seats);
+    g_debug ("Seat removed from logind: %s", login1_seat_get_id (login1_seat));
+    seat = display_manager_get_seat (display_manager, login1_seat_get_id (login1_seat));
+    if (seat)
+        seat_stop (seat);
 }
 
 int