diff finch/libgnt/gntmenu.c @ 21256:e8b0f224483f

Add gnt_menuitem_activate, and 'activate' signal for GntMenuItem.
author Sadrul Habib Chowdhury <imadil@gmail.com>
date Sat, 20 Oct 2007 05:52:52 +0000
parents 9187d331aebe
children 084c5d5472ad
line wrap: on
line diff
--- a/finch/libgnt/gntmenu.c	Sat Oct 20 05:50:48 2007 +0000
+++ b/finch/libgnt/gntmenu.c	Sat Oct 20 05:52:52 2007 +0000
@@ -181,7 +181,15 @@
 static void
 menuitem_activate(GntMenu *menu, GntMenuItem *item)
 {
-	if (item) {
+	if (!item)
+		return;
+
+	if (gnt_menuitem_activate(item)) {
+		while (menu) {
+			gnt_widget_hide(GNT_WIDGET(menu));
+			menu = menu->parentmenu;
+		}
+	} else {
 		if (item->submenu) {
 			GntMenu *sub = GNT_MENU(item->submenu);
 			menu->submenu = sub;
@@ -195,12 +203,6 @@
 			gnt_widget_set_position(GNT_WIDGET(sub), item->priv.x, item->priv.y);
 			GNT_WIDGET_UNSET_FLAGS(GNT_WIDGET(sub), GNT_WIDGET_INVISIBLE);
 			gnt_widget_draw(GNT_WIDGET(sub));
-		} else if (item->callback) {
-			item->callback(item, item->callbackdata);
-			while (menu) {
-				gnt_widget_hide(GNT_WIDGET(menu));
-				menu = menu->parentmenu;
-			}
 		}
 	}
 }
@@ -326,8 +328,7 @@
 	GntMenu *menu = GNT_MENU(tree);
 	gboolean check = gnt_menuitem_check_get_checked(GNT_MENU_ITEM_CHECK(item));
 	gnt_menuitem_check_set_checked(GNT_MENU_ITEM_CHECK(item), !check);
-	if (item->callback)
-		item->callback(item, item->callbackdata);
+	gnt_menuitem_activate(item);
 	while (menu) {
 		gnt_widget_hide(GNT_WIDGET(menu));
 		menu = menu->parentmenu;