| Index: chrome/browser/ui/gtk/menu_gtk.cc
|
| diff --git a/chrome/browser/ui/gtk/menu_gtk.cc b/chrome/browser/ui/gtk/menu_gtk.cc
|
| index 19e4d1264494556eebd6e4a2238be1f6d8c1bf55..189070cb17e6bf6d3c1c1e9d18054122aa62d158 100644
|
| --- a/chrome/browser/ui/gtk/menu_gtk.cc
|
| +++ b/chrome/browser/ui/gtk/menu_gtk.cc
|
| @@ -284,6 +284,7 @@ MenuGtk::MenuGtk(MenuGtk::Delegate* delegate,
|
| DCHECK(model);
|
| g_object_ref_sink(menu_);
|
| ConnectSignalHandlers();
|
| + model->SetMenuModelDelegate(this);
|
| BuildMenuFromModel();
|
| }
|
|
|
| @@ -400,6 +401,10 @@ void MenuGtk::Cancel() {
|
| gtk_menu_popdown(GTK_MENU(menu_));
|
| }
|
|
|
| +void MenuGtk::OnIconChanged(int model_index) {
|
| + gtk_container_foreach(GTK_CONTAINER(menu_), UpdateMenuIcon, &model_index);
|
| +}
|
| +
|
| void MenuGtk::UpdateMenu() {
|
| gtk_container_foreach(GTK_CONTAINER(menu_), SetMenuItemInfo, this);
|
| }
|
| @@ -640,6 +645,26 @@ gboolean MenuGtk::OnMenuTryButtonPressed(GtkWidget* menu_item,
|
| }
|
|
|
| // static
|
| +void MenuGtk::UpdateMenuIcon(GtkWidget* widget, gpointer userdata) {
|
| + if (GTK_IS_MENU_ITEM(widget)) {
|
| + int model_index = *static_cast<int*>(userdata);
|
| + int menu_id;
|
| + GetMenuItemID(widget, &menu_id);
|
| + if (menu_id != model_index) {
|
| + return;
|
| + }
|
| + SkBitmap icon;
|
| + ui::MenuModel* model = ModelForMenuItem(GTK_MENU_ITEM(widget));
|
| + if (model->GetIconAt(model_index, &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);
|
| + }
|
| + }
|
| +}
|
| +
|
| +// static
|
| void MenuGtk::WidgetMenuPositionFunc(GtkMenu* menu,
|
| int* x,
|
| int* y,
|
|
|