From 37f858dbc0411f0b69f9a524ae6f4d89d3bc886b Mon Sep 17 00:00:00 2001
From: "atwilson@chromium.org"
 <atwilson@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>
Date: Tue, 28 Dec 2010 17:45:56 +0000
Subject: [PATCH] Update menu icons for dynamic items when we update the label.

BUG=66508
TEST=enable background mode, see wrench menu badge toggle when extensions load

Review URL: http://codereview.chromium.org/6014009

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@70228 0039d316-1c4b-4281-b951-d872f2087c98
---
 chrome/browser/gtk/menu_gtk.cc | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/chrome/browser/gtk/menu_gtk.cc b/chrome/browser/gtk/menu_gtk.cc
index 04450efdcd3dd..52b9c12ba1f2a 100644
--- a/chrome/browser/gtk/menu_gtk.cc
+++ b/chrome/browser/gtk/menu_gtk.cc
@@ -803,7 +803,6 @@ void MenuGtk::SetMenuItemInfo(GtkWidget* widget, gpointer userdata) {
 
     if (model->IsVisibleAt(id)) {
       // Update the menu item label if it is dynamic.
-      // TODO(atwilson): Update the icon as well (http://crbug.com/66508).
       if (model->IsItemDynamicAt(id)) {
         std::string label =
             gfx::ConvertAcceleratorsFromWindowsStyle(
@@ -814,6 +813,17 @@ void MenuGtk::SetMenuItemInfo(GtkWidget* widget, gpointer userdata) {
 #else
         gtk_label_set_label(GTK_LABEL(GTK_BIN(widget)->child), label.c_str());
 #endif
+        if (GTK_IS_IMAGE_MENU_ITEM(widget)) {
+          SkBitmap icon;
+          if (model->GetIconAt(id, &icon)) {
+            GdkPixbuf* pixbuf = gfx::GdkPixbufFromSkBitmap(&icon);
+            gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(widget),
+                                          gtk_image_new_from_pixbuf(pixbuf));
+            g_object_unref(pixbuf);
+          } else {
+            gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(widget), NULL);
+          }
+        }
       }
 
       gtk_widget_show(widget);
-- 
GitLab