Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(532)

Unified Diff: chrome/browser/ui/gtk/menu_gtk.cc

Issue 6840068: GTK: Add Recently Closed tabs to the History menu in the global menu bar. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Maybe abandoning this way Created 9 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..c97727fa446b53189dcf983ba96dc775e8c1c5c9 100644
--- a/chrome/browser/ui/gtk/menu_gtk.cc
+++ b/chrome/browser/ui/gtk/menu_gtk.cc
@@ -11,7 +11,6 @@
#include "base/message_loop.h"
#include "base/stl_util-inl.h"
#include "base/utf_string_conversions.h"
-#include "chrome/app/chrome_command_ids.h"
#include "chrome/browser/ui/gtk/gtk_custom_menu.h"
#include "chrome/browser/ui/gtk/gtk_custom_menu_item.h"
#include "chrome/browser/ui/gtk/gtk_util.h"
@@ -114,171 +113,11 @@ int CalculateMenuYPosition(const GdkRectangle* screen_rect,
} // namespace
-GtkWidget* MenuGtk::Delegate::GetDefaultImageForCommandId(int command_id) {
- const char* stock;
- switch (command_id) {
- case IDC_NEW_TAB:
- case IDC_CONTENT_CONTEXT_OPENIMAGENEWTAB:
- case IDC_CONTENT_CONTEXT_OPENLINKNEWTAB:
- case IDC_CONTENT_CONTEXT_OPENAVNEWTAB:
- stock = GTK_STOCK_NEW;
- break;
-
- case IDC_CLOSE_TAB:
- stock = GTK_STOCK_CLOSE;
- break;
-
- case IDC_CONTENT_CONTEXT_SAVEIMAGEAS:
- case IDC_CONTENT_CONTEXT_SAVEAVAS:
- case IDC_CONTENT_CONTEXT_SAVELINKAS:
- stock = GTK_STOCK_SAVE_AS;
- break;
-
- case IDC_SAVE_PAGE:
- stock = GTK_STOCK_SAVE;
- break;
-
- case IDC_COPY:
- case IDC_COPY_URL:
- case IDC_CONTENT_CONTEXT_COPYIMAGELOCATION:
- case IDC_CONTENT_CONTEXT_COPYLINKLOCATION:
- case IDC_CONTENT_CONTEXT_COPYAVLOCATION:
- case IDC_CONTENT_CONTEXT_COPYEMAILADDRESS:
- case IDC_CONTENT_CONTEXT_COPY:
- stock = GTK_STOCK_COPY;
- break;
-
- case IDC_CUT:
- case IDC_CONTENT_CONTEXT_CUT:
- stock = GTK_STOCK_CUT;
- break;
-
- case IDC_PASTE:
- case IDC_CONTENT_CONTEXT_PASTE:
- stock = GTK_STOCK_PASTE;
- break;
-
- case IDC_CONTENT_CONTEXT_DELETE:
- case IDC_BOOKMARK_BAR_REMOVE:
- stock = GTK_STOCK_DELETE;
- break;
-
- case IDC_CONTENT_CONTEXT_UNDO:
- stock = GTK_STOCK_UNDO;
- break;
-
- case IDC_CONTENT_CONTEXT_REDO:
- stock = GTK_STOCK_REDO;
- break;
-
- case IDC_SEARCH:
- case IDC_FIND:
- case IDC_CONTENT_CONTEXT_SEARCHWEBFOR:
- stock = GTK_STOCK_FIND;
- break;
-
- case IDC_CONTENT_CONTEXT_SELECTALL:
- stock = GTK_STOCK_SELECT_ALL;
- break;
-
- case IDC_CLEAR_BROWSING_DATA:
- stock = GTK_STOCK_CLEAR;
- break;
-
- case IDC_BACK:
- stock = GTK_STOCK_GO_BACK;
- break;
-
- case IDC_RELOAD:
- stock = GTK_STOCK_REFRESH;
- break;
-
- case IDC_FORWARD:
- stock = GTK_STOCK_GO_FORWARD;
- break;
-
- case IDC_PRINT:
- stock = GTK_STOCK_PRINT;
- break;
-
- case IDC_CONTENT_CONTEXT_VIEWPAGEINFO:
- stock = GTK_STOCK_INFO;
- break;
-
- case IDC_SPELLCHECK_MENU:
- stock = GTK_STOCK_SPELL_CHECK;
- break;
-
- case IDC_RESTORE_TAB:
- stock = GTK_STOCK_UNDELETE;
- break;
-
- case IDC_HOME:
- stock = GTK_STOCK_HOME;
- break;
-
- case IDC_STOP:
- stock = GTK_STOCK_STOP;
- break;
-
- case IDC_ABOUT:
- stock = GTK_STOCK_ABOUT;
- break;
-
- case IDC_EXIT:
- stock = GTK_STOCK_QUIT;
- break;
-
- case IDC_HELP_PAGE:
- stock = GTK_STOCK_HELP;
- break;
-
- case IDC_OPTIONS:
- stock = GTK_STOCK_PREFERENCES;
- break;
-
- case IDC_CONTENT_CONTEXT_GOTOURL:
- stock = GTK_STOCK_JUMP_TO;
- break;
-
- case IDC_DEV_TOOLS_INSPECT:
- case IDC_CONTENT_CONTEXT_INSPECTELEMENT:
- stock = GTK_STOCK_PROPERTIES;
- break;
-
- case IDC_BOOKMARK_BAR_ADD_NEW_BOOKMARK:
- stock = GTK_STOCK_ADD;
- break;
-
- case IDC_BOOKMARK_BAR_RENAME_FOLDER:
- case IDC_BOOKMARK_BAR_EDIT:
- stock = GTK_STOCK_EDIT;
- break;
-
- case IDC_BOOKMARK_BAR_NEW_FOLDER:
- stock = GTK_STOCK_DIRECTORY;
- break;
-
- case IDC_BOOKMARK_BAR_OPEN_ALL:
- stock = GTK_STOCK_OPEN;
- break;
-
- default:
- stock = NULL;
- }
-
- return stock ? gtk_image_new_from_stock(stock, GTK_ICON_SIZE_MENU) : NULL;
-}
-
-GtkWidget* MenuGtk::Delegate::GetImageForCommandId(int command_id) const {
- return GetDefaultImageForCommandId(command_id);
-}
-
MenuGtk::MenuGtk(MenuGtk::Delegate* delegate,
ui::MenuModel* model)
- : delegate_(delegate),
+ : GtkMenuCreator(delegate),
+ delegate_(delegate),
model_(model),
- dummy_accel_group_(gtk_accel_group_new()),
menu_(gtk_custom_menu_new()),
factory_(this) {
DCHECK(model);
@@ -294,7 +133,6 @@ MenuGtk::~MenuGtk() {
g_object_unref(menu_);
STLDeleteContainerPointers(submenus_we_own_.begin(), submenus_we_own_.end());
- g_object_unref(dummy_accel_group_);
}
void MenuGtk::ConnectSignalHandlers() {
@@ -339,19 +177,20 @@ GtkWidget* MenuGtk::AppendMenuItem(int command_id, GtkWidget* menu_item) {
GTK_IS_IMAGE_MENU_ITEM(menu_item))
gtk_util::SetAlwaysShowImage(menu_item);
- return AppendMenuItemToMenu(command_id, NULL, menu_item, menu_, true);
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu_), menu_item);
+ return AppendMenuItemToMenu(command_id, NULL, menu_item, menu_);
}
GtkWidget* MenuGtk::AppendMenuItemToMenu(int index,
ui::MenuModel* model,
GtkWidget* menu_item,
- GtkWidget* menu,
- bool connect_to_activate) {
+ GtkWidget* menu) {
SetMenuItemID(menu_item, index);
// Native menu items do their own thing, so only selectively listen for the
// activate signal.
- if (connect_to_activate) {
+ if (!model ||
+ model->GetTypeAt(index) != ui::MenuModel::TYPE_BUTTON_ITEM) {
g_signal_connect(menu_item, "activate",
G_CALLBACK(OnMenuItemActivatedThunk), this);
}
@@ -365,7 +204,7 @@ GtkWidget* MenuGtk::AppendMenuItemToMenu(int index,
} else {
gtk_widget_show(menu_item);
}
- gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item);
+
return menu_item;
}
@@ -404,116 +243,10 @@ void MenuGtk::UpdateMenu() {
gtk_container_foreach(GTK_CONTAINER(menu_), SetMenuItemInfo, this);
}
-GtkWidget* MenuGtk::BuildMenuItemWithImage(const std::string& label,
- GtkWidget* image) {
- GtkWidget* menu_item =
- gtk_image_menu_item_new_with_mnemonic(label.c_str());
- gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_item), image);
- return menu_item;
-}
-
-GtkWidget* MenuGtk::BuildMenuItemWithImage(const std::string& label,
- const SkBitmap& icon) {
- GdkPixbuf* pixbuf = gfx::GdkPixbufFromSkBitmap(&icon);
- GtkWidget* menu_item = BuildMenuItemWithImage(label,
- gtk_image_new_from_pixbuf(pixbuf));
- g_object_unref(pixbuf);
- return menu_item;
-}
-
-GtkWidget* MenuGtk::BuildMenuItemWithLabel(const std::string& label,
- int command_id) {
- GtkWidget* img =
- delegate_ ? delegate_->GetImageForCommandId(command_id) :
- MenuGtk::Delegate::GetDefaultImageForCommandId(command_id);
- return img ? BuildMenuItemWithImage(label, img) :
- gtk_menu_item_new_with_mnemonic(label.c_str());
-}
-
void MenuGtk::BuildMenuFromModel() {
BuildSubmenuFromModel(model_, menu_);
}
-void MenuGtk::BuildSubmenuFromModel(ui::MenuModel* model, GtkWidget* menu) {
- std::map<int, GtkWidget*> radio_groups;
- GtkWidget* menu_item = NULL;
- for (int i = 0; i < model->GetItemCount(); ++i) {
- SkBitmap icon;
- std::string label =
- gfx::ConvertAcceleratorsFromWindowsStyle(
- UTF16ToUTF8(model->GetLabelAt(i)));
- bool connect_to_activate = true;
-
- switch (model->GetTypeAt(i)) {
- case ui::MenuModel::TYPE_SEPARATOR:
- menu_item = gtk_separator_menu_item_new();
- break;
-
- case ui::MenuModel::TYPE_CHECK:
- menu_item = gtk_check_menu_item_new_with_mnemonic(label.c_str());
- break;
-
- case ui::MenuModel::TYPE_RADIO: {
- std::map<int, GtkWidget*>::iterator iter =
- radio_groups.find(model->GetGroupIdAt(i));
-
- if (iter == radio_groups.end()) {
- menu_item = gtk_radio_menu_item_new_with_mnemonic(
- NULL, label.c_str());
- radio_groups[model->GetGroupIdAt(i)] = menu_item;
- } else {
- menu_item = gtk_radio_menu_item_new_with_mnemonic_from_widget(
- GTK_RADIO_MENU_ITEM(iter->second), label.c_str());
- }
- break;
- }
- case ui::MenuModel::TYPE_BUTTON_ITEM: {
- ui::ButtonMenuItemModel* button_menu_item_model =
- model->GetButtonMenuItemAt(i);
- menu_item = BuildButtonMenuItem(button_menu_item_model, menu);
- connect_to_activate = false;
- break;
- }
- case ui::MenuModel::TYPE_SUBMENU:
- case ui::MenuModel::TYPE_COMMAND: {
- int command_id = model->GetCommandIdAt(i);
- if (model->GetIconAt(i, &icon))
- menu_item = BuildMenuItemWithImage(label, icon);
- else
- menu_item = BuildMenuItemWithLabel(label, command_id);
- if (delegate_ && delegate_->AlwaysShowIconForCmd(command_id) &&
- GTK_IS_IMAGE_MENU_ITEM(menu_item))
- gtk_util::SetAlwaysShowImage(menu_item);
- break;
- }
-
- default:
- NOTREACHED();
- }
-
- if (model->GetTypeAt(i) == ui::MenuModel::TYPE_SUBMENU) {
- GtkWidget* submenu = gtk_menu_new();
- BuildSubmenuFromModel(model->GetSubmenuModelAt(i), submenu);
- gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item), submenu);
- }
-
- ui::AcceleratorGtk accelerator;
- if (model->GetAcceleratorAt(i, &accelerator)) {
- gtk_widget_add_accelerator(menu_item,
- "activate",
- dummy_accel_group_,
- accelerator.GetGdkKeyCode(),
- accelerator.gdk_modifier_type(),
- GTK_ACCEL_VISIBLE);
- }
-
- g_object_set_data(G_OBJECT(menu_item), "model", model);
- AppendMenuItemToMenu(i, model, menu_item, menu, connect_to_activate);
-
- menu_item = NULL;
- }
-}
-
GtkWidget* MenuGtk::BuildButtonMenuItem(ui::ButtonMenuItemModel* model,
GtkWidget* menu) {
GtkWidget* menu_item = gtk_custom_menu_item_new(

Powered by Google App Engine
This is Rietveld 408576698