← Back to team overview

ayatana-commits team mailing list archive

[Merge] lp:~ted/dbusmenu/check-item-fix into lp:dbusmenu

 

Ted Gould has proposed merging lp:~ted/dbusmenu/check-item-fix into lp:dbusmenu.

Requested reviews:
  DBus Menu Team (dbusmenu-team)


Fixing check items.
-- 
https://code.launchpad.net/~ted/dbusmenu/check-item-fix/+merge/43304
Your team ayatana-commits is subscribed to branch lp:dbusmenu.
=== modified file 'libdbusmenu-gtk/genericmenuitem.c'
--- libdbusmenu-gtk/genericmenuitem.c	2010-12-02 19:52:54 +0000
+++ libdbusmenu-gtk/genericmenuitem.c	2010-12-09 22:49:53 +0000
@@ -65,6 +65,7 @@
 static void draw_indicator (GtkCheckMenuItem *check_menu_item, GdkRectangle *area);
 static void (*parent_draw_indicator) (GtkCheckMenuItem *check_menu_item, GdkRectangle *area) = NULL;
 #endif
+static void (*parent_menuitem_activate) (GtkMenuItem * mi) = NULL;
 
 /* Initializing all of the classes.  Most notably we're
    disabling the drawing of the check early. */
@@ -86,6 +87,7 @@
 	GtkMenuItemClass * menuitem_class = GTK_MENU_ITEM_CLASS (klass);
 	menuitem_class->set_label = set_label;
 	menuitem_class->get_label = get_label;
+	parent_menuitem_activate = menuitem_class->activate;
 	menuitem_class->activate = activate;
 
 	return;
@@ -333,21 +335,19 @@
 	item->priv->state = state;
 
 	GtkCheckMenuItem * check = GTK_CHECK_MENU_ITEM(item);
-
-	gboolean old_active = gtk_check_menu_item_get_active (check);
-	gboolean old_inconsist = gtk_check_menu_item_get_inconsistent (check);
+	gboolean goal_active = FALSE;
 
 	switch (item->priv->state) {
 	case GENERICMENUITEM_STATE_UNCHECKED:
-		gtk_check_menu_item_set_active (check, FALSE);
+		goal_active = FALSE;
 		gtk_check_menu_item_set_inconsistent (check, FALSE);
 		break;
 	case GENERICMENUITEM_STATE_CHECKED:
-		gtk_check_menu_item_set_active (check, TRUE);
+		goal_active = TRUE;
 		gtk_check_menu_item_set_inconsistent (check, FALSE);
 		break;
 	case GENERICMENUITEM_STATE_INDETERMINATE:
-		gtk_check_menu_item_set_active (check, TRUE);
+		goal_active = TRUE;
 		gtk_check_menu_item_set_inconsistent (check, TRUE);
 		break;
 	default:
@@ -355,15 +355,11 @@
 		return;
 	}
 
-	if (old_active != gtk_check_menu_item_get_active (check)) {
-		g_object_notify(G_OBJECT(item), "active");
-	}
-
-	if (old_inconsist != gtk_check_menu_item_get_inconsistent (check)) {
-		g_object_notify(G_OBJECT(item), "inconsistent");
-	}
-
-	gtk_widget_queue_draw(GTK_WIDGET(item));
+	if (goal_active != gtk_check_menu_item_get_active(check)) {
+		if (parent_menuitem_activate != NULL) {
+			parent_menuitem_activate(GTK_MENU_ITEM(check));
+		}
+	}
 
 	return;
 }


Follow ups