diff options
author | Ray Strode <rstrode@redhat.com> | 2008-12-17 16:09:26 +0000 |
---|---|---|
committer | Ray Strode <halfline@src.gnome.org> | 2008-12-17 16:09:26 +0000 |
commit | 018a7a72afc38d11919514513bfda03add273d45 (patch) | |
tree | 5cff83906820c3225c063dd6e9df9aef25132967 /gnome-settings-daemon | |
parent | fd0c074e53244ab9c4242ff36b9b9e4added8def (diff) | |
download | gnome-settings-daemon-018a7a72afc38d11919514513bfda03add273d45.tar.gz |
Shutdown properly when bus goes away. Previously we were just letting
2008-12-07 Ray Strode <rstrode@redhat.com>
Shutdown properly when bus goes away. Previously
we were just letting libdbus call exit(1) for us.
* gnome-settings-daemon/main.c (get_session_bus):
Set up a filter function to catch disconection
events.
(bus_message_handler): quit event loop when
disconnected from bus.
svn path=/trunk/; revision=636
Diffstat (limited to 'gnome-settings-daemon')
-rw-r--r-- | gnome-settings-daemon/main.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/gnome-settings-daemon/main.c b/gnome-settings-daemon/main.c index dc5f4984..50d8a8ea 100644 --- a/gnome-settings-daemon/main.c +++ b/gnome-settings-daemon/main.c @@ -114,6 +114,21 @@ acquire_name_on_proxy (DBusGProxy *bus_proxy) return ret; } +static DBusHandlerResult +bus_message_handler (DBusConnection *connection, + DBusMessage *message, + void *user_data) +{ + if (dbus_message_is_signal (message, + DBUS_INTERFACE_LOCAL, + "Disconnected")) { + gtk_main_quit (); + return DBUS_HANDLER_RESULT_HANDLED; + } + + return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; +} + static DBusGConnection * get_session_bus (void) { @@ -131,7 +146,12 @@ get_session_bus (void) } connection = dbus_g_connection_get_connection (bus); - dbus_connection_set_exit_on_disconnect (connection, TRUE); + dbus_connection_add_filter (connection, + (DBusHandleMessageFunction) + bus_message_handler, + NULL, NULL); + + dbus_connection_set_exit_on_disconnect (connection, FALSE); out: return bus; |