From 0b46d2d1e1acbe32b5468565731a6e5a08c9282b Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 25 May 2009 23:08:56 +0200 Subject: Unref'ing the children if we're being killed ourselves --- libdbusmenu-glib/menuitem.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'libdbusmenu-glib/menuitem.c') diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index 9506cad..91429d6 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -185,6 +185,14 @@ dbusmenu_menuitem_init (DbusmenuMenuitem *self) static void dbusmenu_menuitem_dispose (GObject *object) { + DbusmenuMenuitemPrivate * priv = DBUSMENU_MENUITEM_GET_PRIVATE(object); + + GList * child = NULL; + for (child = priv->children; child != NULL; child = g_list_next(child)) { + g_object_unref(G_OBJECT(child->data)); + } + g_list_free(priv->children); + priv->children = NULL; G_OBJECT_CLASS (dbusmenu_menuitem_parent_class)->dispose (object); return; @@ -193,6 +201,7 @@ dbusmenu_menuitem_dispose (GObject *object) static void dbusmenu_menuitem_finalize (GObject *object) { + g_debug("Menuitem dying"); DbusmenuMenuitemPrivate * priv = DBUSMENU_MENUITEM_GET_PRIVATE(object); if (priv->properties != NULL) { -- cgit v1.2.3 From a679639007c82a37fcf144df7ed0e8ce23180a3b Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 26 May 2009 23:30:42 +0200 Subject: Too many values on signal --- 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 91429d6..c4cc297 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -139,7 +139,7 @@ dbusmenu_menuitem_class_init (DbusmenuMenuitemClass *klass) G_STRUCT_OFFSET(DbusmenuMenuitemClass, child_added), NULL, NULL, _dbusmenu_menuitem_marshal_VOID__OBJECT, - G_TYPE_NONE, 2, G_TYPE_OBJECT); + G_TYPE_NONE, 1, G_TYPE_OBJECT); /** DbusmenuMenuitem::child-removed: @arg0: The #DbusmenuMenuitem which was the parent. -- cgit v1.2.3 From 1684aa666fa4c345030c17e439e5287ae1a2498e Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 26 May 2009 23:46:17 +0200 Subject: Adding a reorder and prepend convience functions so that they emit the right signals. --- libdbusmenu-glib/menuitem.c | 47 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) (limited to 'libdbusmenu-glib/menuitem.c') diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index c4cc297..bc499e0 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -402,6 +402,28 @@ dbusmenu_menuitem_child_append (DbusmenuMenuitem * mi, DbusmenuMenuitem * child) return TRUE; } +/** + dbusmenu_menuitem_child_prepend: + @mi: The #DbusmenuMenuitem which will become a new parent + @child: The #DbusmenMenuitem that will be a child + + This function adds @child to the list of children on @mi at + the beginning of that list. + + Return value: Whether the child has been added successfully. +*/ +gboolean +dbusmenu_menuitem_child_prepend (DbusmenuMenuitem * mi, DbusmenuMenuitem * child) +{ + g_return_val_if_fail(DBUSMENU_IS_MENUITEM(mi), FALSE); + g_return_val_if_fail(DBUSMENU_IS_MENUITEM(child), FALSE); + + DbusmenuMenuitemPrivate * priv = DBUSMENU_MENUITEM_GET_PRIVATE(mi); + priv->children = g_list_prepend(priv->children, child); + g_signal_emit(G_OBJECT(mi), signals[CHILD_ADDED], 0, child, TRUE); + return TRUE; +} + /** dbusmenu_menuitem_child_delete: @mi: The #DbusmenuMenuitem which has @child as a child @@ -449,6 +471,31 @@ dbusmenu_menuitem_child_add_position (DbusmenuMenuitem * mi, DbusmenuMenuitem * return TRUE; } +/** + dbusmenu_menuitem_child_reorder: + @base: The #DbusmenuMenuitem that has children needing realignment + @child: The #DbusmenuMenuitem that is a child needing to be moved + @position: The position in the list to place it in + + This function moves a child on the list of children. It is + for a child that is already in the list, but simply needs a + new location. + + Return value: Whether the move was successful. +*/ +gboolean +dbusmenu_menuitem_child_reorder(DbusmenuMenuitem * mi, DbusmenuMenuitem * child, guint position) +{ + g_return_val_if_fail(DBUSMENU_IS_MENUITEM(mi), FALSE); + g_return_val_if_fail(DBUSMENU_IS_MENUITEM(child), FALSE); + + DbusmenuMenuitemPrivate * priv = DBUSMENU_MENUITEM_GET_PRIVATE(mi); + priv->children = g_list_remove(priv->children, child); + priv->children = g_list_insert(priv->children, child, position); + + return TRUE; +} + /** dbusmenu_menuitem_child_find: @mi: The #DbusmenuMenuitem who's children to look on -- cgit v1.2.3 From cf742bc4e9effbb68dd369c8ff9002d59701458c Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 26 May 2009 23:55:32 +0200 Subject: Same cut and paste bug, you'd think I'd be smart enough to check this when I fixed the last one. Dumbass. --- 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 bc499e0..95391a4 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -156,7 +156,7 @@ dbusmenu_menuitem_class_init (DbusmenuMenuitemClass *klass) G_STRUCT_OFFSET(DbusmenuMenuitemClass, child_removed), NULL, NULL, _dbusmenu_menuitem_marshal_VOID__OBJECT, - G_TYPE_NONE, 2, G_TYPE_OBJECT); + G_TYPE_NONE, 1, G_TYPE_OBJECT); g_object_class_install_property (object_class, PROP_ID, g_param_spec_uint("id", "ID for the menu item", -- cgit v1.2.3