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);
}
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);
}

View File

@ -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__ */

View File

@ -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

View File

@ -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);

View File

@ -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)
{

View File

@ -93,10 +93,11 @@ struct _GSettingsBackendClass
GPermission * (* get_permission) (GSettingsBackend *backend,
const gchar *path);
GSettingsBackend * (* delay) (GSettingsBackend *backend);
void (* apply) (GSettingsBackend *backend);
void (* revert) (GSettingsBackend *backend);
gpointer padding[22];
gpointer padding[21];
};
struct _GSettingsBackend

View File

@ -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);