Chromium Code Reviews| 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..19a0207aa8d12a272ea48d56e886e426fdcafb6f 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); |
|
Evan Stade
2011/04/07 18:25:00
Try:
GList* items = gtk_container_get_children(me
dill
2011/04/08 15:48:46
Thanks, much cleaner.
|
| +} |
| + |
| void MenuGtk::UpdateMenu() { |
| gtk_container_foreach(GTK_CONTAINER(menu_), SetMenuItemInfo, this); |
| } |
| @@ -723,6 +728,7 @@ void MenuGtk::OnMenuShow(GtkWidget* widget) { |
| } |
| void MenuGtk::OnMenuHidden(GtkWidget* widget) { |
| + model_->SetMenuModelDelegate(NULL); |
| if (delegate_) |
| delegate_->StoppedShowing(); |
| model_->MenuClosed(); |
| @@ -830,3 +836,23 @@ void MenuGtk::SetMenuItemInfo(GtkWidget* widget, gpointer userdata) { |
| } |
| } |
| } |
| + |
| +// 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); |
| + } |
| + } |
| +} |