From 8453c34c99dea3ab0742bfb87045b880a723c4f9 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 4 Feb 2010 19:30:15 -0800 Subject: Setting the initial id to -1 and then if so, and we get it, find us a good one. --- libdbusmenu-glib/menuitem.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'libdbusmenu-glib/menuitem.c') diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index 14bc2db..6739257 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -270,7 +270,7 @@ dbusmenu_menuitem_init (DbusmenuMenuitem *self) { DbusmenuMenuitemPrivate * priv = DBUSMENU_MENUITEM_GET_PRIVATE(self); - priv->id = 0; + priv->id = -1; priv->children = NULL; priv->properties = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, _g_value_free); @@ -335,6 +335,9 @@ get_property (GObject * obj, guint id, GValue * value, GParamSpec * pspec) switch (id) { case PROP_ID: + if (priv->id == -1) { + priv->id = menuitem_next_id++; + } g_value_set_int(value, priv->id); break; } -- cgit v1.2.3 From ac26a4454690ed124e9efa5f5be6b4c3ac05c1b2 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 4 Feb 2010 19:55:00 -0800 Subject: Changing the IDs so that they're all INTs --- libdbusmenu-glib/menuitem.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'libdbusmenu-glib/menuitem.c') diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index 6739257..a6f0e40 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -395,15 +395,15 @@ dbusmenu_menuitem_new_with_id (gint id) Return value: The ID of the @mi. */ -guint +gint dbusmenu_menuitem_get_id (DbusmenuMenuitem * mi) { g_return_val_if_fail(DBUSMENU_IS_MENUITEM(mi), 0); GValue retval = {0}; - g_value_init(&retval, G_TYPE_UINT); + g_value_init(&retval, G_TYPE_INT); g_object_get_property(G_OBJECT(mi), "id", &retval); - return g_value_get_uint(&retval); + return g_value_get_int(&retval); } /** -- cgit v1.2.3 From f53b4c6d5d510948d17ffb8cd164b8429aaec552 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 4 Feb 2010 20:45:14 -0800 Subject: Better error value now that we're on gint --- libdbusmenu-glib/menuitem.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'libdbusmenu-glib/menuitem.c') diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index a6f0e40..243b07e 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -398,7 +398,7 @@ 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); -- cgit v1.2.3 From 77eaa10df429d43f8e92c05be8e06d00d4b20bd7 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 4 Feb 2010 20:46:10 -0800 Subject: Turning 'id' into a #define --- libdbusmenu-glib/menuitem.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'libdbusmenu-glib/menuitem.c') diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index 243b07e..de4a079 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,7 +212,7 @@ 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, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); @@ -368,7 +370,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, PROP_ID_S, menuitem_next_id++, NULL); } /** @@ -382,7 +384,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; } @@ -402,7 +404,7 @@ dbusmenu_menuitem_get_id (DbusmenuMenuitem * mi) GValue retval = {0}; g_value_init(&retval, G_TYPE_INT); - g_object_get_property(G_OBJECT(mi), "id", &retval); + g_object_get_property(G_OBJECT(mi), PROP_ID_S, &retval); return g_value_get_int(&retval); } -- cgit v1.2.3 From 7ab5984535b4e5165f09a7a2dd36c252f8bdfbc2 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 4 Feb 2010 20:48:08 -0800 Subject: Removing the work around --- libdbusmenu-glib/menuitem.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'libdbusmenu-glib/menuitem.c') diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index de4a079..6540a70 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -370,7 +370,7 @@ handle_event (DbusmenuMenuitem * mi, const gchar * name, const GValue * value, g DbusmenuMenuitem * dbusmenu_menuitem_new (void) { - return g_object_new(DBUSMENU_TYPE_MENUITEM, PROP_ID_S, menuitem_next_id++, NULL); + return g_object_new(DBUSMENU_TYPE_MENUITEM, NULL); } /** -- cgit v1.2.3 From 6203f12f1efe370b7f45ace7fe56ce1afd34337c Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 4 Feb 2010 21:17:32 -0800 Subject: Making it so that find_id handles the root id being 0 case. --- libdbusmenu-glib/menuitem.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'libdbusmenu-glib/menuitem.c') diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index 6540a70..6b8b505 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -715,6 +715,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; -- cgit v1.2.3 From a7295dd2c5647f2ed599380e67c07d2281f4fd08 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 4 Feb 2010 21:41:32 -0800 Subject: Start at '1' instead of '0' --- libdbusmenu-glib/menuitem.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'libdbusmenu-glib/menuitem.c') diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index 6b8b505..1f4038e 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -251,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. */ -- cgit v1.2.3 From b45a161f2cc5fc8aba4f1c8837ce337b1a9bb339 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 4 Feb 2010 21:59:04 -0800 Subject: Getting massive debugging for getting the id --- libdbusmenu-glib/menuitem.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'libdbusmenu-glib/menuitem.c') diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index 1f4038e..2deac2c 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -405,7 +405,11 @@ dbusmenu_menuitem_get_id (DbusmenuMenuitem * mi) GValue retval = {0}; g_value_init(&retval, G_TYPE_INT); g_object_get_property(G_OBJECT(mi), PROP_ID_S, &retval); - return g_value_get_int(&retval); + gint ret = g_value_get_int(&retval); + #ifdef MASSIVEDEBUGGING + g_debug("Getting menuitem ID: %d", ret); + #endif + return ret; } /** -- cgit v1.2.3 From 326cb8348ebed49490eac85ff1db88f4ecd2491d Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 4 Feb 2010 22:01:04 -0800 Subject: Adding in warnings for invalid property ids --- libdbusmenu-glib/menuitem.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'libdbusmenu-glib/menuitem.c') diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index 2deac2c..467d3f4 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -325,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; @@ -342,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; -- cgit v1.2.3 From 4c4e8cb681afda3eb23befa3db88fd05852d7d6a Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 4 Feb 2010 22:06:09 -0800 Subject: Changing the default for the property to be the same as the struct default. --- libdbusmenu-glib/menuitem.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'libdbusmenu-glib/menuitem.c') diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index 467d3f4..cacc0a8 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -214,7 +214,7 @@ dbusmenu_menuitem_class_init (DbusmenuMenuitemClass *klass) g_object_class_install_property (object_class, PROP_ID, 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 */ -- cgit v1.2.3 From 917517950f45b048111687f2cbae0616b4ef2cba Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 5 Feb 2010 09:19:42 -0800 Subject: If we're the root item always return that our ID is zero. --- libdbusmenu-glib/menuitem.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'libdbusmenu-glib/menuitem.c') diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index cacc0a8..8350b41 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -343,7 +343,11 @@ get_property (GObject * obj, guint id, GValue * value, GParamSpec * pspec) if (priv->id == -1) { priv->id = menuitem_next_id++; } - g_value_set_int(value, priv->id); + if (dbusmenu_menuitem_get_root(DBUSMENU_MENUITEM(obj))) { + g_value_set_int(value, 0); + } else { + g_value_set_int(value, priv->id); + } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, id, pspec); -- cgit v1.2.3 From 0f6f4c9cdd83d80dfd77fbedcc9a9468cb16eaae Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 5 Feb 2010 10:48:48 -0800 Subject: For IDs that we recycle (often the root id) we need to update the properties. Adds a new function to support syncing the properties in the menuitem. --- libdbusmenu-glib/menuitem.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'libdbusmenu-glib/menuitem.c') diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index 8350b41..a2d2682 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -987,6 +987,26 @@ dbusmenu_menuitem_property_exist (DbusmenuMenuitem * mi, const gchar * property) return value != NULL; } +/** + dbusmenu_menuitem_property_remove: + @mi: The #DbusmenuMenuitem to remove the property on. + @property: The property to look for. + + Removes a property from the menuitem. +*/ +void +dbusmenu_menuitem_property_remove (DbusmenuMenuitem * mi, const gchar * property) +{ + g_return_if_fail(DBUSMENU_IS_MENUITEM(mi)); + g_return_if_fail(property != NULL); + + DbusmenuMenuitemPrivate * priv = DBUSMENU_MENUITEM_GET_PRIVATE(mi); + + g_hash_table_remove(priv->properties, property); + + return; +} + /** dbusmenu_menuitem_properties_list: @mi: #DbusmenuMenuitem to list the properties on -- cgit v1.2.3