From 1dec512a66fddfd8b4b265231b00d4f918b16cef Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Tue, 1 Sep 2015 10:21:26 -0400 Subject: [PATCH] Revert "GSettings: delay backend subscription" This reverts commit 8ff5668a458344da22d30491e3ce726d861b3619. This change has had considerable fallout, and there was no follow-up to address it. https://bugzilla.gnome.org/show_bug.cgi?id=733791 --- gio/gsettings-tool.c | 13 ------------ gio/gsettings.c | 47 ++++---------------------------------------- 2 files changed, 4 insertions(+), 56 deletions(-) diff --git a/gio/gsettings-tool.c b/gio/gsettings-tool.c index 2220fef7e..6a302ce68 100644 --- a/gio/gsettings-tool.c +++ b/gio/gsettings-tool.c @@ -412,8 +412,6 @@ value_changed (GSettings *settings, static void gsettings_monitor (void) { - gchar **keys; - if (global_key) { gchar *name; @@ -424,17 +422,6 @@ gsettings_monitor (void) else g_signal_connect (global_settings, "changed", G_CALLBACK (value_changed), NULL); - /* We have to read a value from GSettings before we start receiving - * signals... - * - * If the schema has zero keys then we won't be displaying any - * notifications anyway. - */ - keys = g_settings_schema_list_keys (global_schema); - if (keys[0]) - g_variant_unref (g_settings_get_value (global_settings, keys[0])); - g_strfreev (keys); - for (;;) g_main_context_iteration (NULL, TRUE); } diff --git a/gio/gsettings.c b/gio/gsettings.c index 35e944141..03aecde4e 100644 --- a/gio/gsettings.c +++ b/gio/gsettings.c @@ -84,16 +84,6 @@ * the names must begin with a lowercase character, must not end * with a '-', and must not contain consecutive dashes. * - * GSettings supports change notification. The primary mechanism to - * watch for changes is to connect to the "changed" signal. You can - * optionally watch for changes on only a single key by using a signal - * detail. Signals are only guaranteed to be emitted for a given key - * after you have read the value of that key while a signal handler was - * connected for that key. Signals may or may not be emitted in the - * case that the key "changed" to the value that you had previously - * read. Signals may be reported in additional cases as well and the - * "changed" signal should really be treated as "may have changed". - * * Similar to GConf, the default values in GSettings schemas can be * localized, but the localized values are stored in gettext catalogs * and looked up with the domain that is specified in the @@ -348,8 +338,6 @@ struct _GSettingsPrivate GSettingsSchema *schema; gchar *path; - gboolean is_subscribed; - GDelayedSettingsBackend *delayed; }; @@ -425,26 +413,6 @@ g_settings_real_writable_change_event (GSettings *settings, return FALSE; } -static gboolean -g_settings_has_signal_handlers (GSettings *settings) -{ - GSettingsClass *class = G_SETTINGS_GET_CLASS (settings); - - if (class->change_event != g_settings_real_change_event || - class->writable_change_event != g_settings_real_writable_change_event) - return TRUE; - - if (g_signal_has_handler_pending (settings, g_settings_signals[SIGNAL_WRITABLE_CHANGE_EVENT], 0, TRUE) || - g_signal_has_handler_pending (settings, g_settings_signals[SIGNAL_WRITABLE_CHANGED], 0, TRUE) || - g_signal_has_handler_pending (settings, g_settings_signals[SIGNAL_CHANGE_EVENT], 0, TRUE) || - g_signal_has_handler_pending (settings, g_settings_signals[SIGNAL_CHANGED], 0, TRUE)) - return TRUE; - - /* None of that? Then surely nobody is watching.... */ - return FALSE; -} - - static void settings_backend_changed (GObject *target, GSettingsBackend *backend, @@ -711,6 +679,8 @@ g_settings_constructed (GObject *object) g_settings_backend_watch (settings->priv->backend, &listener_vtable, G_OBJECT (settings), settings->priv->main_context); + g_settings_backend_subscribe (settings->priv->backend, + settings->priv->path); } static void @@ -718,10 +688,8 @@ g_settings_finalize (GObject *object) { GSettings *settings = G_SETTINGS (object); - if (settings->priv->is_subscribed) - g_settings_backend_unsubscribe (settings->priv->backend, - settings->priv->path); - + g_settings_backend_unsubscribe (settings->priv->backend, + settings->priv->path); g_main_context_unref (settings->priv->main_context); g_object_unref (settings->priv->backend); g_settings_schema_unref (settings->priv->schema); @@ -1186,13 +1154,6 @@ g_settings_read_from_backend (GSettings *settings, GVariant *fixup; gchar *path; - /* If we are not yet watching for changes, consider doing it now... */ - if (!settings->priv->is_subscribed && g_settings_has_signal_handlers (settings)) - { - g_settings_backend_subscribe (settings->priv->backend, settings->priv->path); - settings->priv->is_subscribed = TRUE; - } - path = g_strconcat (settings->priv->path, key->name, NULL); if (user_value_only) value = g_settings_backend_read_user_value (settings->priv->backend, path, key->type);