Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/gtk/menu_gtk.h" | 5 #include "chrome/browser/ui/gtk/menu_gtk.h" |
| 6 | 6 |
| 7 #include <map> | 7 #include <map> |
| 8 | 8 |
| 9 #include "base/i18n/rtl.h" | 9 #include "base/i18n/rtl.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 277 MenuGtk::MenuGtk(MenuGtk::Delegate* delegate, | 277 MenuGtk::MenuGtk(MenuGtk::Delegate* delegate, |
| 278 ui::MenuModel* model) | 278 ui::MenuModel* model) |
| 279 : delegate_(delegate), | 279 : delegate_(delegate), |
| 280 model_(model), | 280 model_(model), |
| 281 dummy_accel_group_(gtk_accel_group_new()), | 281 dummy_accel_group_(gtk_accel_group_new()), |
| 282 menu_(gtk_custom_menu_new()), | 282 menu_(gtk_custom_menu_new()), |
| 283 factory_(this) { | 283 factory_(this) { |
| 284 DCHECK(model); | 284 DCHECK(model); |
| 285 g_object_ref_sink(menu_); | 285 g_object_ref_sink(menu_); |
| 286 ConnectSignalHandlers(); | 286 ConnectSignalHandlers(); |
| 287 model_->SetMenuModelDelegate(this); | |
| 287 BuildMenuFromModel(); | 288 BuildMenuFromModel(); |
| 288 } | 289 } |
| 289 | 290 |
| 290 MenuGtk::~MenuGtk() { | 291 MenuGtk::~MenuGtk() { |
| 291 Cancel(); | 292 Cancel(); |
| 292 | 293 |
| 293 gtk_widget_destroy(menu_); | 294 gtk_widget_destroy(menu_); |
| 294 g_object_unref(menu_); | 295 g_object_unref(menu_); |
| 295 | 296 |
| 296 STLDeleteContainerPointers(submenus_we_own_.begin(), submenus_we_own_.end()); | 297 STLDeleteContainerPointers(submenus_we_own_.begin(), submenus_we_own_.end()); |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 393 | 394 |
| 394 void MenuGtk::PopupAsFromKeyEvent(GtkWidget* widget) { | 395 void MenuGtk::PopupAsFromKeyEvent(GtkWidget* widget) { |
| 395 PopupForWidget(widget, 0, gtk_get_current_event_time()); | 396 PopupForWidget(widget, 0, gtk_get_current_event_time()); |
| 396 gtk_menu_shell_select_first(GTK_MENU_SHELL(menu_), FALSE); | 397 gtk_menu_shell_select_first(GTK_MENU_SHELL(menu_), FALSE); |
| 397 } | 398 } |
| 398 | 399 |
| 399 void MenuGtk::Cancel() { | 400 void MenuGtk::Cancel() { |
| 400 gtk_menu_popdown(GTK_MENU(menu_)); | 401 gtk_menu_popdown(GTK_MENU(menu_)); |
| 401 } | 402 } |
| 402 | 403 |
| 404 void MenuGtk::OnIconChanged(int model_index) { | |
| 405 GList* items = gtk_container_get_children(GTK_CONTAINER(menu_)); | |
| 406 GtkWidget* menu_item = GTK_WIDGET(g_list_nth(items, model_index)->data); | |
| 407 g_list_free(items); | |
| 408 SkBitmap icon; | |
| 409 ui::MenuModel* model = ModelForMenuItem(GTK_MENU_ITEM(menu_item)); | |
|
Evan Stade
2011/04/08 16:45:19
I'd just use model_
| |
| 410 if (model->GetIconAt(model_index, &icon)) { | |
| 411 GdkPixbuf* pixbuf = gfx::GdkPixbufFromSkBitmap(&icon); | |
| 412 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_item), | |
| 413 gtk_image_new_from_pixbuf(pixbuf)); | |
| 414 g_object_unref(pixbuf); | |
| 415 } | |
| 416 } | |
| 417 | |
| 403 void MenuGtk::UpdateMenu() { | 418 void MenuGtk::UpdateMenu() { |
| 404 gtk_container_foreach(GTK_CONTAINER(menu_), SetMenuItemInfo, this); | 419 gtk_container_foreach(GTK_CONTAINER(menu_), SetMenuItemInfo, this); |
| 405 } | 420 } |
| 406 | 421 |
| 407 GtkWidget* MenuGtk::BuildMenuItemWithImage(const std::string& label, | 422 GtkWidget* MenuGtk::BuildMenuItemWithImage(const std::string& label, |
| 408 GtkWidget* image) { | 423 GtkWidget* image) { |
| 409 GtkWidget* menu_item = | 424 GtkWidget* menu_item = |
| 410 gtk_image_menu_item_new_with_mnemonic(label.c_str()); | 425 gtk_image_menu_item_new_with_mnemonic(label.c_str()); |
| 411 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_item), image); | 426 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_item), image); |
| 412 return menu_item; | 427 return menu_item; |
| (...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 716 if (event) | 731 if (event) |
| 717 gdk_event_free(event); | 732 gdk_event_free(event); |
| 718 } | 733 } |
| 719 | 734 |
| 720 void MenuGtk::OnMenuShow(GtkWidget* widget) { | 735 void MenuGtk::OnMenuShow(GtkWidget* widget) { |
| 721 MessageLoop::current()->PostTask(FROM_HERE, | 736 MessageLoop::current()->PostTask(FROM_HERE, |
| 722 factory_.NewRunnableMethod(&MenuGtk::UpdateMenu)); | 737 factory_.NewRunnableMethod(&MenuGtk::UpdateMenu)); |
| 723 } | 738 } |
| 724 | 739 |
| 725 void MenuGtk::OnMenuHidden(GtkWidget* widget) { | 740 void MenuGtk::OnMenuHidden(GtkWidget* widget) { |
| 741 model_->SetMenuModelDelegate(NULL); | |
| 726 if (delegate_) | 742 if (delegate_) |
| 727 delegate_->StoppedShowing(); | 743 delegate_->StoppedShowing(); |
| 728 model_->MenuClosed(); | 744 model_->MenuClosed(); |
| 729 } | 745 } |
| 730 | 746 |
| 731 // static | 747 // static |
| 732 void MenuGtk::SetButtonItemInfo(GtkWidget* button, gpointer userdata) { | 748 void MenuGtk::SetButtonItemInfo(GtkWidget* button, gpointer userdata) { |
| 733 ui::ButtonMenuItemModel* model = | 749 ui::ButtonMenuItemModel* model = |
| 734 reinterpret_cast<ui::ButtonMenuItemModel*>( | 750 reinterpret_cast<ui::ButtonMenuItemModel*>( |
| 735 g_object_get_data(G_OBJECT(button), "button-model")); | 751 g_object_get_data(G_OBJECT(button), "button-model")); |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 823 gtk_widget_hide(widget); | 839 gtk_widget_hide(widget); |
| 824 } | 840 } |
| 825 | 841 |
| 826 GtkWidget* submenu = gtk_menu_item_get_submenu(GTK_MENU_ITEM(widget)); | 842 GtkWidget* submenu = gtk_menu_item_get_submenu(GTK_MENU_ITEM(widget)); |
| 827 if (submenu) { | 843 if (submenu) { |
| 828 gtk_container_foreach(GTK_CONTAINER(submenu), &SetMenuItemInfo, | 844 gtk_container_foreach(GTK_CONTAINER(submenu), &SetMenuItemInfo, |
| 829 userdata); | 845 userdata); |
| 830 } | 846 } |
| 831 } | 847 } |
| 832 } | 848 } |
| 849 | |
| OLD | NEW |