From c16ab82d7be30a0877cb75545f184268b5baf6ca Mon Sep 17 00:00:00 2001 From: Ryan Lortie Date: Thu, 29 Dec 2011 15:24:16 -0500 Subject: [PATCH] GSettingsBackend: add 'delay' vfunc This vfunc gets a delayed settings backend appropriate for use with this type of GSettingsBackend. --- gio/gdelayedsettingsbackend.c | 4 +-- gio/gdelayedsettingsbackend.h | 2 +- gio/gio.symbols | 2 +- gio/gsettings.c | 8 ++--- gio/gsettingsbackend.c | 15 ++++++++++ gio/gsettingsbackend.h | 53 +++++++++++++++++----------------- gio/gsettingsbackendinternal.h | 2 ++ 7 files changed, 51 insertions(+), 35 deletions(-) diff --git a/gio/gdelayedsettingsbackend.c b/gio/gdelayedsettingsbackend.c index b0639a9b3..d176ae8da 100644 --- a/gio/gdelayedsettingsbackend.c +++ b/gio/gdelayedsettingsbackend.c @@ -270,7 +270,7 @@ g_delayed_settings_backend_init (GDelayedSettingsBackend *delayed) g_mutex_init (&delayed->priv->lock); } -GDelayedSettingsBackend * +GSettingsBackend * g_delayed_settings_backend_new (GSettingsBackend *backend) { GDelayedSettingsBackend *delayed; @@ -280,5 +280,5 @@ g_delayed_settings_backend_new (GSettingsBackend *backend) g_signal_connect_object (delayed->priv->backend, "event", G_CALLBACK (g_delayed_settings_got_event), delayed, 0); - return delayed; + return G_SETTINGS_BACKEND (delayed); } diff --git a/gio/gdelayedsettingsbackend.h b/gio/gdelayedsettingsbackend.h index aa7d4fa6a..984a42d10 100644 --- a/gio/gdelayedsettingsbackend.h +++ b/gio/gdelayedsettingsbackend.h @@ -59,6 +59,6 @@ struct _GDelayedSettingsBackend G_GNUC_INTERNAL GType g_delayed_settings_backend_get_type (void); G_GNUC_INTERNAL -GDelayedSettingsBackend * g_delayed_settings_backend_new (GSettingsBackend *backend); +GSettingsBackend * g_delayed_settings_backend_new (GSettingsBackend *backend); #endif /* __G_DELAYED_SETTINGS_BACKEND_H__ */ diff --git a/gio/gio.symbols b/gio/gio.symbols index 9907f04e6..814efa3ff 100644 --- a/gio/gio.symbols +++ b/gio/gio.symbols @@ -1132,7 +1132,7 @@ g_file_descriptor_based_get_type g_file_descriptor_based_get_fd #endif g_settings_backend_get_type -g_settings_backend_report_event +g_settings_backend_event g_settings_backend_set_has_unapplied g_settings_backend_changed g_settings_backend_flatten_tree diff --git a/gio/gsettings.c b/gio/gsettings.c index d445d019c..f549c7b75 100644 --- a/gio/gsettings.c +++ b/gio/gsettings.c @@ -27,7 +27,6 @@ #include "gsettings.h" -#include "gdelayedsettingsbackend.h" #include "gsettingsbackendinternal.h" #include "gsettings-mapping.h" #include "gsettingsschema-internal.h" @@ -1962,19 +1961,18 @@ g_settings_set_strv (GSettings *settings, void g_settings_delay (GSettings *settings) { - GDelayedSettingsBackend *delayed; + GSettingsBackend *delayed; g_return_if_fail (G_IS_SETTINGS (settings)); if (settings->priv->delayed_apply) return; - delayed = g_delayed_settings_backend_new (settings->priv->backend); - + delayed = g_settings_backend_delay (settings->priv->backend); g_signal_handlers_disconnect_by_func (settings->priv->backend, g_settings_got_event, settings); g_object_unref (settings->priv->backend); - settings->priv->backend = G_SETTINGS_BACKEND (delayed); + settings->priv->backend = delayed; g_signal_connect_object (delayed, "event", G_CALLBACK (g_settings_got_event), settings, 0); g_signal_connect_object (delayed, "notify::has-unapplied", G_CALLBACK (g_settings_got_has_unapplied_notify), settings, 0); diff --git a/gio/gsettingsbackend.c b/gio/gsettingsbackend.c index 04dc2ea4b..7bee343e4 100644 --- a/gio/gsettingsbackend.c +++ b/gio/gsettingsbackend.c @@ -24,6 +24,7 @@ #include "config.h" #include "gsettingsbackendinternal.h" +#include "gdelayedsettingsbackend.h" #include "gsimplepermission.h" #include "giomodule-priv.h" @@ -708,6 +709,12 @@ ignore_subscription (GSettingsBackend *backend, { } +static GSettingsBackend * +g_settings_backend_real_delay (GSettingsBackend *backend) +{ + return g_delayed_settings_backend_new (backend); +} + static void ignore_apply (GSettingsBackend *backend) { @@ -728,6 +735,7 @@ g_settings_backend_class_init (GSettingsBackendClass *class) class->subscribe = ignore_subscription; class->unsubscribe = ignore_subscription; + class->delay = g_settings_backend_real_delay; class->apply = ignore_apply; class->revert = ignore_apply; @@ -854,6 +862,13 @@ g_settings_backend_sync_default (void) } } +GSettingsBackend * +g_settings_backend_delay (GSettingsBackend *backend) +{ + return G_SETTINGS_BACKEND_GET_CLASS (backend) + ->delay (backend); +} + gboolean g_settings_backend_get_has_unapplied (GSettingsBackend *backend) { diff --git a/gio/gsettingsbackend.h b/gio/gsettingsbackend.h index 24653aa6f..f0da557a7 100644 --- a/gio/gsettingsbackend.h +++ b/gio/gsettingsbackend.h @@ -65,38 +65,39 @@ struct _GSettingsBackendClass { GObjectClass parent_class; - GVariant * (*read) (GSettingsBackend *backend, - const gchar *key, - const GVariantType *expected_type, - gboolean default_value); + GVariant * (* read) (GSettingsBackend *backend, + const gchar *key, + const GVariantType *expected_type, + gboolean default_value); - gboolean (*get_writable) (GSettingsBackend *backend, - const gchar *key); + gboolean (* get_writable) (GSettingsBackend *backend, + const gchar *key); - gboolean (*write) (GSettingsBackend *backend, - const gchar *key, - GVariant *value, - gpointer origin_tag); - gboolean (*write_tree) (GSettingsBackend *backend, - GTree *tree, - gpointer origin_tag); - void (*reset) (GSettingsBackend *backend, - const gchar *key, - gpointer origin_tag); + gboolean (* write) (GSettingsBackend *backend, + const gchar *key, + GVariant *value, + gpointer origin_tag); + gboolean (* write_tree) (GSettingsBackend *backend, + GTree *tree, + gpointer origin_tag); + void (* reset) (GSettingsBackend *backend, + const gchar *key, + gpointer origin_tag); - void (*subscribe) (GSettingsBackend *backend, - const gchar *name); - void (*unsubscribe) (GSettingsBackend *backend, - const gchar *name); - void (*sync) (GSettingsBackend *backend); + void (* subscribe) (GSettingsBackend *backend, + const gchar *name); + void (* unsubscribe) (GSettingsBackend *backend, + const gchar *name); + void (* sync) (GSettingsBackend *backend); - GPermission * (*get_permission) (GSettingsBackend *backend, - const gchar *path); + GPermission * (* get_permission) (GSettingsBackend *backend, + const gchar *path); - void (*apply) (GSettingsBackend *backend); - void (*revert) (GSettingsBackend *backend); + GSettingsBackend * (* delay) (GSettingsBackend *backend); + void (* apply) (GSettingsBackend *backend); + void (* revert) (GSettingsBackend *backend); - gpointer padding[22]; + gpointer padding[21]; }; struct _GSettingsBackend diff --git a/gio/gsettingsbackendinternal.h b/gio/gsettingsbackendinternal.h index 32b98c240..ac3ea3c81 100644 --- a/gio/gsettingsbackendinternal.h +++ b/gio/gsettingsbackendinternal.h @@ -71,6 +71,8 @@ G_GNUC_INTERNAL GPermission * g_settings_backend_get_permission (GSettingsBackend *backend, const gchar *path); G_GNUC_INTERNAL +GSettingsBackend * g_settings_backend_delay (GSettingsBackend *backend); +G_GNUC_INTERNAL gboolean g_settings_backend_get_has_unapplied (GSettingsBackend *backend); G_GNUC_INTERNAL void g_settings_backend_apply (GSettingsBackend *backend);