| Index: chrome/browser/gtk/menu_gtk.cc
|
| diff --git a/chrome/browser/gtk/menu_gtk.cc b/chrome/browser/gtk/menu_gtk.cc
|
| index e8c856b3583753551a27479ebacf8213b4657853..179b8d6375f4f09c203155be57b71c10eec34e17 100644
|
| --- a/chrome/browser/gtk/menu_gtk.cc
|
| +++ b/chrome/browser/gtk/menu_gtk.cc
|
| @@ -92,7 +92,7 @@ void SetupDynamicLabelMenuButton(GtkWidget* button,
|
| int index) {
|
| if (model->IsLabelDynamicAt(index)) {
|
| g_object_set_data(G_OBJECT(button), "button-model",
|
| - reinterpret_cast<void*>(model));
|
| + model);
|
| g_object_set_data(G_OBJECT(button), "button-model-id",
|
| GINT_TO_POINTER(index));
|
| g_signal_connect(menu, "show", G_CALLBACK(OnSubmenuShowButtonMenuItem),
|
| @@ -100,6 +100,32 @@ void SetupDynamicLabelMenuButton(GtkWidget* button,
|
| }
|
| }
|
|
|
| +void OnSubmenuShowButtonImage(GtkWidget* widget, GtkButton* button) {
|
| + MenuGtk::Delegate* delegate = reinterpret_cast<MenuGtk::Delegate*>(
|
| + g_object_get_data(G_OBJECT(button), "menu-gtk-delegate"));
|
| + int icon_idr = GPOINTER_TO_INT(g_object_get_data(
|
| + G_OBJECT(button), "button-image-idr"));
|
| +
|
| + GtkIconSet* icon_set = delegate->GetIconSetForId(icon_idr);
|
| + if (icon_set) {
|
| + gtk_button_set_image(
|
| + button, gtk_image_new_from_icon_set(icon_set,
|
| + GTK_ICON_SIZE_MENU));
|
| + }
|
| +}
|
| +
|
| +void SetupImageIcon(GtkWidget* button,
|
| + GtkWidget* menu,
|
| + int icon_idr,
|
| + MenuGtk::Delegate* menu_gtk_delegate) {
|
| + g_object_set_data(G_OBJECT(button), "button-image-idr",
|
| + GINT_TO_POINTER(icon_idr));
|
| + g_object_set_data(G_OBJECT(button), "menu-gtk-delegate",
|
| + menu_gtk_delegate);
|
| +
|
| + g_signal_connect(menu, "show", G_CALLBACK(OnSubmenuShowButtonImage), button);
|
| +}
|
| +
|
| // Popup menus may get squished if they open up too close to the bottom of the
|
| // screen. This function takes the size of the screen, the size of the menu,
|
| // an optional widget, the Y position of the mouse click, and adjusts the popup
|
| @@ -329,8 +355,7 @@ void MenuGtk::BuildSubmenuFromModel(menus::MenuModel* model, GtkWidget* menu) {
|
| GTK_ACCEL_VISIBLE);
|
| }
|
|
|
| - g_object_set_data(G_OBJECT(menu_item), "model",
|
| - reinterpret_cast<void*>(model));
|
| + g_object_set_data(G_OBJECT(menu_item), "model", model);
|
| AppendMenuItemToMenu(i, menu_item, menu, connect_to_activate);
|
|
|
| if (model->IsLabelDynamicAt(i)) {
|
| @@ -348,8 +373,7 @@ GtkWidget* MenuGtk::BuildButtomMenuItem(menus::ButtonMenuItemModel* model,
|
| RemoveWindowsStyleAccelerators(UTF16ToUTF8(model->label())).c_str());
|
|
|
| // Set up the callback to the model for when it is clicked.
|
| - g_object_set_data(G_OBJECT(menu_item), "button-model",
|
| - reinterpret_cast<void*>(model));
|
| + g_object_set_data(G_OBJECT(menu_item), "button-model", model);
|
| g_signal_connect(menu_item, "button-pushed",
|
| G_CALLBACK(OnMenuButtonPressed), this);
|
|
|
| @@ -366,13 +390,7 @@ GtkWidget* MenuGtk::BuildButtomMenuItem(menus::ButtonMenuItemModel* model,
|
|
|
| int icon_idr;
|
| if (model->GetIconAt(i, &icon_idr)) {
|
| - // TODO(erg): This should go through the GtkThemeProvider so we can
|
| - // get a version tinted to label color.
|
| - gtk_button_set_image(
|
| - GTK_BUTTON(button),
|
| - gtk_image_new_from_pixbuf(
|
| - ResourceBundle::GetSharedInstance().
|
| - GetPixbufNamed(icon_idr)));
|
| + SetupImageIcon(button, menu, icon_idr, delegate_);
|
| } else {
|
| gtk_button_set_label(
|
| GTK_BUTTON(button),
|
|
|