diff options
-rw-r--r-- | .bzrignore | 1 | ||||
-rw-r--r-- | debian/changelog | 7 | ||||
-rw-r--r-- | libdbusmenu-glib/menuitem.c | 34 | ||||
-rw-r--r-- | libdbusmenu-glib/server.c | 4 | ||||
-rw-r--r-- | tests/test-glib-layout-client.c | 8 | ||||
-rw-r--r-- | tests/test-glib-layout-server.c | 4 | ||||
-rw-r--r-- | tests/test-glib-layout.h | 22 | ||||
-rw-r--r-- | tests/test-glib-objects.c | 25 |
8 files changed, 80 insertions, 25 deletions
@@ -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); |