diff options
author | Richard Hult <rhult@src.gnome.org> | 2005-02-10 22:17:29 +0000 |
---|---|---|
committer | Richard Hult <rhult@src.gnome.org> | 2005-02-10 22:17:29 +0000 |
commit | 389dc42d9d48398dca9c3a6c91dd872b9766d505 (patch) | |
tree | 927da1e0d6a5bb1ce02dfb23249735d5cc31c725 | |
parent | 6139d00ed85916a8001e6c035a5bbba50af87c1c (diff) | |
download | gconf-dbus-2-6.tar.gz |
Exit cleanly when disconnected.GCONF_DBUS_2_6_4_3gconf-dbus-2-6
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | configure.in | 2 | ||||
-rw-r--r-- | gconf/gconfd-dbus.c | 29 |
3 files changed, 37 insertions, 2 deletions
@@ -1,3 +1,11 @@ +2005-02-10 Richard Hult <richard@imendio.com> + + * 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 <micke@imendio.com> * 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); |