summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lightdm.c44
-rw-r--r--tests/scripts/dbus.conf4
2 files changed, 33 insertions, 15 deletions
diff --git a/src/lightdm.c b/src/lightdm.c
index 886eae81..fdebd682 100644
--- a/src/lightdm.c
+++ b/src/lightdm.c
@@ -611,11 +611,6 @@ seat_bus_entry_free (gpointer data)
{
SeatBusEntry *entry = data;
- g_dbus_connection_unregister_object (bus, entry->bus_id);
-
- emit_object_value_changed (bus, "/org/freedesktop/DisplayManager", "org.freedesktop.DisplayManager", "Seats", get_seat_list ());
- emit_object_signal (bus, "/org/freedesktop/DisplayManager", "SeatRemoved", entry->path);
-
g_free (entry->path);
g_free (entry);
}
@@ -625,14 +620,6 @@ session_bus_entry_free (gpointer data)
{
SessionBusEntry *entry = data;
- g_dbus_connection_unregister_object (bus, entry->bus_id);
-
- emit_object_value_changed (bus, "/org/freedesktop/DisplayManager", "org.freedesktop.DisplayManager", "Sessions", get_session_list (NULL));
- emit_object_signal (bus, "/org/freedesktop/DisplayManager", "SessionRemoved", entry->path);
-
- emit_object_value_changed (bus, entry->seat_path, "org.freedesktop.DisplayManager.Seat", "Sessions", get_session_list (entry->seat_path));
- emit_object_signal (bus, entry->seat_path, "SessionRemoved", entry->path);
-
g_free (entry->path);
g_free (entry->seat_path);
g_free (entry);
@@ -685,8 +672,28 @@ running_user_session_cb (Seat *seat, Session *session)
static void
session_removed_cb (Seat *seat, Session *session)
{
+ SessionBusEntry *entry;
+ gchar *seat_path = NULL;
+
g_signal_handlers_disconnect_matched (session, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, seat);
+
+ entry = g_hash_table_lookup (session_bus_entries, session);
+ if (entry)
+ {
+ g_dbus_connection_unregister_object (bus, entry->bus_id);
+ emit_object_signal (bus, "/org/freedesktop/DisplayManager", "SessionRemoved", entry->path);
+ emit_object_signal (bus, entry->seat_path, "SessionRemoved", entry->path);
+ seat_path = g_strdup (entry->seat_path);
+ }
+
g_hash_table_remove (session_bus_entries, session);
+
+ if (seat_path)
+ {
+ emit_object_value_changed (bus, "/org/freedesktop/DisplayManager", "org.freedesktop.DisplayManager", "Sessions", get_session_list (NULL));
+ emit_object_value_changed (bus, seat_path, "org.freedesktop.DisplayManager.Seat", "Sessions", get_session_list (seat_path));
+ g_free (seat_path);
+ }
}
static void
@@ -730,7 +737,18 @@ seat_added_cb (DisplayManager *display_manager, Seat *seat)
static void
seat_removed_cb (DisplayManager *display_manager, Seat *seat)
{
+ SeatBusEntry *entry;
+
+ entry = g_hash_table_lookup (seat_bus_entries, seat);
+ if (entry)
+ {
+ g_dbus_connection_unregister_object (bus, entry->bus_id);
+ emit_object_signal (bus, "/org/freedesktop/DisplayManager", "SeatRemoved", entry->path);
+ }
+
g_hash_table_remove (seat_bus_entries, seat);
+
+ emit_object_value_changed (bus, "/org/freedesktop/DisplayManager", "org.freedesktop.DisplayManager", "Seats", get_seat_list ());
}
static gboolean
diff --git a/tests/scripts/dbus.conf b/tests/scripts/dbus.conf
index 5f2ce05b..e38c9c09 100644
--- a/tests/scripts/dbus.conf
+++ b/tests/scripts/dbus.conf
@@ -64,10 +64,10 @@ user-session=default
#?XSERVER-0 TERMINATE SIGNAL=15
# Removal is reported via D-Bus
-#?RUNNER DBUS-PROPERTIES-CHANGED PATH=/org/freedesktop/DisplayManager INTERFACE=org.freedesktop.DisplayManager CHANGED=Sessions
#?RUNNER DBUS-SIGNAL PATH=/org/freedesktop/DisplayManager INTERFACE=org.freedesktop.DisplayManager NAME=SessionRemoved
-#?RUNNER DBUS-PROPERTIES-CHANGED PATH=/org/freedesktop/DisplayManager/Seat0 INTERFACE=org.freedesktop.DisplayManager.Seat CHANGED=Sessions
#?RUNNER DBUS-SIGNAL PATH=/org/freedesktop/DisplayManager/Seat0 INTERFACE=org.freedesktop.DisplayManager NAME=SessionRemoved
+#?RUNNER DBUS-PROPERTIES-CHANGED PATH=/org/freedesktop/DisplayManager INTERFACE=org.freedesktop.DisplayManager CHANGED=Sessions
+#?RUNNER DBUS-PROPERTIES-CHANGED PATH=/org/freedesktop/DisplayManager/Seat0 INTERFACE=org.freedesktop.DisplayManager.Seat CHANGED=Sessions
# X server starts
#?XSERVER-0 START VT=7 SEAT=seat0