summaryrefslogtreecommitdiff
path: root/gnome-settings-daemon
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2008-12-17 16:09:26 +0000
committerRay Strode <halfline@src.gnome.org>2008-12-17 16:09:26 +0000
commit018a7a72afc38d11919514513bfda03add273d45 (patch)
tree5cff83906820c3225c063dd6e9df9aef25132967 /gnome-settings-daemon
parentfd0c074e53244ab9c4242ff36b9b9e4added8def (diff)
downloadgnome-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.c22
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;