aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.bzrignore1
-rw-r--r--debian/changelog7
-rw-r--r--libdbusmenu-glib/menuitem.c34
-rw-r--r--libdbusmenu-glib/server.c4
-rw-r--r--tests/test-glib-layout-client.c8
-rw-r--r--tests/test-glib-layout-server.c4
-rw-r--r--tests/test-glib-layout.h22
-rw-r--r--tests/test-glib-objects.c25
8 files changed, 80 insertions, 25 deletions
diff --git a/.bzrignore b/.bzrignore
index 367f47d..e500766 100644
--- a/.bzrignore
+++ b/.bzrignore
@@ -59,3 +59,4 @@ tests/test-glib-objects
tests/test-glib-objects-test
tests/test-glib-objects.xml
tools/testapp/dbusmenu-testapp
+libdbusmenu-glib/libdbusmenu_glib_la-client-menuitem.lo
diff --git a/debian/changelog b/debian/changelog
index 078450f..5b42273 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+libdbusmenu (0.2.2-0ubuntu1~ppa2~autoid3) UNRELEASED; urgency=low
+
+ * Upstrem Merge
+ * Fixing the range nd default.
+
+ -- Ted Gould <ted@ubuntu.com> Thu, 04 Feb 2010 23:29:52 -0800
+
libdbusmenu (0.2.2-0ubuntu1~ppa2~autoid2) lucid; urgency=low
* Upstream Merge
diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c
index a6f0e40..cacc0a8 100644
--- a/libdbusmenu-glib/menuitem.c
+++ b/libdbusmenu-glib/menuitem.c
@@ -80,6 +80,8 @@ enum {
PROP_ID,
};
+#define PROP_ID_S "id"
+
#define DBUSMENU_MENUITEM_GET_PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE ((o), DBUSMENU_TYPE_MENUITEM, DbusmenuMenuitemPrivate))
@@ -210,9 +212,9 @@ dbusmenu_menuitem_class_init (DbusmenuMenuitemClass *klass)
G_TYPE_NONE, 0, G_TYPE_NONE);
g_object_class_install_property (object_class, PROP_ID,
- g_param_spec_int("id", "ID for the menu item",
+ g_param_spec_int(PROP_ID_S, "ID for the menu item",
"This is a unique indentifier for the menu item.",
- 0, 30000, 0,
+ -1, 30000, -1,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
/* Check transfer functions for GValue */
@@ -249,7 +251,7 @@ g_value_transform_STRING_INT (const GValue * in, GValue * out)
return;
}
-static gint menuitem_next_id = 0;
+static gint menuitem_next_id = 1;
/* A small little function to both clear the insides of a
value as well as the memory it itself uses. */
@@ -323,6 +325,9 @@ set_property (GObject * obj, guint id, const GValue * value, GParamSpec * pspec)
menuitem_next_id = priv->id + 1;
}
break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, id, pspec);
+ break;
}
return;
@@ -340,6 +345,9 @@ get_property (GObject * obj, guint id, GValue * value, GParamSpec * pspec)
}
g_value_set_int(value, priv->id);
break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, id, pspec);
+ break;
}
return;
@@ -368,7 +376,7 @@ handle_event (DbusmenuMenuitem * mi, const gchar * name, const GValue * value, g
DbusmenuMenuitem *
dbusmenu_menuitem_new (void)
{
- return g_object_new(DBUSMENU_TYPE_MENUITEM, "id", menuitem_next_id++, NULL);
+ return g_object_new(DBUSMENU_TYPE_MENUITEM, NULL);
}
/**
@@ -382,7 +390,7 @@ dbusmenu_menuitem_new (void)
DbusmenuMenuitem *
dbusmenu_menuitem_new_with_id (gint id)
{
- DbusmenuMenuitem * mi = g_object_new(DBUSMENU_TYPE_MENUITEM, "id", id, NULL);
+ DbusmenuMenuitem * mi = g_object_new(DBUSMENU_TYPE_MENUITEM, PROP_ID_S, id, NULL);
/* g_debug("New Menuitem id %d goal id %d", dbusmenu_menuitem_get_id(mi), id); */
return mi;
}
@@ -398,12 +406,16 @@ dbusmenu_menuitem_new_with_id (gint id)
gint
dbusmenu_menuitem_get_id (DbusmenuMenuitem * mi)
{
- g_return_val_if_fail(DBUSMENU_IS_MENUITEM(mi), 0);
+ g_return_val_if_fail(DBUSMENU_IS_MENUITEM(mi), -1);
GValue retval = {0};
g_value_init(&retval, G_TYPE_INT);
- g_object_get_property(G_OBJECT(mi), "id", &retval);
- return g_value_get_int(&retval);
+ g_object_get_property(G_OBJECT(mi), PROP_ID_S, &retval);
+ gint ret = g_value_get_int(&retval);
+ #ifdef MASSIVEDEBUGGING
+ g_debug("Getting menuitem ID: %d", ret);
+ #endif
+ return ret;
}
/**
@@ -713,6 +725,12 @@ DbusmenuMenuitem *
dbusmenu_menuitem_find_id (DbusmenuMenuitem * mi, gint id)
{
g_return_val_if_fail(DBUSMENU_IS_MENUITEM(mi), NULL);
+ if (id == 0) {
+ if (dbusmenu_menuitem_get_root(mi) == FALSE) {
+ g_warning("Getting a menuitem with id zero, but it's not set as root.");
+ }
+ return mi;
+ }
find_id_t find_id = {mi: NULL, id: id};
find_id_helper(mi, &find_id);
return find_id.mi;
diff --git a/libdbusmenu-glib/server.c b/libdbusmenu-glib/server.c
index 7d8e5c3..f8267c2 100644
--- a/libdbusmenu-glib/server.c
+++ b/libdbusmenu-glib/server.c
@@ -237,12 +237,14 @@ set_property (GObject * obj, guint id, const GValue * value, GParamSpec * pspec)
case PROP_ROOT_NODE:
if (priv->root != NULL) {
dbusmenu_menuitem_foreach(priv->root, menuitem_signals_remove, obj);
+ dbusmenu_menuitem_set_root(priv->root, FALSE);
g_object_unref(G_OBJECT(priv->root));
priv->root = NULL;
}
priv->root = DBUSMENU_MENUITEM(g_value_get_object(value));
if (priv->root != NULL) {
g_object_ref(G_OBJECT(priv->root));
+ dbusmenu_menuitem_set_root(priv->root, TRUE);
dbusmenu_menuitem_foreach(priv->root, menuitem_signals_create, obj);
} else {
g_debug("Setting root node to NULL");
@@ -516,7 +518,7 @@ static gboolean
_dbusmenu_server_get_children (DbusmenuServer * server, gint 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);
+ DbusmenuMenuitem * mi = dbusmenu_menuitem_find_id(priv->root, id);
if (mi == NULL) {
if (error != NULL) {
diff --git a/tests/test-glib-layout-client.c b/tests/test-glib-layout-client.c
index bb2d13a..82228b5 100644
--- a/tests/test-glib-layout-client.c
+++ b/tests/test-glib-layout-client.c
@@ -36,8 +36,10 @@ verify_root_to_layout(DbusmenuMenuitem * mi, layout_t * layout)
g_debug("Verifying ID: %d", layout->id);
if (layout->id != dbusmenu_menuitem_get_id(mi)) {
- g_debug("Failed as ID %d is not equal to %d", layout->id, dbusmenu_menuitem_get_id(mi));
- return FALSE;
+ if (!(dbusmenu_menuitem_get_root(mi) && dbusmenu_menuitem_get_id(mi) == 0)) {
+ g_debug("Failed as ID %d is not equal to %d", layout->id, dbusmenu_menuitem_get_id(mi));
+ return FALSE;
+ }
}
GList * children = dbusmenu_menuitem_get_children(mi);
@@ -88,7 +90,7 @@ layout_updated (DbusmenuClient * client, gpointer data)
layouton++;
- if (layouts[layouton].id == 0) {
+ if (layouts[layouton].id == -1) {
g_main_loop_quit(mainloop);
}
diff --git a/tests/test-glib-layout-server.c b/tests/test-glib-layout-server.c
index 40dd048..111e164 100644
--- a/tests/test-glib-layout-server.c
+++ b/tests/test-glib-layout-server.c
@@ -41,7 +41,7 @@ layout2menuitem (layout_t * layout)
if (layout->submenu != NULL) {
guint count;
- for (count = 0; layout->submenu[count].id != 0; count++) {
+ for (count = 0; layout->submenu[count].id != -1; count++) {
DbusmenuMenuitem * child = layout2menuitem(&layout->submenu[count]);
if (child != NULL) {
dbusmenu_menuitem_child_append(local, child);
@@ -60,7 +60,7 @@ static GMainLoop * mainloop = NULL;
static gboolean
timer_func (gpointer data)
{
- if (layouts[layouton].id == 0) {
+ if (layouts[layouton].id == -1) {
g_main_loop_quit(mainloop);
return FALSE;
}
diff --git a/tests/test-glib-layout.h b/tests/test-glib-layout.h
index a13125d..b64c4ea 100644
--- a/tests/test-glib-layout.h
+++ b/tests/test-glib-layout.h
@@ -21,51 +21,51 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
typedef struct _layout_t layout_t;
struct _layout_t {
- guint id;
+ gint id;
layout_t * submenu;
};
layout_t submenu_2[] = {
{id: 2, submenu: NULL},
{id: 3, submenu: NULL},
- {id: 0, submenu: NULL}
+ {id: -1, submenu: NULL}
};
layout_t submenu_3_1[] = {
{id: 3, submenu: NULL},
{id: 4, submenu: NULL},
{id: 5, submenu: NULL},
- {id: 0, submenu: NULL}
+ {id: -1, submenu: NULL}
};
layout_t submenu_3_2[] = {
{id: 7, submenu: NULL},
{id: 8, submenu: NULL},
{id: 9, submenu: NULL},
- {id: 0, submenu: NULL}
+ {id: -1, submenu: NULL}
};
layout_t submenu_3[] = {
{id: 2, submenu: submenu_3_1},
{id: 6, submenu: submenu_3_2},
- {id: 0, submenu: NULL}
+ {id: -1, submenu: NULL}
};
layout_t submenu_4_1[] = {
{id: 6, submenu: NULL},
- {id: 0, submenu: NULL}
+ {id: -1, submenu: NULL}
};
layout_t submenu_4_2[] = {
{id: 5, submenu: submenu_4_1},
- {id: 0, submenu: NULL}
+ {id: -1, submenu: NULL}
};
layout_t submenu_4_3[] = {
{id: 4, submenu: submenu_4_2},
- {id: 0, submenu: NULL}
+ {id: -1, submenu: NULL}
};
layout_t submenu_4_4[] = {
{id: 3, submenu: submenu_4_3},
- {id: 0, submenu: NULL}
+ {id: -1, submenu: NULL}
};
layout_t submenu_4_5[] = {
{id: 2, submenu: submenu_4_4},
- {id: 0, submenu: NULL}
+ {id: -1, submenu: NULL}
};
layout_t layouts[] = {
@@ -73,6 +73,6 @@ layout_t layouts[] = {
{id: 1, submenu: submenu_2},
{id: 1, submenu: submenu_3},
{id: 1, submenu: submenu_4_5},
- {id: 0, submenu: NULL}
+ {id: -1, submenu: NULL}
};
diff --git a/tests/test-glib-objects.c b/tests/test-glib-objects.c
index f3fbcc8..1d4f673 100644
--- a/tests/test-glib-objects.c
+++ b/tests/test-glib-objects.c
@@ -47,6 +47,30 @@ test_object_menuitem (void)
return;
}
+/* Check to make sure a new ID is bigger than 0 */
+static void
+test_object_menuitem_id (void)
+{
+ /* Build a menu item */
+ DbusmenuMenuitem * item = dbusmenu_menuitem_new();
+
+ /* Test to make sure it's a happy object */
+ g_assert(item != NULL);
+ g_assert(G_IS_OBJECT(item));
+ g_assert(DBUSMENU_IS_MENUITEM(item));
+
+ g_assert(dbusmenu_menuitem_get_id(item) > 0);
+
+ /* Set up a check to make sure it gets destroyed on unref */
+ g_object_add_weak_pointer(G_OBJECT(item), (gpointer *)&item);
+ g_object_unref(item);
+
+ /* Did it go away? */
+ g_assert(item == NULL);
+
+ return;
+}
+
/* Set a string prop, make sure it's stored as one */
static void
test_object_menuitem_props_string (void)
@@ -255,6 +279,7 @@ static void
test_glib_objects_suite (void)
{
g_test_add_func ("/dbusmenu/glib/objects/menuitem/base", test_object_menuitem);
+ g_test_add_func ("/dbusmenu/glib/objects/menuitem/id", test_object_menuitem_id);
g_test_add_func ("/dbusmenu/glib/objects/menuitem/props_string", test_object_menuitem_props_string);
g_test_add_func ("/dbusmenu/glib/objects/menuitem/props_int", test_object_menuitem_props_int);
g_test_add_func ("/dbusmenu/glib/objects/menuitem/props_bool", test_object_menuitem_props_bool);