[dconf] port client library to Vala
- From: Ryan Lortie <ryanl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [dconf] port client library to Vala
- Date: Mon, 19 Jul 2010 17:53:00 +0000 (UTC)
commit 78084a0dbfd705f214f79f8e254a54f8cb1a391f
Author: Ryan Lortie <desrt desrt ca>
Date: Mon Jul 19 12:17:48 2010 -0400
port client library to Vala
- the API is now completely implemented
- update 'engine' API to be vala-bindable without annotations
- update GSettings backend to new engine API
- drop the readtype non-sense
- build/api fixups for editor and commandline tool
bin/.gitignore | 1 -
bin/Makefile.am | 2 +-
bin/dconf.vala | 25 ++
client/.gitignore | 4 +
client/Makefile.am | 13 +-
client/dconf-client.c | 620 --------------------------------------
client/dconf-client.h | 13 +-
client/dconf-client.vala | 143 +++++++++
client/dconf.vapi | 60 ----
client/engine.vapi | 32 ++
editor/Makefile.am | 4 +-
engine/dconf-engine.c | 130 ++++++---
engine/dconf-engine.h | 35 ++-
gsettings/dconfsettingsbackend.c | 30 +-
14 files changed, 350 insertions(+), 762 deletions(-)
---
diff --git a/bin/.gitignore b/bin/.gitignore
index b9cdeb5..d657c26 100644
--- a/bin/.gitignore
+++ b/bin/.gitignore
@@ -1,4 +1,3 @@
dconf
-dconf-update
*.c
*.stamp
diff --git a/bin/Makefile.am b/bin/Makefile.am
index ee64db7..8559f7c 100644
--- a/bin/Makefile.am
+++ b/bin/Makefile.am
@@ -3,6 +3,6 @@ INCLUDES = -I$(top_srcdir)/common -I$(top_srcdir)/engine -I$(top_srcdir)/client
bin_PROGRAMS = dconf
-dconf_VALAFLAGS = --pkg=gio-2.0 ../client/dconf.vapi --pkg=posix --pkg=gio-2.0
+dconf_VALAFLAGS = --vapidir ../client --pkg=gio-2.0 --pkg=posix --pkg=dconf
dconf_LDADD = $(gio_LIBS) ../client/libdconf.la
dconf_SOURCES = dconf.vala dconf-update.vala ../gvdb/gvdb-builder.c gvdb.vapi fixes.vapi
diff --git a/bin/dconf.vala b/bin/dconf.vala
index 2bc2ab1..d052a11 100644
--- a/bin/dconf.vala
+++ b/bin/dconf.vala
@@ -44,6 +44,19 @@ void do_write (DConf.Client client, string key, string val) throws Error {
client.write (key, Variant.parse (null, val));
}
+void do_lock (DConf.Client client, string key, bool locked) throws Error {
+ DConf.verify_key (key);
+
+ client.set_lock (key, locked);
+}
+
+void do_watch (DConf.Client client, string name) throws Error {
+ DConf.verify_path (name);
+
+ client.watch (name);
+ new MainLoop (null, false).run ();
+}
+
void main (string[] args) {
try {
var client = new DConf.Client ();
@@ -67,6 +80,18 @@ void main (string[] args) {
do_update ();
break;
+ case "lock":
+ do_lock (client, args[2], true);
+ break;
+
+ case "unlock":
+ do_lock (client, args[2], false);
+ break;
+
+ case "watch":
+ do_watch (client, args[2]);
+ break;
+
default:
error ("unknown command");
break;
diff --git a/client/.gitignore b/client/.gitignore
new file mode 100644
index 0000000..522859e
--- /dev/null
+++ b/client/.gitignore
@@ -0,0 +1,4 @@
+dconf.vapi
+*.c
+*.stamp
+*.deps
diff --git a/client/Makefile.am b/client/Makefile.am
index 9dc20b6..98dfab0 100644
--- a/client/Makefile.am
+++ b/client/Makefile.am
@@ -15,7 +15,7 @@ typelibdir = $(libdir)/girepository-1.0
typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib)
endif
-AM_CFLAGS = -std=c89 -Wall -Wmissing-prototypes -Wwrite-strings
+AM_CFLAGS = -std=c89 -Wall -Wmissing-prototypes -Wwrite-strings -D__dconf_h__
INCLUDES = -I$(top_srcdir)/common -I$(top_srcdir)/gvdb -I$(top_srcdir)/engine $(gio_CFLAGS)
lib_LTLIBRARIES = libdconf.la
@@ -30,7 +30,16 @@ libdconf_la_SOURCES = \
../common/dconf-paths.c \
../engine/dconf-engine.c \
../gvdb/gvdb-reader.c \
- dconf-client.c
+ dconf-client.vala engine.vapi
+libdconf_la_VALAFLAGS = --library dconf --pkg=gio-2.0
+
+dconf.vapi: libdconf.la
+
+dconf.deps:
+ echo gio-2.0 > dconf.deps
+
+vapi_DATA = dconf.vapi dconf.deps
+vapidir = $(datadir)/vala/vapi
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = dconf.pc
diff --git a/client/dconf-client.h b/client/dconf-client.h
index 13dc558..137fe18 100644
--- a/client/dconf-client.h
+++ b/client/dconf-client.h
@@ -34,9 +34,10 @@ typedef GObjectClass DConfClientClass;
typedef struct _DConfClient DConfClient;
typedef void (*DConfWatchFunc) (DConfClient *client,
- const gchar *tag,
const gchar *path,
const gchar * const *items,
+ gint n_items,
+ const gchar *tag,
gpointer user_data);
GType dconf_client_get_type (void);
@@ -55,7 +56,7 @@ GVariant * dconf_client_read_no_default (DConfCl
gchar ** dconf_client_list (DConfClient *client,
const gchar *dir,
- gsize *length);
+ gint *length);
gboolean dconf_client_is_writable (DConfClient *client,
const gchar *key,
@@ -116,24 +117,28 @@ gboolean dconf_client_write_many_finish (DConfCl
gboolean dconf_client_watch (DConfClient *client,
const gchar *name,
+ GCancellable *cancellable,
GError **error);
void dconf_client_watch_async (DConfClient *client,
const gchar *name,
+ GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean dconf_client_watch_finish (DConfClient *client,
GAsyncResult *result,
- gpointer user_data);
+ GError **error);
gboolean dconf_client_unwatch (DConfClient *client,
const gchar *name,
+ GCancellable *cancellable,
GError **error);
void dconf_client_unwatch_async (DConfClient *client,
const gchar *name,
+ GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean dconf_client_unwatch_finish (DConfClient *client,
GAsyncResult *result,
- gpointer user_data);
+ GError **error);
G_END_DECLS
#endif /* __dconf_client_h__ */
diff --git a/client/dconf-client.vala b/client/dconf-client.vala
new file mode 100644
index 0000000..0e71b7c
--- /dev/null
+++ b/client/dconf-client.vala
@@ -0,0 +1,143 @@
+[CCode (cheader_filename = "dconf.h")]
+namespace DConf {
+ public delegate void WatchFunc (DConf.Client client, string path, string[] items, string tag);
+
+ public class Client : Object {
+ Engine engine;
+ WatchFunc watch_func;
+
+ static BusType get_bus_type (EngineMessage dcem) {
+ switch (dcem.bus_type) {
+ case 'e':
+ return BusType.SESSION;
+ case 'y':
+ return BusType.SYSTEM;
+ default:
+ assert_not_reached ();
+ }
+ }
+
+ void call_sync (EngineMessage dcem, out string tag, Cancellable? cancellable) throws Error {
+ var connection = Bus.get_sync (get_bus_type (dcem), cancellable);
+
+ foreach (var message in dcem.body) {
+ var reply = connection.call_sync (dcem.destination, dcem.object_path, dcem interface, dcem.method,
+ message, dcem.reply_type, DBusCallFlags.NONE, -1, cancellable);
+ if (dcem.tagged) {
+ reply.get ("(s)", out tag);
+ }
+ }
+ }
+
+ async void call_async (EngineMessage dcem, out string tag, Cancellable? cancellable) throws Error {
+ var connection = yield Bus.get (get_bus_type (dcem), cancellable);
+
+ foreach (var message in dcem.body) {
+ var reply = yield connection.call (dcem.destination, dcem.object_path, dcem interface, dcem.method,
+ message, dcem.reply_type, DBusCallFlags.NONE, -1, cancellable);
+ if (dcem.tagged) {
+ reply.get ("(s)", out tag);
+ }
+ }
+ }
+
+ public bool write (string key, Variant? value, out string tag = null, Cancellable? cancellable = null) throws Error {
+ if (&tag == null) { /* bgo #591673 */
+ string junk;
+ call_sync (engine.write (key, value), out junk, cancellable);
+ } else {
+ call_sync (engine.write (key, value), out tag, cancellable);
+ }
+ return true;
+ }
+
+ public async bool write_async (string key, Variant? value, out string tag = null, Cancellable? cancellable = null) throws Error {
+ yield call_async (engine.write (key, value), out tag, cancellable);
+ return true;
+ }
+
+ public bool set_lock (string key, bool locked, Cancellable? cancellable = null) throws Error {
+ call_sync (engine.set_lock (key, locked), null, cancellable);
+ return true;
+ }
+
+ public async bool set_lock_async (string key, bool locked, Cancellable? cancellable = null) throws Error {
+ yield call_async (engine.set_lock (key, locked), null, cancellable);
+ return true;
+ }
+
+ public Variant? read (string key) {
+ return engine.read (key);
+ }
+
+ public Variant? read_default (string key) {
+ return engine.read_default (key);
+ }
+
+ public Variant? read_no_default (string key) {
+ return engine.read_no_default (key);
+ }
+
+ public string[] list (string dir) {
+ return engine.list (dir);
+ }
+
+ public bool watch (string name, Cancellable? cancellable = null) throws GLib.Error {
+ call_sync (engine.watch (name), null, cancellable);
+ return true;
+ }
+
+ public async bool watch_async (string name, Cancellable? cancellable = null) throws GLib.Error {
+ yield call_async (engine.watch (name), null, cancellable);
+ return true;
+ }
+
+ public bool unwatch (string name, Cancellable? cancellable = null) throws GLib.Error {
+ call_sync (engine.unwatch (name), null, cancellable);
+ return true;
+ }
+
+ public async bool unwatch_async (string name, Cancellable? cancellable = null) throws GLib.Error {
+ yield call_async (engine.unwatch (name), null, cancellable);
+ return true;
+ }
+
+ static Variant? service_func (EngineMessage dcem) {
+ try {
+ var connection = Bus.get_sync (get_bus_type (dcem), null);
+ return connection.call_sync (dcem.destination, dcem.object_path, dcem interface, dcem.method,
+ dcem.body, dcem.reply_type, DBusCallFlags.NONE, -1, null);
+ } catch {
+ return null;
+ }
+ }
+
+ public Client (string? profile = null, owned WatchFunc? watch_func = null) {
+ Engine.set_service_func (service_func);
+
+ engine = new Engine (profile);
+ this.watch_func = watch_func;
+ }
+ }
+
+ public extern bool is_path (string str, Error *error = null);
+ public extern bool is_key (string str, Error *error = null);
+ public extern bool is_dir (string str, Error *error = null);
+ public extern bool is_rel_path (string str, Error *error = null);
+ public extern bool is_rel_key (string str, Error *error = null);
+ public extern bool is_rel_dir (string str, Error *error = null);
+ [CCode (cname = "dconf_is_path")]
+ public extern bool verify_path (string str) throws Error;
+ [CCode (cname = "dconf_is_key")]
+ public extern bool verify_key (string str) throws Error;
+ [CCode (cname = "dconf_is_dir")]
+ public extern bool verify_dir (string str) throws Error;
+ [CCode (cname = "dconf_is_rel_path")]
+ public extern bool verify_rel_path (string str) throws Error;
+ [CCode (cname = "dconf_is_rel_key")]
+ public extern bool verify_rel_key (string str) throws Error;
+ [CCode (cname = "dconf_is_rel_dir")]
+ public extern bool verify_rel_dir (string str) throws Error;
+}
+
+// vim:noet sw=4 ts=4
diff --git a/client/engine.vapi b/client/engine.vapi
new file mode 100644
index 0000000..b0a6909
--- /dev/null
+++ b/client/engine.vapi
@@ -0,0 +1,32 @@
+namespace DConf {
+ [Compact]
+ [CCode (cheader_filename = "dconf-engine.h")]
+ class Engine {
+ internal Engine (string? profile);
+ internal EngineMessage write (string key, GLib.Variant? value) throws GLib.Error;
+ internal GLib.Variant? read (string key);
+ internal GLib.Variant? read_default (string key);
+ internal GLib.Variant? read_no_default (string key);
+ internal EngineMessage set_lock (string key, bool locked);
+ internal string[] list (string dir, void*junk = null);
+ internal static void set_service_func (ServiceFunc func);
+ internal EngineMessage watch (string name);
+ internal EngineMessage unwatch (string name);
+ }
+
+ struct EngineMessage {
+ int bus_type;
+ string destination;
+ string object_path;
+ string @interface;
+ string method;
+ bool tagged;
+ GLib.VariantType reply_type;
+ GLib.Variant body;
+ }
+
+ [CCode (has_target = false)]
+ delegate GLib.Variant? ServiceFunc (EngineMessage dcem);
+}
+
+// vim:noet sw=4 ts=4
diff --git a/editor/Makefile.am b/editor/Makefile.am
index a5ec825..7e29429 100644
--- a/editor/Makefile.am
+++ b/editor/Makefile.am
@@ -1,6 +1,6 @@
bin_PROGRAMS = dconf-editor
AM_CFLAGS = $(gtk_CFLAGS) $(gee_CFLAGS) $(libxml_CFLAGS) -I$(top_srcdir)/common -I$(top_srcdir)/client
-AM_VALAFLAGS = --pkg gee-1.0 --pkg gtk+-2.0 --pkg libxml-2.0
+AM_VALAFLAGS = --vapidir ../client --pkg gee-1.0 --pkg gtk+-2.0 --pkg libxml-2.0 --pkg dconf
dconf_editor_LDADD = ../client/libdconf.la $(gtk_LIBS) $(gee_LIBS) $(libxml_LIBS)
-dconf_editor_SOURCES = dconf-editor.vala dconf-model.vala dconf-schema.vala dconf-view.vala ../client/dconf.vapi
+dconf_editor_SOURCES = dconf-editor.vala dconf-model.vala dconf-schema.vala dconf-view.vala
diff --git a/engine/dconf-engine.c b/engine/dconf-engine.c
index cd05c79..73aadc7 100644
--- a/engine/dconf-engine.c
+++ b/engine/dconf-engine.c
@@ -34,6 +34,25 @@
static DConfEngineServiceFunc dconf_engine_service_func;
void
+dconf_engine_message_destroy (DConfEngineMessage *dcem)
+{
+ if (dcem->body)
+ {
+ g_variant_unref (dcem->body);
+ dcem->body = NULL;
+ }
+}
+
+void
+dconf_engine_message_copy (DConfEngineMessage *orig,
+ DConfEngineMessage *copy)
+{
+ *copy = *orig;
+ if (orig->body)
+ copy->body = g_variant_ref (orig->body);
+}
+
+void
dconf_engine_set_service_func (DConfEngineServiceFunc func)
{
dconf_engine_service_func = func;
@@ -60,7 +79,7 @@ dconf_engine_get_session_dir (void)
dcem.interface = "org.freedesktop.DBus.Properties";
dcem.method = "Get";
dcem.reply_type = G_VARIANT_TYPE ("(v)");
- dcem.body = g_variant_new ("(ss)",
+ dcem.body = g_variant_new ("((ss))",
"ca.desrt.dconf.WriterInfo",
"ShmDirectory");
@@ -92,7 +111,6 @@ dconf_engine_get_session_dir (void)
struct _DConfEngine
{
- gint ref_count;
guint64 state;
guint8 *shm;
@@ -288,7 +306,6 @@ dconf_engine_new (const gchar *profile)
gint i;
engine = g_slice_new (DConfEngine);
- engine->ref_count = 1;
engine->shm = NULL;
if (profile == NULL)
@@ -338,42 +355,75 @@ dconf_engine_new (const gchar *profile)
return engine;
}
-DConfEngine *
-dconf_engine_ref (DConfEngine *engine)
+void
+dconf_engine_free (DConfEngine *engine)
{
- g_atomic_int_inc (&engine->ref_count);
+ gint i;
- return engine;
-}
+ for (i = 0; i < engine->n_dbs; i++)
+ {
+ g_free (engine->object_paths[i]);
+ g_free (engine->names[i]);
+
+ if (engine->gvdbs[i])
+ gvdb_table_unref (engine->gvdbs[i]);
+ }
+
+ if (engine->shm)
+ {
+ munmap (engine->shm, 1);
+ }
+
+ g_free (engine->object_paths);
+ g_free (engine->names);
+ g_free (engine->gvdbs);
-void
-dconf_engine_unref (DConfEngine *engine)
-{
g_slice_free (DConfEngine, engine);
}
GVariant *
-dconf_engine_read (DConfEngine *engine,
- const gchar *key,
- DConfReadType type)
+dconf_engine_read (DConfEngine *engine,
+ const gchar *key)
{
GVariant *value = NULL;
+ gint i;
dconf_engine_refresh (engine);
- if (type != DCONF_READ_RESET)
- {
- if (engine->gvdbs[0])
- value = gvdb_table_get_value (engine->gvdbs[0], key);
- }
+ if (engine->gvdbs[0])
+ value = gvdb_table_get_value (engine->gvdbs[0], key);
- if (type != DCONF_READ_SET)
- {
- gint i;
+ for (i = 1; i < engine->n_dbs && value == NULL; i++)
+ value = gvdb_table_get_value (engine->gvdbs[i], key);
- for (i = 1; i < engine->n_dbs && value == NULL; i++)
- value = gvdb_table_get_value (engine->gvdbs[i], key);
- }
+ return value;
+}
+
+GVariant *
+dconf_engine_read_default (DConfEngine *engine,
+ const gchar *key)
+{
+ GVariant *value = NULL;
+ gint i;
+
+ dconf_engine_refresh_system (engine);
+
+ for (i = 1; i < engine->n_dbs && value == NULL; i++)
+ value = gvdb_table_get_value (engine->gvdbs[i], key);
+
+ return value;
+}
+
+GVariant *
+dconf_engine_read_no_default (DConfEngine *engine,
+ const gchar *key)
+{
+ GVariant *value = NULL;
+
+ dconf_engine_refresh_user (engine);
+
+ if (engine->gvdbs[0])
+ value = gvdb_table_get_value (engine->gvdbs[0], key);
return value;
}
@@ -391,14 +441,14 @@ dconf_engine_make_match_rule (DConfEngine *engine,
dcem->destination = "org.freedesktop.DBus";
dcem->object_path = engine->object_paths[0];
dcem->interface = "org.freedesktop.DBus";
- dcem->body = g_variant_ref_sink (g_variant_new ("(s)", rule));
+ dcem->body = g_variant_ref_sink (g_variant_new ("((s))", rule));
g_free (rule);
}
void
dconf_engine_watch (DConfEngine *engine,
- DConfEngineMessage *dcem,
- const gchar *name)
+ const gchar *name,
+ DConfEngineMessage *dcem)
{
dconf_engine_make_match_rule (engine, dcem, name);
dcem->method = "AddMatch";
@@ -406,8 +456,8 @@ dconf_engine_watch (DConfEngine *engine,
void
dconf_engine_unwatch (DConfEngine *engine,
- DConfEngineMessage *dcem,
- const gchar *name)
+ const gchar *name,
+ DConfEngineMessage *dcem)
{
dconf_engine_make_match_rule (engine, dcem, name);
dcem->method = "RemoveMatch";
@@ -415,12 +465,12 @@ dconf_engine_unwatch (DConfEngine *engine,
gboolean
dconf_engine_is_writable (DConfEngine *engine,
- DConfEngineMessage *dcem,
const gchar *name,
+ DConfEngineMessage *dcem,
GError **error)
{
dcem->bus_type = 'e';
- dcem->body = NULL;
+ dcem->body = g_variant_new ("()");
return TRUE;
}
@@ -451,20 +501,20 @@ dconf_engine_dcem (DConfEngine *engine,
dcem->destination = "ca.desrt.dconf";
dcem->object_path = engine->object_paths[0];
dcem->interface = "ca.desrt.dconf.Writer";
- dcem->reply_type = G_VARIANT_TYPE ("(t)");
+ dcem->reply_type = G_VARIANT_TYPE ("(s)");
dcem->method = method;
+ dcem->tagged = TRUE;
va_start (ap, format_string);
- dcem->body = g_variant_ref_sink (g_variant_new_va (format_string,
- NULL, &ap));
+ dcem->body = g_variant_ref_sink (g_variant_new_variant (g_variant_new_va (format_string, NULL, &ap)));
va_end (ap);
}
gboolean
dconf_engine_write (DConfEngine *engine,
- DConfEngineMessage *dcem,
const gchar *name,
GVariant *value,
+ DConfEngineMessage *dcem,
GError **error)
{
dconf_engine_dcem (engine, dcem,
@@ -476,10 +526,10 @@ dconf_engine_write (DConfEngine *engine,
gboolean
dconf_engine_write_many (DConfEngine *engine,
- DConfEngineMessage *dcem,
const gchar *prefix,
const gchar * const *keys,
GVariant **values,
+ DConfEngineMessage *dcem,
GError **error)
{
GVariantBuilder builder;
@@ -498,9 +548,9 @@ dconf_engine_write_many (DConfEngine *engine,
void
dconf_engine_set_lock (DConfEngine *engine,
- DConfEngineMessage *dcem,
const gchar *path,
- gboolean locked)
+ gboolean locked,
+ DConfEngineMessage *dcem)
{
dconf_engine_dcem (engine, dcem, "SetLock", "(sb)", path, locked);
}
@@ -509,7 +559,7 @@ gchar **
dconf_engine_list (DConfEngine *engine,
const gchar *dir,
DConfResetList *resets,
- gsize *length)
+ gint *length)
{
gchar **list;
diff --git a/engine/dconf-engine.h b/engine/dconf-engine.h
index 83c80ef..90580d3 100644
--- a/engine/dconf-engine.h
+++ b/engine/dconf-engine.h
@@ -35,13 +35,16 @@ typedef struct
const gchar *object_path;
const gchar *interface;
const gchar *method;
+ gboolean tagged;
const GVariantType *reply_type;
GVariant *body;
} DConfEngineMessage;
-
typedef GVariant * (*DConfEngineServiceFunc) (DConfEngineMessage *message);
+void dconf_engine_message_copy (DConfEngineMessage *orig,
+ DConfEngineMessage *copy);
+void dconf_engine_message_destroy (DConfEngineMessage *message);
void dconf_engine_set_service_func (DConfEngineServiceFunc func);
DConfEngine * dconf_engine_new (const gchar *profile);
@@ -49,42 +52,44 @@ DConfEngine * dconf_engine_new_for_db (DConfEn
const gchar *db_name);
guint64 dconf_engine_get_state (DConfEngine *engine);
-void dconf_engine_unref (DConfEngine *engine);
-DConfEngine * dconf_engine_ref (DConfEngine *engine);
+void dconf_engine_free (DConfEngine *engine);
GVariant * dconf_engine_read (DConfEngine *engine,
- const gchar *key,
- DConfReadType type);
+ const gchar *key);
+GVariant * dconf_engine_read_default (DConfEngine *engine,
+ const gchar *key);
+GVariant * dconf_engine_read_no_default (DConfEngine *engine,
+ const gchar *key);
gchar ** dconf_engine_list (DConfEngine *engine,
const gchar *path,
DConfResetList *resets,
- gsize *length);
+ gint *length);
void dconf_engine_get_service_info (DConfEngine *engine,
const gchar **bus_type,
const gchar **destination,
const gchar **object_path);
gboolean dconf_engine_is_writable (DConfEngine *engine,
- DConfEngineMessage *message,
const gchar *name,
+ DConfEngineMessage *message,
GError **error);
gboolean dconf_engine_write (DConfEngine *engine,
- DConfEngineMessage *message,
const gchar *key,
GVariant *value,
+ DConfEngineMessage *message,
GError **error);
gboolean dconf_engine_write_many (DConfEngine *engine,
- DConfEngineMessage *message,
const gchar *prefix,
const gchar * const *keys,
GVariant **values,
+ DConfEngineMessage *message,
GError **error);
void dconf_engine_watch (DConfEngine *engine,
- DConfEngineMessage *message,
- const gchar *name);
+ const gchar *name,
+ DConfEngineMessage *message);
void dconf_engine_unwatch (DConfEngine *engine,
- DConfEngineMessage *message,
- const gchar *name);
+ const gchar *name,
+ DConfEngineMessage *message);
gboolean dconf_engine_decode_notify (DConfEngine *engine,
const gchar *anti_expose,
const gchar **prefix,
@@ -95,9 +100,9 @@ gboolean dconf_engine_decode_notify (DConfEn
const gchar *member,
GVariant *body);
void dconf_engine_set_lock (DConfEngine *engine,
- DConfEngineMessage *message,
const gchar *path,
- gboolean locked);
+ gboolean locked,
+ DConfEngineMessage *message);
gboolean dconf_engine_interpret_reply (DConfEngineMessage *message,
const gchar *sender,
diff --git a/gsettings/dconfsettingsbackend.c b/gsettings/dconfsettingsbackend.c
index 3ed35f3..916f57e 100644
--- a/gsettings/dconfsettingsbackend.c
+++ b/gsettings/dconfsettingsbackend.c
@@ -343,7 +343,6 @@ dconf_settings_backend_read (GSettingsBackend *backend,
gboolean default_value)
{
DConfSettingsBackend *dcsb = (DConfSettingsBackend *) backend;
- DConfReadType type;
if (!default_value)
{
@@ -352,12 +351,10 @@ dconf_settings_backend_read (GSettingsBackend *backend,
if (dconf_settings_backend_scan_outstanding (dcsb, key, &value))
return value;
- type = DCONF_READ_NORMAL;
+ return dconf_engine_read (dcsb->engine, key);
}
else
- type = DCONF_READ_RESET;
-
- return dconf_engine_read (dcsb->engine, key, type);
+ return dconf_engine_read_default (dcsb->engine, key);
}
static gchar **
@@ -367,11 +364,7 @@ dconf_settings_backend_list (GSettingsBackend *backend,
gsize n_resets,
gsize *length)
{
- DConfSettingsBackend *dcsb = (DConfSettingsBackend *) backend;
-
- g_assert (n_resets == 0);
-
- return dconf_engine_list (dcsb->engine, dir, NULL, length);
+ g_assert_not_reached ();
}
static void
@@ -380,12 +373,15 @@ dconf_settings_backend_send (GDBusConnection *bus,
volatile guint32 *serial)
{
GDBusMessage *message;
+ GVariant *body;
message = g_dbus_message_new_method_call (dcem->destination,
dcem->object_path,
dcem->interface,
dcem->method);
- g_dbus_message_set_body (message, dcem->body);
+ body = g_variant_get_child_value (dcem->body, 0);
+ g_dbus_message_set_body (message, body);
+ g_variant_unref (body);
if (serial)
g_dbus_connection_send_message (bus, message, serial, NULL);
@@ -462,7 +458,7 @@ dconf_settings_backend_write (GSettingsBackend *backend,
DConfEngineMessage dcem;
GDBusConnection *bus;
- if (!dconf_engine_write (dcsb->engine, &dcem, path_or_key, value, NULL))
+ if (!dconf_engine_write (dcsb->engine, path_or_key, value, &dcem, NULL))
return FALSE;
if (!dconf_settings_backend_get_bus (dcsb, &bus, &dcem))
@@ -499,8 +495,8 @@ dconf_settings_backend_write_tree (GSettingsBackend *backend,
g_settings_backend_flatten_tree (tree, &prefix, &keys, &values);
- if (dconf_engine_write_many (dcsb->engine, &dcem,
- prefix, keys, values, NULL))
+ if (dconf_engine_write_many (dcsb->engine,
+ prefix, keys, values, &dcem, NULL))
{
if (dconf_settings_backend_get_bus (dcsb, &bus, &dcem))
{
@@ -538,7 +534,7 @@ dconf_settings_backend_get_writable (GSettingsBackend *backend,
DConfEngineMessage dcem;
GDBusConnection *bus;
- if (!dconf_engine_is_writable (dcsb->engine, &dcem, name, NULL))
+ if (!dconf_engine_is_writable (dcsb->engine, name, &dcem, NULL))
return FALSE;
return dconf_settings_backend_get_bus (dcsb, &bus, &dcem);
@@ -552,7 +548,7 @@ dconf_settings_backend_subscribe (GSettingsBackend *backend,
DConfEngineMessage dcem;
GDBusConnection *bus;
- dconf_engine_watch (dcsb->engine, &dcem, name);
+ dconf_engine_watch (dcsb->engine, name, &dcem);
if (dconf_settings_backend_get_bus (dcsb, &bus, &dcem))
dconf_settings_backend_send (bus, &dcem, NULL);
@@ -566,7 +562,7 @@ dconf_settings_backend_unsubscribe (GSettingsBackend *backend,
DConfEngineMessage dcem;
GDBusConnection *bus;
- dconf_engine_unwatch (dcsb->engine, &dcem, name);
+ dconf_engine_unwatch (dcsb->engine, name, &dcem);
if (dconf_settings_backend_get_bus (dcsb, &bus, &dcem))
dconf_settings_backend_send (bus, &dcem, NULL);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]