summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKoen Kooi <koen@dominion.thruhere.net>2011-06-18 19:43:34 +0200
committerKoen Kooi <koen@dominion.thruhere.net>2011-06-19 20:41:26 +0200
commitd413695d5e3faf48193fa9858b36d2830af64e2d (patch)
tree8fbfc609f7c5e443a0b386ace48cc334827173d2
parent3e44f401d2634db0f948dcc5853ec38da1dc64bb (diff)
downloadmeta-openembedded-d413695d5e3faf48193fa9858b36d2830af64e2d.tar.gz
gconf: update to 2.32.4
* add debian patch to fix panel applets * add upstream patch to port another bit to gdbus Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
-rw-r--r--meta-gnome/recipes-gnome/gconf/gconf/0001-Port-gconfd-2-to-GDBus.patch439
-rw-r--r--meta-gnome/recipes-gnome/gconf/gconf/02_fix_wrong_return_value.patch15
-rw-r--r--meta-gnome/recipes-gnome/gconf/gconf_2.32.4.bb (renamed from meta-gnome/recipes-gnome/gconf/gconf_2.32.3.bb)17
3 files changed, 465 insertions, 6 deletions
diff --git a/meta-gnome/recipes-gnome/gconf/gconf/0001-Port-gconfd-2-to-GDBus.patch b/meta-gnome/recipes-gnome/gconf/gconf/0001-Port-gconfd-2-to-GDBus.patch
new file mode 100644
index 0000000000..01cbdbcf9e
--- /dev/null
+++ b/meta-gnome/recipes-gnome/gconf/gconf/0001-Port-gconfd-2-to-GDBus.patch
@@ -0,0 +1,439 @@
1From 979bfb2448c3895a303041c1d422daf7930f3a51 Mon Sep 17 00:00:00 2001
2From: Christian Persch <chpe@gnome.org>
3Date: Sat, 8 May 2010 02:13:43 +0200
4Subject: [PATCH] Port gconfd-2 to GDBus
5
6Bug #618039.
7---
8 gconf/gconfd.c | 328 +++++++++++++++++++++++++++++---------------------------
9 1 files changed, 170 insertions(+), 158 deletions(-)
10
11diff --git a/gconf/gconfd.c b/gconf/gconfd.c
12index b89e7a1..ee9d6ad 100644
13--- a/gconf/gconfd.c
14+++ b/gconf/gconfd.c
15@@ -55,7 +55,7 @@
16 #endif
17 #include <locale.h>
18
19-#include <dbus/dbus-glib-lowlevel.h>
20+#include <gio/gio.h>
21
22 #ifdef G_OS_WIN32
23 #include <io.h>
24@@ -518,152 +518,144 @@ gconf_get_poa (void)
25 return the_poa;
26 }
27
28-static const char *
29-get_introspection_xml (void)
30-{
31- return "<!DOCTYPE node PUBLIC \"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN\"\n"
32- "\"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd\">\n"
33- "<node>\n"
34- " <interface name=\"org.freedesktop.DBus.Introspectable\">\n"
35- " <method name=\"Introspect\">\n"
36- " <arg name=\"introspection_xml\" direction=\"out\" type=\"s\"/>\n"
37- " </method>\n"
38- " </interface>\n"
39- " <interface name=\"org.gnome.GConf\">\n"
40- " <method name=\"GetIOR\">\n"
41- " <arg name=\"ior\" direction=\"out\" type=\"s\"/>\n"
42- " </method>\n"
43- " </interface>\n"
44- "</node>\n";
45-}
46-
47-static DBusHandlerResult
48-bus_message_handler (DBusConnection *connection,
49- DBusMessage *message,
50- void *user_data)
51+static void
52+handle_method_call (GDBusConnection *connection,
53+ const gchar *sender,
54+ const gchar *object_path,
55+ const gchar *interface_name,
56+ const gchar *method_name,
57+ GVariant *parameters,
58+ GDBusMethodInvocation *invocation,
59+ gpointer user_data)
60 {
61- DBusMessage *reply;
62-
63- reply = NULL;
64-
65- if (dbus_message_is_signal (message,
66- DBUS_INTERFACE_LOCAL,
67- "Disconnected"))
68+ if (g_strcmp0 (method_name, "GetIOR") == 0)
69 {
70- gconf_main_quit ();
71- return DBUS_HANDLER_RESULT_HANDLED;
72+ g_dbus_method_invocation_return_value (invocation,
73+ g_variant_new ("(s)", gconf_get_daemon_ior ()));
74 }
75- else if (dbus_message_is_method_call (message,
76- "org.freedesktop.DBus.Introspectable",
77- "Introspect"))
78- {
79- const char *introspection_xml;
80-
81- introspection_xml = get_introspection_xml ();
82-
83- reply = dbus_message_new_method_return (message);
84- dbus_message_append_args (reply, DBUS_TYPE_STRING, &introspection_xml,
85- DBUS_TYPE_INVALID);
86-
87- }
88- else if (dbus_message_is_method_call (message,
89- "org.gnome.GConf",
90- "GetIOR"))
91- {
92- const char *ior;
93+}
94
95- ior = gconf_get_daemon_ior ();
96+static void
97+on_name_acquired (GDBusConnection *connection,
98+ const gchar *name,
99+ gpointer user_data)
100+{
101+ * (gboolean *) user_data = TRUE;
102+ gconf_main_quit ();
103+}
104
105- reply = dbus_message_new_method_return (message);
106- dbus_message_append_args (reply, DBUS_TYPE_STRING, &ior, DBUS_TYPE_INVALID);
107- }
108+static void
109+on_name_lost (GDBusConnection *connection,
110+ const gchar *name,
111+ gpointer user_data)
112+{
113+ * (gboolean *) user_data = FALSE;
114
115- if (reply != NULL)
116- {
117- dbus_connection_send (connection, reply, NULL);
118- dbus_message_unref (reply);
119- return DBUS_HANDLER_RESULT_HANDLED;
120- }
121+ gconf_log (GCL_WARNING,
122+ _("Failed to get bus name for daemon, exiting."));
123
124- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
125+ gconf_main_quit ();
126 }
127
128-static DBusConnection *
129-get_on_d_bus (void)
130+static GDBusConnection *
131+own_org_gnome_GConf (void)
132 {
133- DBusConnection *connection;
134- DBusError bus_error;
135- int result;
136-
137- dbus_error_init (&bus_error);
138- connection = dbus_bus_get (DBUS_BUS_SESSION, &bus_error);
139-
140- if (dbus_error_is_set (&bus_error))
141+ static const char introspection_xml[] =
142+ "<node>"
143+ "<interface name='org.gnome.GConf'>"
144+ "<method name='GetIOR'>"
145+ "<arg name='ior' direction='out' type='s'/>"
146+ "</method>"
147+ "</interface>"
148+ "</node>";
149+ static const GDBusInterfaceVTable interface_vtable =
150+ {
151+ handle_method_call,
152+ NULL,
153+ NULL
154+ };
155+
156+ GDBusConnection *connection;
157+ GDBusNodeInfo *introspection_data;
158+ guint registration_id;
159+ guint owner_id;
160+ gboolean *do_own_ptr;
161+ GError *error = NULL;
162+
163+ connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
164+ if (connection == NULL)
165 {
166- gconf_log (GCL_ERR, _("Could not connect to session bus: %s"), bus_error.message);
167- dbus_error_free (&bus_error);
168+ gconf_log (GCL_ERR, _("Could not connect to session bus: %s"), error->message);
169+ g_error_free (error);
170 return NULL;
171 }
172
173- dbus_connection_setup_with_g_main (connection, NULL);
174+ introspection_data = g_dbus_node_info_new_for_xml (introspection_xml, NULL);
175+ g_assert (introspection_data != NULL);
176
177- if (!dbus_connection_add_filter (connection, (DBusHandleMessageFunction)
178- bus_message_handler, NULL, NULL))
179+ registration_id = g_dbus_connection_register_object (connection,
180+ "/org/gnome/GConf",
181+ introspection_data->interfaces[0],
182+ &interface_vtable,
183+ introspection_data,
184+ (GDestroyNotify) g_dbus_node_info_unref,
185+ &error);
186+ if (registration_id == 0)
187 {
188- dbus_connection_unref (connection);
189+ gconf_log (GCL_ERR, "Failed to register object: %s", error->message);
190+ g_error_free (error);
191+ g_object_unref (connection);
192 return NULL;
193 }
194
195- dbus_connection_set_exit_on_disconnect (connection, FALSE);
196+ g_dbus_connection_set_exit_on_close (connection, FALSE);
197+ g_signal_connect (connection, "closed", G_CALLBACK (gconf_main_quit), NULL);
198
199- result = dbus_bus_request_name (connection, "org.gnome.GConf",
200- 0, &bus_error);
201+ do_own_ptr = g_new (gboolean, 1);
202+ *do_own_ptr = FALSE;
203
204- if (dbus_error_is_set (&bus_error))
205- {
206- gconf_log (GCL_WARNING,
207- _("Failed to get bus name for daemon, exiting: %s"),
208- bus_error.message);
209- dbus_error_free (&bus_error);
210- }
211+ owner_id = g_bus_own_name_on_connection (connection,
212+ "org.gnome.GConf",
213+ G_BUS_NAME_OWNER_FLAGS_NONE,
214+ on_name_acquired,
215+ on_name_lost,
216+ do_own_ptr, (GDestroyNotify) g_free);
217
218- if (result != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER)
219- {
220- dbus_connection_unref (connection);
221- return NULL;
222- }
223+ gconf_main ();
224
225- return connection;
226+ if (*do_own_ptr)
227+ return connection;
228+
229+ g_object_unref (connection);
230+ return NULL;
231 }
232
233 #ifdef ENABLE_DEFAULTS_SERVICE
234 /* listen on system bus for defaults changes */
235
236-static DBusHandlerResult
237-system_bus_message_handler (DBusConnection *connection,
238- DBusMessage *message,
239- void *user_data)
240-{
241- DBusMessage *reply;
242-
243- reply = NULL;
244-
245- if (dbus_message_is_signal (message,
246- "org.gnome.GConf.Defaults",
247- "SystemSet"))
248- {
249- DBusError bus_error;
250- char **keys;
251- int n_keys;
252+typedef struct {
253+ guint watch_id;
254+ guint subscription_id;
255+} DefaultsData;
256
257- dbus_error_init (&bus_error);
258- if (dbus_message_get_args (message, &bus_error,
259- DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &keys, &n_keys,
260- DBUS_TYPE_INVALID))
261+static void
262+system_set_cb (GDBusConnection *connection,
263+ const gchar *sender_name,
264+ const gchar *object_path,
265+ const gchar *interface_name,
266+ const gchar *signal_name,
267+ GVariant *parameters,
268+ gpointer user_data)
269+{
270+ if (g_strcmp0 (interface_name, "org.gnome.GConf.Defaults") == 0 &&
271+ g_strcmp0 (signal_name, "SystemSet") == 0)
272+ {
273+ if (g_variant_is_of_type (parameters, G_VARIANT_TYPE ("(as)")))
274 {
275- char **key;
276 GConfSources *system_sources;
277 GSList addresses;
278+ GVariantIter *iter;
279+ const char *key;
280
281 gconf_log (GCL_DEBUG, "System defaults changed. Notifying.");
282
283@@ -673,61 +665,72 @@ system_bus_message_handler (DBusConnection *connection,
284
285 gconfd_clear_cache_for_sources (system_sources);
286
287- for (key = keys; *key; key++)
288- gconfd_notify_other_listeners (NULL, system_sources, *key);
289+ g_variant_get (parameters, "(as)", &iter);
290+ while (g_variant_iter_loop (iter, "&s", &key))
291+ gconfd_notify_other_listeners (NULL, system_sources, key);
292+ g_variant_iter_free (iter);
293
294 gconf_sources_free (system_sources);
295-
296- dbus_free_string_array (keys);
297 }
298 else
299 {
300- gconf_log (GCL_DEBUG, "SystemSet signal received, but error getting message: %s", bus_error.message);
301+ gconf_log (GCL_DEBUG, "SystemSet signal received, but wrong paramters type '%s'",
302+ g_variant_get_type_string (parameters));
303 }
304- dbus_error_free (&bus_error);
305-
306- return DBUS_HANDLER_RESULT_HANDLED;
307 }
308-
309- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
310 }
311
312-static DBusConnection *
313-get_on_system_bus (void)
314+static void
315+defaults_appeared_cb (GDBusConnection *connection,
316+ const gchar *name,
317+ const gchar *name_owner,
318+ gpointer user_data)
319 {
320- DBusConnection *connection;
321- DBusError bus_error;
322+ DefaultsData *data = (DefaultsData *) user_data;
323
324- dbus_error_init (&bus_error);
325- connection = dbus_bus_get (DBUS_BUS_SYSTEM, &bus_error);
326+ gconf_log (GCL_DEBUG, "Defaults service appeared with name '%s'", name_owner);
327
328- if (dbus_error_is_set (&bus_error))
329- {
330- gconf_log (GCL_ERR, _("Could not connect to system bus: %s"), bus_error.message);
331- dbus_error_free (&bus_error);
332- return NULL;
333- }
334+ g_assert (data->subscription_id == 0);
335+ data->subscription_id = g_dbus_connection_signal_subscribe (connection,
336+ name_owner,
337+ "org.gnome.GConf.Defaults",
338+ "SystemSet",
339+ "/" /* really? */,
340+ NULL,
341+ G_DBUS_SIGNAL_FLAGS_NONE,
342+ system_set_cb,
343+ user_data, NULL);
344+}
345
346- dbus_connection_setup_with_g_main (connection, NULL);
347+static void
348+defaults_vanished_cb (GDBusConnection *connection,
349+ const gchar *name,
350+ gpointer user_data)
351+{
352+ DefaultsData *data = (DefaultsData *) user_data;
353
354- dbus_bus_add_match (connection, "type='signal',interface='org.gnome.GConf.Defaults'", &bus_error);
355- dbus_connection_flush(connection);
356- if (dbus_error_is_set (&bus_error))
357- {
358- gconf_log (GCL_DEBUG, "Failed to add signal match to system bus: %s", bus_error.message);
359- dbus_connection_unref (connection);
360- return NULL;
361- }
362+ gconf_log (GCL_DEBUG, "Defaults service disappeared");
363
364- if (!dbus_connection_add_filter (connection, (DBusHandleMessageFunction)
365- system_bus_message_handler, NULL, NULL))
366- {
367- gconf_log (GCL_DEBUG, "Failed to add message filter to system bus.");
368- dbus_connection_unref (connection);
369- return NULL;
370- }
371+ if (data->subscription_id != 0) {
372+ g_dbus_connection_signal_unsubscribe (connection , data->subscription_id);
373+ data->subscription_id = 0;
374+ }
375+}
376
377- return connection;
378+static DefaultsData *
379+get_on_system_bus (void)
380+{
381+ DefaultsData *data = g_new (DefaultsData, 1);
382+
383+ data->subscription_id = 0;
384+ data->watch_id = g_bus_watch_name (G_BUS_TYPE_SYSTEM,
385+ "org.gnome.GConf.Defaults",
386+ G_BUS_NAME_WATCHER_FLAGS_NONE,
387+ defaults_appeared_cb,
388+ defaults_vanished_cb,
389+ data, NULL);
390+
391+ return data;
392 }
393 #endif /* ENABLE_DEFAULTS_SERVICE */
394
395@@ -759,7 +762,8 @@ main(int argc, char** argv)
396 GError *err;
397 int dev_null_fd;
398 int write_byte_fd;
399- DBusConnection *connection;
400+ GDBusConnection *connection;
401+ DefaultsData *defaults_data;
402
403 _gconf_init_i18n ();
404 setlocale (LC_ALL, "");
405@@ -896,8 +900,7 @@ main(int argc, char** argv)
406 gconf_set_daemon_ior (ior);
407 CORBA_free (ior);
408
409- connection = get_on_d_bus ();
410-
411+ connection = own_org_gnome_GConf ();
412 if (connection != NULL)
413 {
414 /* This loads backends and so on. It needs to be done before
415@@ -934,11 +937,20 @@ main(int argc, char** argv)
416 logfile_read ();
417
418 #ifdef ENABLE_DEFAULTS_SERVICE
419- get_on_system_bus ();
420+ defaults_data = get_on_system_bus ();
421 #endif
422
423 gconf_main ();
424
425+ g_object_unref (connection);
426+ connection = NULL;
427+
428+ if (defaults_data->subscription_id != 0) {
429+ g_dbus_connection_signal_unsubscribe (connection , defaults_data->subscription_id);
430+ }
431+ g_bus_unwatch_name (defaults_data->watch_id);
432+ g_free (defaults_data);
433+
434 if (in_shutdown)
435 exit_code = 1; /* means someone already called enter_shutdown() */
436
437--
4381.6.6.1
439
diff --git a/meta-gnome/recipes-gnome/gconf/gconf/02_fix_wrong_return_value.patch b/meta-gnome/recipes-gnome/gconf/gconf/02_fix_wrong_return_value.patch
new file mode 100644
index 0000000000..c7c0e7784c
--- /dev/null
+++ b/meta-gnome/recipes-gnome/gconf/gconf/02_fix_wrong_return_value.patch
@@ -0,0 +1,15 @@
1Description: fix wrong return value
2Bug: http://bugzilla.gnome.org/show_bug.cgi?id=582865
3Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=532119
4
5--- a/gconf/gconf-client.c
6+++ b/gconf/gconf-client.c
7@@ -2163,7 +2163,7 @@
8 {
9 g_free (dir);
10 trace ("Negative cache hit on %s", key);
11- return TRUE;
12+ return FALSE;
13 }
14
15 g_free (dir);
diff --git a/meta-gnome/recipes-gnome/gconf/gconf_2.32.3.bb b/meta-gnome/recipes-gnome/gconf/gconf_2.32.4.bb
index 9788b1b254..8f64638329 100644
--- a/meta-gnome/recipes-gnome/gconf/gconf_2.32.3.bb
+++ b/meta-gnome/recipes-gnome/gconf/gconf_2.32.4.bb
@@ -1,20 +1,24 @@
1DESCRIPTION = "GNOME configuration database system" 1DESCRIPTION = "GNOME configuration database system"
2SECTION = "x11/gnome" 2SECTION = "x11/gnome"
3DEPENDS = "gobject-introspection-native gtk+ orbit2 glib-2.0 libxml2 polkit" 3DEPENDS = "gobject-introspection-native gtk+ orbit2 glib-2.0 libxml2 polkit"
4ORBIT_IDL_SRC = "${STAGING_BINDIR_NATIVE}/orbit-idl-2" 4
5PR = "r4"
5 6
6LICENSE = "LGPLv2+" 7LICENSE = "LGPLv2+"
7LIC_FILES_CHKSUM = "file://COPYING;md5=55ca817ccb7d5b5b66355690e9abc605" 8LIC_FILES_CHKSUM = "file://COPYING;md5=55ca817ccb7d5b5b66355690e9abc605"
8 9
9S = "${WORKDIR}/GConf-${PV}" 10S = "${WORKDIR}/GConf-${PV}"
10 11
11SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/GConf/2.32/GConf-${PV}.tar.bz2;name=archive" 12SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/GConf/2.32/GConf-${PV}.tar.bz2;name=archive \
12SRC_URI[archive.md5sum] = "a7c683fe6566e05a67ecb1ee3b20056c" 13 file://02_fix_wrong_return_value.patch \
13SRC_URI[archive.sha256sum] = "63e249d16b1b50820e9c32f1d85ff2c94498afdd45544fa5f37b8e1d084c5bae" 14 file://0001-Port-gconfd-2-to-GDBus.patch \
15 "
16SRC_URI[archive.md5sum] = "b4475bb58c51ca59c7781cd95b302c13"
17SRC_URI[archive.sha256sum] = "46030c09422603dbb72f13b5dd592dcc01fbc13562b9e94dafb2b58982bc6b3a"
14 18
15RDEPENDS_${PN} += "dbus-x11"
16 19
17EXTRA_OECONF = " --without-openldap --disable-gtk-doc --enable-gtk --with-gtk=2.0 POLKIT_POLICY_FILE_VALIDATE=true" 20EXTRA_OECONF = " --without-openldap --disable-gtk-doc --enable-gtk --with-gtk=2.0 --enable-gsettings-backend=yes POLKIT_POLICY_FILE_VALIDATE=true"
21ORBIT_IDL_SRC = "${STAGING_BINDIR_NATIVE}/orbit-idl-2"
18 22
19inherit autotools gettext 23inherit autotools gettext
20 24
@@ -28,6 +32,7 @@ do_install_append() {
28 rm ${D}${libdir}/GConf/*/*.*a 32 rm ${D}${libdir}/GConf/*/*.*a
29} 33}
30 34
35RDEPENDS_${PN} += "dbus-x11"
31FILES_${PN} += "${libdir}/GConf/* \ 36FILES_${PN} += "${libdir}/GConf/* \
32 ${libdir}/gio/*/*.so \ 37 ${libdir}/gio/*/*.so \
33 ${datadir}/polkit* \ 38 ${datadir}/polkit* \