mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-13 15:56:23 +01:00
Revert "GSettings: delay backend subscription"
This reverts commit 8ff5668a45
.
This change has had considerable fallout, and there was no
follow-up to address it.
https://bugzilla.gnome.org/show_bug.cgi?id=733791
This commit is contained in:
parent
7fff264777
commit
1dec512a66
@ -412,8 +412,6 @@ value_changed (GSettings *settings,
|
|||||||
static void
|
static void
|
||||||
gsettings_monitor (void)
|
gsettings_monitor (void)
|
||||||
{
|
{
|
||||||
gchar **keys;
|
|
||||||
|
|
||||||
if (global_key)
|
if (global_key)
|
||||||
{
|
{
|
||||||
gchar *name;
|
gchar *name;
|
||||||
@ -424,17 +422,6 @@ gsettings_monitor (void)
|
|||||||
else
|
else
|
||||||
g_signal_connect (global_settings, "changed", G_CALLBACK (value_changed), NULL);
|
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 (;;)
|
for (;;)
|
||||||
g_main_context_iteration (NULL, TRUE);
|
g_main_context_iteration (NULL, TRUE);
|
||||||
}
|
}
|
||||||
|
@ -84,16 +84,6 @@
|
|||||||
* the names must begin with a lowercase character, must not end
|
* the names must begin with a lowercase character, must not end
|
||||||
* with a '-', and must not contain consecutive dashes.
|
* 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
|
* Similar to GConf, the default values in GSettings schemas can be
|
||||||
* localized, but the localized values are stored in gettext catalogs
|
* localized, but the localized values are stored in gettext catalogs
|
||||||
* and looked up with the domain that is specified in the
|
* and looked up with the domain that is specified in the
|
||||||
@ -348,8 +338,6 @@ struct _GSettingsPrivate
|
|||||||
GSettingsSchema *schema;
|
GSettingsSchema *schema;
|
||||||
gchar *path;
|
gchar *path;
|
||||||
|
|
||||||
gboolean is_subscribed;
|
|
||||||
|
|
||||||
GDelayedSettingsBackend *delayed;
|
GDelayedSettingsBackend *delayed;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -425,26 +413,6 @@ g_settings_real_writable_change_event (GSettings *settings,
|
|||||||
return FALSE;
|
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
|
static void
|
||||||
settings_backend_changed (GObject *target,
|
settings_backend_changed (GObject *target,
|
||||||
GSettingsBackend *backend,
|
GSettingsBackend *backend,
|
||||||
@ -711,6 +679,8 @@ g_settings_constructed (GObject *object)
|
|||||||
g_settings_backend_watch (settings->priv->backend,
|
g_settings_backend_watch (settings->priv->backend,
|
||||||
&listener_vtable, G_OBJECT (settings),
|
&listener_vtable, G_OBJECT (settings),
|
||||||
settings->priv->main_context);
|
settings->priv->main_context);
|
||||||
|
g_settings_backend_subscribe (settings->priv->backend,
|
||||||
|
settings->priv->path);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -718,10 +688,8 @@ g_settings_finalize (GObject *object)
|
|||||||
{
|
{
|
||||||
GSettings *settings = G_SETTINGS (object);
|
GSettings *settings = G_SETTINGS (object);
|
||||||
|
|
||||||
if (settings->priv->is_subscribed)
|
g_settings_backend_unsubscribe (settings->priv->backend,
|
||||||
g_settings_backend_unsubscribe (settings->priv->backend,
|
settings->priv->path);
|
||||||
settings->priv->path);
|
|
||||||
|
|
||||||
g_main_context_unref (settings->priv->main_context);
|
g_main_context_unref (settings->priv->main_context);
|
||||||
g_object_unref (settings->priv->backend);
|
g_object_unref (settings->priv->backend);
|
||||||
g_settings_schema_unref (settings->priv->schema);
|
g_settings_schema_unref (settings->priv->schema);
|
||||||
@ -1186,13 +1154,6 @@ g_settings_read_from_backend (GSettings *settings,
|
|||||||
GVariant *fixup;
|
GVariant *fixup;
|
||||||
gchar *path;
|
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);
|
path = g_strconcat (settings->priv->path, key->name, NULL);
|
||||||
if (user_value_only)
|
if (user_value_only)
|
||||||
value = g_settings_backend_read_user_value (settings->priv->backend, path, key->type);
|
value = g_settings_backend_read_user_value (settings->priv->backend, path, key->type);
|
||||||
|
Loading…
Reference in New Issue
Block a user