summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeng Huang <shawn.p.huang@gmail.com>2013-03-25 07:28:41 -0700
committerPeng Huang <shawn.p.huang@gmail.com>2013-03-25 07:28:41 -0700
commita37c3fabe546242a985421f941d0b1cff505ae2a (patch)
treee2039ae94208ffe375e2dcc8cffe3c53b366d3fb
parent61f15bd7b0568fec66b3fe1edf456f8e878ba728 (diff)
parent7e6517c95ebe6c58b58f68925163e96f133ad6bf (diff)
downloadibus-1.4.y.tar.gz
Merge pull request #7 from microcai/1.4.y1.4.y
back port 1.5.y "Support dconf 0.13.4" to 1.4.y, please provide new ibus-1.4.3 tarball :)
-rw-r--r--configure.ac3
-rw-r--r--dconf/Makefile.am2
-rw-r--r--dconf/config-private.h (renamed from dconf/config.h)11
-rw-r--r--dconf/config.c26
-rw-r--r--dconf/main.c2
5 files changed, 40 insertions, 4 deletions
diff --git a/configure.ac b/configure.ac
index f3f76f42..9ce539d1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -299,6 +299,9 @@ if test x"$enable_dconf" = x"yes"; then
[dconf >= 0.7.5], ,
enable_dconf=no
)
+ PKG_CHECK_EXISTS([dconf >= 0.13.4],
+ [AC_DEFINE(DCONF_0_13_4, TRUE, [dconf is 0.13.4 or later])],
+ [])
# check glib-compile-schemas
GLIB_GSETTINGS
fi
diff --git a/dconf/Makefile.am b/dconf/Makefile.am
index 148ba621..f0e24b0a 100644
--- a/dconf/Makefile.am
+++ b/dconf/Makefile.am
@@ -29,7 +29,7 @@ libexec_PROGRAMS = \
ibus_dconf_SOURCES = \
main.c \
config.c \
- config.h \
+ config-private.h \
$(NULL)
ibus_dconf_CFLAGS = \
@GLIB2_CFLAGS@ \
diff --git a/dconf/config.h b/dconf/config-private.h
index 9f602d6a..9ba4fd53 100644
--- a/dconf/config.h
+++ b/dconf/config-private.h
@@ -22,8 +22,17 @@
#ifndef __CONFIG_DCONF_H__
#define __CONFIG_DCONF_H__
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
#include <ibus.h>
-#include <dconf/dconf.h>
+#ifdef DCONF_0_13_4
+# include <client/dconf-client.h>
+# include <common/dconf-paths.h>
+#else
+# include <dconf/dconf.h>
+#endif
#define IBUS_TYPE_CONFIG_DCONF \
(ibus_config_dconf_get_type ())
diff --git a/dconf/config.c b/dconf/config.c
index 02506fba..18a8971f 100644
--- a/dconf/config.c
+++ b/dconf/config.c
@@ -23,7 +23,7 @@
#include <string.h>
#include <ibus.h>
-#include "config.h"
+#include "config-private.h"
#define DCONF_PREFIX "/desktop/ibus"
#define DCONF_PRESERVE_NAME_PREFIXES_KEY \
@@ -159,12 +159,19 @@ static void
_watch_func (DConfClient *client,
const gchar *gpath,
const gchar * const *items,
+#ifndef DCONF_0_13_4
gint n_items,
+#endif
const gchar *tag,
IBusConfigDConf *config)
{
gchar **gkeys = NULL;
gint i;
+#ifdef DCONF_0_13_4
+ gint n_items;
+
+ n_items = g_strv_length ((gchar **)items);
+#endif
g_return_if_fail (gpath != NULL);
g_return_if_fail (n_items >= 0);
@@ -231,6 +238,14 @@ static void
ibus_config_dconf_init (IBusConfigDConf *config)
{
GVariant *variant;
+#ifdef DCONF_0_13_4
+ config->client = dconf_client_new ();
+
+ g_signal_connect (config->client, "changed",
+ G_CALLBACK (_watch_func), config);
+
+ dconf_client_watch_fast (config->client, DCONF_PREFIX"/");
+#else
GError *error;
config->client = dconf_client_new ("ibus",
@@ -241,6 +256,7 @@ ibus_config_dconf_init (IBusConfigDConf *config)
error = NULL;
if (!dconf_client_watch (config->client, DCONF_PREFIX"/", NULL, &error))
g_warning ("Can not watch dconf path %s", DCONF_PREFIX"/");
+#endif
config->preserve_name_prefixes = NULL;
variant = dconf_client_read (config->client,
@@ -265,9 +281,13 @@ static void
ibus_config_dconf_destroy (IBusConfigDConf *config)
{
if (config->client) {
+#ifdef DCONF_0_13_4
+ dconf_client_unwatch_fast (config->client, DCONF_PREFIX"/");
+#else
GError *error = NULL;
if (!dconf_client_unwatch (config->client, DCONF_PREFIX"/", NULL, &error))
g_warning ("Can not unwatch dconf path %s", DCONF_PREFIX"/");
+#endif
g_object_unref (config->client);
config->client = NULL;
@@ -307,12 +327,16 @@ ibus_config_dconf_set_value (IBusConfigService *config,
g_free (gname);
}
+#ifdef DCONF_0_13_4
+ retval = dconf_client_write_fast (client, gkey, value, error);
+#else
retval = dconf_client_write (client,
gkey,
value,
NULL, /* tag */
NULL, /* cancellable */
error);
+#endif
g_free (gkey);
/* notify the caller that the value has changed, as dconf does not
diff --git a/dconf/main.c b/dconf/main.c
index 1b69baa3..bffe9833 100644
--- a/dconf/main.c
+++ b/dconf/main.c
@@ -23,7 +23,7 @@
#include <ibus.h>
#include <stdlib.h>
#include <locale.h>
-#include "config.h"
+#include "config-private.h"
static IBusBus *bus = NULL;
static IBusConfigDConf *config = NULL;