GSettingsBackend: add 'delay' vfunc

This vfunc gets a delayed settings backend appropriate for use with this
type of GSettingsBackend.
This commit is contained in:
Ryan Lortie 2011-12-29 15:24:16 -05:00
parent fecac16dcf
commit c16ab82d7b
7 changed files with 51 additions and 35 deletions

View File

@ -270,7 +270,7 @@ g_delayed_settings_backend_init (GDelayedSettingsBackend *delayed)
g_mutex_init (&delayed->priv->lock); g_mutex_init (&delayed->priv->lock);
} }
GDelayedSettingsBackend * GSettingsBackend *
g_delayed_settings_backend_new (GSettingsBackend *backend) g_delayed_settings_backend_new (GSettingsBackend *backend)
{ {
GDelayedSettingsBackend *delayed; 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); g_signal_connect_object (delayed->priv->backend, "event", G_CALLBACK (g_delayed_settings_got_event), delayed, 0);
return delayed; return G_SETTINGS_BACKEND (delayed);
} }

View File

@ -59,6 +59,6 @@ struct _GDelayedSettingsBackend
G_GNUC_INTERNAL G_GNUC_INTERNAL
GType g_delayed_settings_backend_get_type (void); GType g_delayed_settings_backend_get_type (void);
G_GNUC_INTERNAL 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__ */ #endif /* __G_DELAYED_SETTINGS_BACKEND_H__ */

View File

@ -1132,7 +1132,7 @@ g_file_descriptor_based_get_type
g_file_descriptor_based_get_fd g_file_descriptor_based_get_fd
#endif #endif
g_settings_backend_get_type g_settings_backend_get_type
g_settings_backend_report_event g_settings_backend_event
g_settings_backend_set_has_unapplied g_settings_backend_set_has_unapplied
g_settings_backend_changed g_settings_backend_changed
g_settings_backend_flatten_tree g_settings_backend_flatten_tree

View File

@ -27,7 +27,6 @@
#include "gsettings.h" #include "gsettings.h"
#include "gdelayedsettingsbackend.h"
#include "gsettingsbackendinternal.h" #include "gsettingsbackendinternal.h"
#include "gsettings-mapping.h" #include "gsettings-mapping.h"
#include "gsettingsschema-internal.h" #include "gsettingsschema-internal.h"
@ -1962,19 +1961,18 @@ g_settings_set_strv (GSettings *settings,
void void
g_settings_delay (GSettings *settings) g_settings_delay (GSettings *settings)
{ {
GDelayedSettingsBackend *delayed; GSettingsBackend *delayed;
g_return_if_fail (G_IS_SETTINGS (settings)); g_return_if_fail (G_IS_SETTINGS (settings));
if (settings->priv->delayed_apply) if (settings->priv->delayed_apply)
return; 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_signal_handlers_disconnect_by_func (settings->priv->backend, g_settings_got_event, settings);
g_object_unref (settings->priv->backend); 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, "event", G_CALLBACK (g_settings_got_event), settings, 0);
g_signal_connect_object (delayed, "notify::has-unapplied", g_signal_connect_object (delayed, "notify::has-unapplied",
G_CALLBACK (g_settings_got_has_unapplied_notify), settings, 0); G_CALLBACK (g_settings_got_has_unapplied_notify), settings, 0);

View File

@ -24,6 +24,7 @@
#include "config.h" #include "config.h"
#include "gsettingsbackendinternal.h" #include "gsettingsbackendinternal.h"
#include "gdelayedsettingsbackend.h"
#include "gsimplepermission.h" #include "gsimplepermission.h"
#include "giomodule-priv.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 static void
ignore_apply (GSettingsBackend *backend) ignore_apply (GSettingsBackend *backend)
{ {
@ -728,6 +735,7 @@ g_settings_backend_class_init (GSettingsBackendClass *class)
class->subscribe = ignore_subscription; class->subscribe = ignore_subscription;
class->unsubscribe = ignore_subscription; class->unsubscribe = ignore_subscription;
class->delay = g_settings_backend_real_delay;
class->apply = ignore_apply; class->apply = ignore_apply;
class->revert = 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 gboolean
g_settings_backend_get_has_unapplied (GSettingsBackend *backend) g_settings_backend_get_has_unapplied (GSettingsBackend *backend)
{ {

View File

@ -65,38 +65,39 @@ struct _GSettingsBackendClass
{ {
GObjectClass parent_class; GObjectClass parent_class;
GVariant * (*read) (GSettingsBackend *backend, GVariant * (* read) (GSettingsBackend *backend,
const gchar *key, const gchar *key,
const GVariantType *expected_type, const GVariantType *expected_type,
gboolean default_value); gboolean default_value);
gboolean (*get_writable) (GSettingsBackend *backend, gboolean (* get_writable) (GSettingsBackend *backend,
const gchar *key); const gchar *key);
gboolean (*write) (GSettingsBackend *backend, gboolean (* write) (GSettingsBackend *backend,
const gchar *key, const gchar *key,
GVariant *value, GVariant *value,
gpointer origin_tag); gpointer origin_tag);
gboolean (*write_tree) (GSettingsBackend *backend, gboolean (* write_tree) (GSettingsBackend *backend,
GTree *tree, GTree *tree,
gpointer origin_tag); gpointer origin_tag);
void (*reset) (GSettingsBackend *backend, void (* reset) (GSettingsBackend *backend,
const gchar *key, const gchar *key,
gpointer origin_tag); gpointer origin_tag);
void (*subscribe) (GSettingsBackend *backend, void (* subscribe) (GSettingsBackend *backend,
const gchar *name); const gchar *name);
void (*unsubscribe) (GSettingsBackend *backend, void (* unsubscribe) (GSettingsBackend *backend,
const gchar *name); const gchar *name);
void (*sync) (GSettingsBackend *backend); void (* sync) (GSettingsBackend *backend);
GPermission * (*get_permission) (GSettingsBackend *backend, GPermission * (* get_permission) (GSettingsBackend *backend,
const gchar *path); const gchar *path);
void (*apply) (GSettingsBackend *backend); GSettingsBackend * (* delay) (GSettingsBackend *backend);
void (*revert) (GSettingsBackend *backend); void (* apply) (GSettingsBackend *backend);
void (* revert) (GSettingsBackend *backend);
gpointer padding[22]; gpointer padding[21];
}; };
struct _GSettingsBackend struct _GSettingsBackend

View File

@ -71,6 +71,8 @@ G_GNUC_INTERNAL
GPermission * g_settings_backend_get_permission (GSettingsBackend *backend, GPermission * g_settings_backend_get_permission (GSettingsBackend *backend,
const gchar *path); const gchar *path);
G_GNUC_INTERNAL G_GNUC_INTERNAL
GSettingsBackend * g_settings_backend_delay (GSettingsBackend *backend);
G_GNUC_INTERNAL
gboolean g_settings_backend_get_has_unapplied (GSettingsBackend *backend); gboolean g_settings_backend_get_has_unapplied (GSettingsBackend *backend);
G_GNUC_INTERNAL G_GNUC_INTERNAL
void g_settings_backend_apply (GSettingsBackend *backend); void g_settings_backend_apply (GSettingsBackend *backend);