mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-24 11:12:11 +01:00
GSettingsBackend: add 'delay' vfunc
This vfunc gets a delayed settings backend appropriate for use with this type of GSettingsBackend.
This commit is contained in:
parent
fecac16dcf
commit
c16ab82d7b
@ -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);
|
||||
}
|
||||
|
@ -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__ */
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -65,38 +65,39 @@ struct _GSettingsBackendClass
|
||||
{
|
||||
GObjectClass parent_class;
|
||||
|
||||
GVariant * (*read) (GSettingsBackend *backend,
|
||||
GVariant * (* read) (GSettingsBackend *backend,
|
||||
const gchar *key,
|
||||
const GVariantType *expected_type,
|
||||
gboolean default_value);
|
||||
|
||||
gboolean (*get_writable) (GSettingsBackend *backend,
|
||||
gboolean (* get_writable) (GSettingsBackend *backend,
|
||||
const gchar *key);
|
||||
|
||||
gboolean (*write) (GSettingsBackend *backend,
|
||||
gboolean (* write) (GSettingsBackend *backend,
|
||||
const gchar *key,
|
||||
GVariant *value,
|
||||
gpointer origin_tag);
|
||||
gboolean (*write_tree) (GSettingsBackend *backend,
|
||||
gboolean (* write_tree) (GSettingsBackend *backend,
|
||||
GTree *tree,
|
||||
gpointer origin_tag);
|
||||
void (*reset) (GSettingsBackend *backend,
|
||||
void (* reset) (GSettingsBackend *backend,
|
||||
const gchar *key,
|
||||
gpointer origin_tag);
|
||||
|
||||
void (*subscribe) (GSettingsBackend *backend,
|
||||
void (* subscribe) (GSettingsBackend *backend,
|
||||
const gchar *name);
|
||||
void (*unsubscribe) (GSettingsBackend *backend,
|
||||
void (* unsubscribe) (GSettingsBackend *backend,
|
||||
const gchar *name);
|
||||
void (*sync) (GSettingsBackend *backend);
|
||||
void (* sync) (GSettingsBackend *backend);
|
||||
|
||||
GPermission * (*get_permission) (GSettingsBackend *backend,
|
||||
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
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user