diff options
author | Robert Ancell <robert.ancell@canonical.com> | 2011-09-02 16:09:37 +1000 |
---|---|---|
committer | Robert Ancell <robert.ancell@canonical.com> | 2011-09-02 16:09:37 +1000 |
commit | e9ccaec460ca70f3618da84b522328c47802bdc6 (patch) | |
tree | 3cade7341daadde24424bd01c5ad6a239bd4671a /src/lightdm.c | |
parent | 8cfa12866b93f8a0c9b9c36f2ca6a0d458f039c6 (diff) | |
download | lightdm-e9ccaec460ca70f3618da84b522328c47802bdc6.tar.gz |
Tidy up the display signals
Diffstat (limited to 'src/lightdm.c')
-rw-r--r-- | src/lightdm.c | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/src/lightdm.c b/src/lightdm.c index dcfb2d5b..405b8adb 100644 --- a/src/lightdm.c +++ b/src/lightdm.c @@ -482,12 +482,15 @@ bus_entry_free (gpointer data) g_free (entry); } -static void -session_created_cb (Display *display, Session *session, Seat *seat) +static gboolean +start_session_cb (Display *display, Seat *seat) { + Session *session; BusEntry *seat_entry; gchar *path; + session = display_get_session (display); + seat_entry = g_hash_table_lookup (seat_bus_entries, seat); process_set_env (PROCESS (session), "XDG_SEAT_PATH", seat_entry->path); @@ -495,9 +498,17 @@ session_created_cb (Display *display, Session *session, Seat *seat) session_index++; process_set_env (PROCESS (session), "XDG_SESSION_PATH", path); g_free (path); + + return FALSE; } static void +session_stopped_cb (Session *session, Seat *seat) +{ + g_hash_table_remove (session_bus_entries, session); +} + +static gboolean session_started_cb (Display *display, Seat *seat) { static const GDBusInterfaceVTable session_vtable = @@ -510,6 +521,8 @@ session_started_cb (Display *display, Seat *seat) session = display_get_session (display); + g_signal_connect (session, "stopped", G_CALLBACK (session_stopped_cb), seat); + seat_entry = g_hash_table_lookup (seat_bus_entries, seat); entry = bus_entry_new (process_get_env (PROCESS (session), "XDG_SESSION_PATH"), seat_entry ? seat_entry->path : NULL, "SessionRemoved"); g_hash_table_insert (session_bus_entries, g_object_ref (session), entry); @@ -527,20 +540,15 @@ session_started_cb (Display *display, Seat *seat) "SessionAdded", g_variant_new ("(o)", entry->path), NULL); -} -static void -session_stopped_cb (Display *display) -{ - g_hash_table_remove (session_bus_entries, display_get_session (display)); + return FALSE; } static void display_added_cb (Seat *seat, Display *display) { - g_signal_connect (display, "session-created", G_CALLBACK (session_created_cb), seat); - g_signal_connect (display, "session-started", G_CALLBACK (session_started_cb), seat); - g_signal_connect (display, "session-stopped", G_CALLBACK (session_stopped_cb), NULL); + g_signal_connect (display, "start-session", G_CALLBACK (start_session_cb), seat); + g_signal_connect_after (display, "start-session", G_CALLBACK (session_started_cb), seat); } static void |