diff options
Diffstat (limited to 'libdbusmenu-glib/menuitem.c')
-rw-r--r-- | libdbusmenu-glib/menuitem.c | 34 |
1 files changed, 26 insertions, 8 deletions
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; |