Index: chrome/browser/ui/gtk/renderer_context_menu/render_view_context_menu_gtk.cc |
diff --git a/chrome/browser/ui/gtk/renderer_context_menu/render_view_context_menu_gtk.cc b/chrome/browser/ui/gtk/renderer_context_menu/render_view_context_menu_gtk.cc |
deleted file mode 100644 |
index 3adc451000f389f3ffd72bec088329478f17580a..0000000000000000000000000000000000000000 |
--- a/chrome/browser/ui/gtk/renderer_context_menu/render_view_context_menu_gtk.cc |
+++ /dev/null |
@@ -1,242 +0,0 @@ |
-// Copyright 2014 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/browser/ui/gtk/renderer_context_menu/render_view_context_menu_gtk.h" |
- |
-#include <gtk/gtk.h> |
- |
-#include "base/strings/string_util.h" |
-#include "base/strings/utf_string_conversions.h" |
-#include "chrome/app/chrome_command_ids.h" |
-#include "chrome/browser/ui/gtk/gtk_util.h" |
-#include "content/public/browser/render_view_host.h" |
-#include "content/public/browser/render_widget_host_view.h" |
-#include "content/public/browser/web_contents.h" |
-#include "content/public/common/context_menu_params.h" |
-#include "grit/generated_resources.h" |
-#include "ui/base/accelerators/menu_label_accelerator_util_linux.h" |
-#include "ui/base/l10n/l10n_util.h" |
- |
-using content::WebContents; |
- |
-namespace { |
- |
-// A callback function for gtk_container_foreach(). This callback just checks |
-// the menu ID and set the given user data if it is same as the specified ID. |
-struct GtkWidgetAtParam { |
- int index; |
- GtkWidget* widget; |
-}; |
- |
-void GtkWidgetAt(GtkWidget* widget, gpointer user_data) { |
- GtkWidgetAtParam* param = reinterpret_cast<GtkWidgetAtParam*>(user_data); |
- |
- gpointer data = g_object_get_data(G_OBJECT(widget), "menu-id"); |
- if (data && (GPOINTER_TO_INT(data) - 1) == param->index && |
- GTK_IS_MENU_ITEM(widget)) { |
- param->widget = widget; |
- } |
-} |
- |
-// Retrieves a GtkWidget which has the specified command_id. This function |
-// traverses the given |model| in the depth-first order. When this function |
-// finds an item whose command_id is the same as the given |command_id|, it |
-// returns the GtkWidget associated with the item. This function emulates |
-// views::MenuItemViews::GetMenuItemByID() for GTK. |
-GtkWidget* GetMenuItemByID(ui::MenuModel* model, |
- GtkWidget* menu, |
- int command_id) { |
- if (!menu) |
- return NULL; |
- |
- for (int i = 0; i < model->GetItemCount(); ++i) { |
- if (model->GetCommandIdAt(i) == command_id) { |
- GtkWidgetAtParam param; |
- param.index = i; |
- param.widget = NULL; |
- gtk_container_foreach(GTK_CONTAINER(menu), &GtkWidgetAt, ¶m); |
- return param.widget; |
- } |
- |
- ui::MenuModel* submenu = model->GetSubmenuModelAt(i); |
- if (submenu) { |
- GtkWidget* subitem = GetMenuItemByID( |
- submenu, |
- gtk_menu_item_get_submenu(GTK_MENU_ITEM(menu)), |
- command_id); |
- if (subitem) |
- return subitem; |
- } |
- } |
- return NULL; |
-} |
- |
-} // namespace |
- |
-RenderViewContextMenuGtk::RenderViewContextMenuGtk( |
- content::RenderFrameHost* render_frame_host, |
- const content::ContextMenuParams& params, |
- content::RenderWidgetHostView* view) |
- : RenderViewContextMenu(render_frame_host, params), |
- bidi_submenu_model_(this) { |
- GdkEventButton* event = view->GetLastMouseDown(); |
- triggering_event_time_ = event ? event->time : GDK_CURRENT_TIME; |
-} |
- |
-RenderViewContextMenuGtk::~RenderViewContextMenuGtk() { |
-} |
- |
-void RenderViewContextMenuGtk::PlatformInit() { |
- menu_gtk_.reset(new MenuGtk(this, &menu_model_)); |
- |
- if (params_.is_editable) { |
- content::RenderWidgetHostView* rwhv = |
- source_web_contents_->GetRenderWidgetHostView(); |
- if (rwhv) { |
- MenuGtk* menu = menu_gtk_.get(); |
- gboolean show_input_method_menu = TRUE; |
- |
- g_object_get( |
- gtk_widget_get_settings(GTK_WIDGET(rwhv->GetNativeView())), |
- "gtk-show-input-method-menu", &show_input_method_menu, NULL); |
- if (!show_input_method_menu) |
- return; |
- |
- std::string label = ui::ConvertAcceleratorsFromWindowsStyle( |
- l10n_util::GetStringUTF8(IDS_CONTENT_CONTEXT_INPUT_METHODS_MENU)); |
- GtkWidget* menuitem = gtk_menu_item_new_with_mnemonic(label.c_str()); |
- GtkWidget* submenu = rwhv->BuildInputMethodsGtkMenu(); |
- gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); |
- int inspect_element_index = |
- menu_model_.GetIndexOfCommandId(IDC_CONTENT_CONTEXT_INSPECTELEMENT); |
- if (inspect_element_index != -1) { |
- menu->InsertSeparator(inspect_element_index - 1); |
- menu->InsertMenuItem(IDC_INPUT_METHODS_MENU, menuitem, |
- inspect_element_index); |
- } else { |
- menu->AppendSeparator(); |
- menu->AppendMenuItem(IDC_INPUT_METHODS_MENU, menuitem); |
- } |
- } |
- } |
-} |
- |
-void RenderViewContextMenuGtk::PlatformCancel() { |
- menu_gtk_->Cancel(); |
-} |
- |
-bool RenderViewContextMenuGtk::GetAcceleratorForCommandId( |
- int command_id, |
- ui::Accelerator* accelerator) { |
- return false; |
-} |
- |
-void RenderViewContextMenuGtk::Popup(const gfx::Point& point) { |
- menu_gtk_->PopupAsContext(point, triggering_event_time_); |
-} |
- |
-bool RenderViewContextMenuGtk::AlwaysShowIconForCmd(int command_id) const { |
- return command_id >= IDC_EXTENSIONS_CONTEXT_CUSTOM_FIRST && |
- command_id <= IDC_EXTENSIONS_CONTEXT_CUSTOM_LAST; |
-} |
- |
-void RenderViewContextMenuGtk::ExecuteCommand(int command_id, int event_flags) { |
- switch (command_id) { |
- case IDC_WRITING_DIRECTION_DEFAULT: |
- // WebKit's current behavior is for this menu item to always be disabled. |
- NOTREACHED(); |
- break; |
- |
- case IDC_WRITING_DIRECTION_RTL: |
- case IDC_WRITING_DIRECTION_LTR: { |
- content::RenderViewHost* view_host = GetRenderViewHost(); |
- blink::WebTextDirection dir = blink::WebTextDirectionLeftToRight; |
- if (command_id == IDC_WRITING_DIRECTION_RTL) |
- dir = blink::WebTextDirectionRightToLeft; |
- view_host->UpdateTextDirection(dir); |
- view_host->NotifyTextDirection(); |
- break; |
- } |
- |
- default: |
- RenderViewContextMenu::ExecuteCommand(command_id, event_flags); |
- break; |
- } |
-} |
- |
-bool RenderViewContextMenuGtk::IsCommandIdChecked(int command_id) const { |
- switch (command_id) { |
- case IDC_WRITING_DIRECTION_DEFAULT: |
- return params_.writing_direction_default & |
- blink::WebContextMenuData::CheckableMenuItemChecked; |
- case IDC_WRITING_DIRECTION_RTL: |
- return params_.writing_direction_right_to_left & |
- blink::WebContextMenuData::CheckableMenuItemChecked; |
- case IDC_WRITING_DIRECTION_LTR: |
- return params_.writing_direction_left_to_right & |
- blink::WebContextMenuData::CheckableMenuItemChecked; |
- |
- default: |
- return RenderViewContextMenu::IsCommandIdChecked(command_id); |
- } |
-} |
- |
-bool RenderViewContextMenuGtk::IsCommandIdEnabled(int command_id) const { |
- switch (command_id) { |
- case IDC_WRITING_DIRECTION_MENU: |
- return true; |
- case IDC_WRITING_DIRECTION_DEFAULT: // Provided to match OS defaults. |
- return params_.writing_direction_default & |
- blink::WebContextMenuData::CheckableMenuItemEnabled; |
- case IDC_WRITING_DIRECTION_RTL: |
- return params_.writing_direction_right_to_left & |
- blink::WebContextMenuData::CheckableMenuItemEnabled; |
- case IDC_WRITING_DIRECTION_LTR: |
- return params_.writing_direction_left_to_right & |
- blink::WebContextMenuData::CheckableMenuItemEnabled; |
- |
- default: |
- return RenderViewContextMenu::IsCommandIdEnabled(command_id); |
- } |
-} |
- |
-void RenderViewContextMenuGtk::AppendPlatformEditableItems() { |
- // OS X and Linux provide a contextual menu to set writing direction for BiDi |
- // languages. |
- // This functionality is exposed as a keyboard shortcut on Windows. |
- AppendBidiSubMenu(); |
-} |
- |
-void RenderViewContextMenuGtk::AppendBidiSubMenu() { |
- bidi_submenu_model_.AddCheckItem(IDC_WRITING_DIRECTION_DEFAULT, |
- l10n_util::GetStringUTF16(IDS_CONTENT_CONTEXT_WRITING_DIRECTION_DEFAULT)); |
- bidi_submenu_model_.AddCheckItem(IDC_WRITING_DIRECTION_LTR, |
- l10n_util::GetStringUTF16(IDS_CONTENT_CONTEXT_WRITING_DIRECTION_LTR)); |
- bidi_submenu_model_.AddCheckItem(IDC_WRITING_DIRECTION_RTL, |
- l10n_util::GetStringUTF16(IDS_CONTENT_CONTEXT_WRITING_DIRECTION_RTL)); |
- |
- menu_model_.AddSubMenu( |
- IDC_WRITING_DIRECTION_MENU, |
- l10n_util::GetStringUTF16(IDS_CONTENT_CONTEXT_WRITING_DIRECTION_MENU), |
- &bidi_submenu_model_); |
-} |
- |
-void RenderViewContextMenuGtk::UpdateMenuItem(int command_id, |
- bool enabled, |
- bool hidden, |
- const base::string16& title) { |
- GtkWidget* item = GetMenuItemByID(&menu_model_, menu_gtk_->widget(), |
- command_id); |
- if (!item || !GTK_IS_MENU_ITEM(item)) |
- return; |
- |
- // Enable (or disable) the menu item and updates its text. |
- gtk_widget_set_sensitive(item, enabled); |
- if (hidden) |
- gtk_widget_hide(item); |
- else |
- gtk_widget_show(item); |
- gtk_menu_item_set_label(GTK_MENU_ITEM(item), |
- base::UTF16ToUTF8(title).c_str()); |
-} |