aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--debian/changelog8
-rw-r--r--libdbusmenu-glib/dbus-menu.xml6
-rw-r--r--libdbusmenu-glib/server.c63
-rw-r--r--tests/Makefile.am19
-rw-r--r--tests/test-glib-layout-client.c2
-rw-r--r--tests/test-glib-objects.c3
-rw-r--r--tests/test-glib-properties-client.c2
7 files changed, 88 insertions, 15 deletions
diff --git a/debian/changelog b/debian/changelog
index 3be6753..3c37372 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,11 @@
+libdbusmenu (0.2.0~dev-0ubuntu1~ppa7) UNRELEASED; urgency=low
+
+ * Upstream update:
+ * Adding GetChildren function for getting a single submenu
+ * Test suite fixes
+
+ -- Ted Gould <ted@ubuntu.com> Wed, 06 Jan 2010 22:14:49 -0600
+
libdbusmenu (0.2.0~dev-0ubuntu1~ppa6) karmic; urgency=low
* Fixing the handling of typed properties, especially bools.
diff --git a/libdbusmenu-glib/dbus-menu.xml b/libdbusmenu-glib/dbus-menu.xml
index e2d872b..d2df400 100644
--- a/libdbusmenu-glib/dbus-menu.xml
+++ b/libdbusmenu-glib/dbus-menu.xml
@@ -88,6 +88,12 @@ An item is represented as a struct following this format:
<arg type="a(ua{sv})" name="properties" direction="out" />
</method>
+ <method name="GetChildren">
+ <arg type="u" name="id" direction="in" />
+ <arg type="as" name="propertyNames" direction="in" />
+ <arg type="a(ua{sv})" name="properties" direction="out" />
+ </method>
+
<!--
Each menu item has a set of properties. Property keys are in menuitem.h:
diff --git a/libdbusmenu-glib/server.c b/libdbusmenu-glib/server.c
index 0825997..0971162 100644
--- a/libdbusmenu-glib/server.c
+++ b/libdbusmenu-glib/server.c
@@ -40,6 +40,7 @@ static gboolean _dbusmenu_server_get_property (DbusmenuServer * server, guint id
static gboolean _dbusmenu_server_get_properties (DbusmenuServer * server, guint id, GPtrArray * properties, GHashTable ** dict, GError ** error);
static gboolean _dbusmenu_server_get_group_properties (DbusmenuServer * server, GArray * ids, GArray * properties, GHashTable ** values, GError ** error);
static gboolean _dbusmenu_server_event (DbusmenuServer * server, guint id, gchar * eventid, GValue * data, GError ** error);
+static gboolean _dbusmenu_server_get_children (DbusmenuServer * server, guint id, GPtrArray * properties, GPtrArray ** output, GError ** error);
#include "dbusmenu-server.h"
@@ -473,6 +474,68 @@ _dbusmenu_server_get_group_properties (DbusmenuServer * server, GArray * ids, GA
return FALSE;
}
+static void
+_gvalue_array_append_uint(GValueArray *array, guint i)
+{
+ GValue value = {0};
+
+ g_value_init(&value, G_TYPE_UINT);
+ g_value_set_uint(&value, i);
+ g_value_array_append(array, &value);
+ g_value_unset(&value);
+}
+
+static void
+_gvalue_array_append_hashtable(GValueArray *array, GHashTable * dict)
+{
+ GValue value = {0};
+
+ g_value_init(&value, dbus_g_type_get_map("GHashTable", G_TYPE_STRING, G_TYPE_VALUE));
+ g_value_set_boxed(&value, dict);
+ g_value_array_append(array, &value);
+ g_value_unset(&value);
+}
+
+static void
+serialize_menuitem(gpointer data, gpointer user_data)
+{
+ DbusmenuMenuitem * mi = DBUSMENU_MENUITEM(data);
+ GPtrArray * output = (GPtrArray *)(user_data);
+
+ guint id = dbusmenu_menuitem_get_id(mi);
+ GHashTable * dict = dbusmenu_menuitem_properties_copy(mi);
+
+ GValueArray * item = g_value_array_new(1);
+ _gvalue_array_append_uint(item, id);
+ _gvalue_array_append_hashtable(item, dict);
+
+ g_ptr_array_add(output, item);
+}
+
+static gboolean
+_dbusmenu_server_get_children (DbusmenuServer * server, guint id, GPtrArray * properties, GPtrArray ** output, GError ** error)
+{
+ DbusmenuServerPrivate * priv = DBUSMENU_SERVER_GET_PRIVATE(server);
+ DbusmenuMenuitem * mi = id == 0 ? priv->root : dbusmenu_menuitem_find_id(priv->root, id);
+
+ if (mi == NULL) {
+ if (error != NULL) {
+ g_set_error(error,
+ error_quark(),
+ INVALID_MENUITEM_ID,
+ "The ID supplied %d does not refer to a menu item we have",
+ id);
+ }
+ return FALSE;
+ }
+
+ *output = g_ptr_array_new();
+ GList * children = dbusmenu_menuitem_get_children(mi);
+ g_list_foreach(children, serialize_menuitem, *output);
+
+ return TRUE;
+}
+
static gboolean
_dbusmenu_server_event (DbusmenuServer * server, guint id, gchar * eventid, GValue * data, GError ** error)
{
diff --git a/tests/Makefile.am b/tests/Makefile.am
index fa18b9d..5297dbd 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -44,7 +44,7 @@ glib_server_nomenu_LDADD = \
test-glib-layout: test-glib-layout-client test-glib-layout-server Makefile.am
@echo "#!/bin/bash" > $@
- @echo $(DBUS_RUNNER) -b $@.bustle --task ./test-glib-layout-client --task-name Client --task ./test-glib-layout-server --task-name Server --ignore-return >> $@
+ @echo $(DBUS_RUNNER) --task ./test-glib-layout-client --task-name Client --task ./test-glib-layout-server --task-name Server --ignore-return >> $@
@chmod +x $@
test_glib_layout_server_SOURCES = \
@@ -80,7 +80,7 @@ OBJECT_XML_REPORT = test-glib-objects.xml
test-glib-objects-test: test-glib-objects Makefile.am
@echo "#!/bin/bash" > $@
- @echo $(DBUS_RUNNER) -b $@.bustle --task gtester --parameter -k --parameter -o --parameter $(OBJECT_XML_REPORT) --parameter ./test-glib-objects >> $@
+ @echo $(DBUS_RUNNER) --task gtester --parameter --verbose --parameter -k --parameter -o --parameter $(OBJECT_XML_REPORT) --parameter ./test-glib-objects >> $@
@chmod +x $@
test_glib_objects_SOURCES = \
@@ -100,7 +100,7 @@ test_glib_objects_LDADD = \
test-glib-properties: test-glib-properties-client test-glib-properties-server Makefile.am
@echo "#!/bin/bash" > $@
- @echo $(DBUS_RUNNER) -b $@.bustle --task ./test-glib-properties-client --task-name Client --task ./test-glib-properties-server --task-name Server --ignore-return >> $@
+ @echo $(DBUS_RUNNER) --task ./test-glib-properties-client --task-name Client --task ./test-glib-properties-server --task-name Server --ignore-return >> $@
@chmod +x $@
test_glib_properties_server_SOURCES = \
@@ -149,7 +149,7 @@ test_glib_simple_items_LDADD = \
test-gtk-label: test-gtk-label-client test-gtk-label-server test-gtk-label.json Makefile.am
@echo "#!/bin/bash" > $@
@echo $(XVFB_RUN) >> $@
- @echo $(DBUS_RUNNER) -b $@.bustle --task ./test-gtk-label-client --task-name Client --task ./test-gtk-label-server --parameter $(srcdir)/test-gtk-label.json --task-name Server --ignore-return >> $@
+ @echo $(DBUS_RUNNER) --task ./test-gtk-label-client --task-name Client --task ./test-gtk-label-server --parameter $(srcdir)/test-gtk-label.json --task-name Server --ignore-return >> $@
@chmod +x $@
test_gtk_label_server_SOURCES = \
@@ -189,7 +189,7 @@ test_gtk_label_client_LDADD = \
test-gtk-reorder: test-gtk-label-client test-gtk-reorder-server Makefile.am
@echo "#!/bin/bash" > $@
@echo $(XVFB_RUN) >> $@
- @echo $(DBUS_RUNNER) -b $@.bustle --task ./test-gtk-label-client --task-name Client --task ./test-gtk-reorder-server --parameter $(srcdir)/test-gtk-label.json --task-name Server --ignore-return >> $@
+ @echo $(DBUS_RUNNER) --task ./test-gtk-label-client --task-name Client --task ./test-gtk-reorder-server --parameter $(srcdir)/test-gtk-label.json --task-name Server --ignore-return >> $@
@chmod +x $@
test_gtk_reorder_server_SOURCES = \
@@ -263,10 +263,5 @@ distclean-local:
DISTCLEANFILES = \
$(TESTS) \
- $(OBJECT_XML_FILE) \
- test-glib-objects-test.bustle \
- test-glib-layout.bustle \
- test-glib-properties.bustle \
- test-glib-simple-items.bustle \
- test-gtk-label.bustle \
- test-gtk-reorder.bustle
+ $(OBJECT_XML_REPORT)
+
diff --git a/tests/test-glib-layout-client.c b/tests/test-glib-layout-client.c
index 6a79321..a7dd683 100644
--- a/tests/test-glib-layout-client.c
+++ b/tests/test-glib-layout-client.c
@@ -111,7 +111,7 @@ main (int argc, char ** argv)
g_usleep(500000);
- DbusmenuClient * client = dbusmenu_client_new(":1.1", "/org/test");
+ DbusmenuClient * client = dbusmenu_client_new(":1.0", "/org/test");
g_signal_connect(G_OBJECT(client), DBUSMENU_CLIENT_SIGNAL_LAYOUT_UPDATED, G_CALLBACK(layout_updated), NULL);
g_timeout_add_seconds(10, timer_func, client);
diff --git a/tests/test-glib-objects.c b/tests/test-glib-objects.c
index 7b22b7a..f3fbcc8 100644
--- a/tests/test-glib-objects.c
+++ b/tests/test-glib-objects.c
@@ -155,9 +155,10 @@ test_object_menuitem_props_swap (void)
static void
test_object_menuitem_props_signals_helper (DbusmenuMenuitem * mi, gchar * property, GValue * value, GValue ** out)
{
- /* g_debug("Signal handler got: %s", property); */
if (!g_strcmp0(property, "swapper")) {
*out = value;
+ } else {
+ g_warning("Signal handler got: %s", property);
}
return;
}
diff --git a/tests/test-glib-properties-client.c b/tests/test-glib-properties-client.c
index 9e257ea..39815aa 100644
--- a/tests/test-glib-properties-client.c
+++ b/tests/test-glib-properties-client.c
@@ -155,7 +155,7 @@ main (int argc, char ** argv)
/* Make sure the server starts up and all that */
g_usleep(500000);
- DbusmenuClient * client = dbusmenu_client_new(":1.1", "/org/test");
+ DbusmenuClient * client = dbusmenu_client_new(":1.0", "/org/test");
g_signal_connect(G_OBJECT(client), DBUSMENU_CLIENT_SIGNAL_LAYOUT_UPDATED, G_CALLBACK(layout_updated), NULL);
death_timer = g_timeout_add_seconds(10, timer_func, client);