From 389dc42d9d48398dca9c3a6c91dd872b9766d505 Mon Sep 17 00:00:00 2001 From: Richard Hult Date: Thu, 10 Feb 2005 22:17:29 +0000 Subject: Exit cleanly when disconnected. --- ChangeLog | 8 ++++++++ configure.in | 2 +- gconf/gconfd-dbus.c | 29 ++++++++++++++++++++++++++++- 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8ccfc936..5c8f54a2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2005-02-10 Richard Hult + + * configure.in: Bump version to 2.6.4.3. + + * gconf/gconfd-dbus.c (server_filter_func, gconfd_dbus_init): + Don't exit on disconnect, handle Disconnect signal and exit + cleanly. + 2005-01-27 Mikael Hallendal * gconf/gconf-database-dbus.c: (database_filter_func), diff --git a/configure.in b/configure.in index 7910dd21..c3e8be3c 100644 --- a/configure.in +++ b/configure.in @@ -4,7 +4,7 @@ AC_INIT(gconf/gconf.h) AM_CONFIG_HEADER(config.h) -AM_INIT_AUTOMAKE(GConf, 2.6.4.2) +AM_INIT_AUTOMAKE(GConf, 2.6.4.3) AM_MAINTAINER_MODE diff --git a/gconf/gconfd-dbus.c b/gconf/gconfd-dbus.c index ddde7d07..2cdd49af 100644 --- a/gconf/gconfd-dbus.c +++ b/gconf/gconfd-dbus.c @@ -40,6 +40,9 @@ static void server_unregistered_func (DBusConnection *connection, static DBusHandlerResult server_message_func (DBusConnection *connection, DBusMessage *message, void *user_data); +static DBusHandlerResult server_filter_func (DBusConnection *connection, + DBusMessage *message, + void *user_data); static void server_handle_get_db (DBusConnection *connection, DBusMessage *message); static void server_handle_shutdown (DBusConnection *connection, @@ -47,6 +50,7 @@ static void server_handle_shutdown (DBusConnection *connection, static void server_handle_get_default_db (DBusConnection *connection, DBusMessage *message); + static DBusObjectPathVTable server_vtable = { server_unregistered_func, @@ -101,6 +105,21 @@ server_message_func (DBusConnection *connection, return DBUS_HANDLER_RESULT_HANDLED; } +static DBusHandlerResult +server_filter_func (DBusConnection *connection, + DBusMessage *message, + void *user_data) +{ + if (dbus_message_is_signal (message, + DBUS_INTERFACE_ORG_FREEDESKTOP_LOCAL, + "Disconnected")) { + /* Exit cleanly. */ + gconf_main_quit (); + } + + return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; +} + static void server_real_handle_get_db (DBusConnection *connection, DBusMessage *message, @@ -198,7 +217,15 @@ gconfd_dbus_init (void) return FALSE; } - /* Add filter for ServiceOwnerChanged so we get notified when the clients go away. */ + /* We handle exiting ourselves on disconnect. */ + dbus_connection_set_exit_on_disconnect (bus_conn, FALSE); + + /* Add message filter to handle Disconnected. */ + dbus_connection_add_filter (bus_conn, + (DBusHandleMessageFunction) server_filter_func, + NULL, NULL); + + /* Add rule for ServiceOwnerChanged so we get notified when the clients go away. */ dbus_bus_add_match (bus_conn, SERVICE_OWNER_CHANGED_RULE, NULL); dbus_bus_acquire_service (bus_conn, GCONF_DBUS_SERVICE, 0, &error); -- cgit v1.2.1