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

Unified Diff: chrome/browser/ui/cocoa/tab_contents/render_view_context_menu_mac.mm

Issue 178193005: Move render_view_context_menu.* related files out of tab_contents. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: context_menu->renderer_context_menu for disambiguation Created 6 years, 10 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/cocoa/tab_contents/render_view_context_menu_mac.mm
diff --git a/chrome/browser/ui/cocoa/tab_contents/render_view_context_menu_mac.mm b/chrome/browser/ui/cocoa/tab_contents/render_view_context_menu_mac.mm
deleted file mode 100644
index 48ad6ca039b01ac8be9dcd75b8fb3db172c0e7ac..0000000000000000000000000000000000000000
--- a/chrome/browser/ui/cocoa/tab_contents/render_view_context_menu_mac.mm
+++ /dev/null
@@ -1,279 +0,0 @@
-// Copyright (c) 2012 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/cocoa/tab_contents/render_view_context_menu_mac.h"
-
-#include "base/compiler_specific.h"
-#import "base/mac/scoped_sending_event.h"
-#include "base/message_loop/message_loop.h"
-#include "base/strings/sys_string_conversions.h"
-#include "chrome/app/chrome_command_ids.h"
-#include "content/public/browser/render_view_host.h"
-#include "content/public/browser/render_widget_host_view.h"
-#include "grit/generated_resources.h"
-#import "ui/base/cocoa/menu_controller.h"
-#include "ui/base/l10n/l10n_util.h"
-
-using content::WebContents;
-
-namespace {
-
-// Retrieves an NSMenuItem 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 NSMenuItem associated with the item. This function emulates
-// views::MenuItemViews::GetMenuItemByID() for Mac.
-NSMenuItem* GetMenuItemByID(ui::MenuModel* model,
- NSMenu* menu,
- int command_id) {
- for (int i = 0; i < model->GetItemCount(); ++i) {
- NSMenuItem* item = [menu itemAtIndex:i];
- if (model->GetCommandIdAt(i) == command_id)
- return item;
-
- ui::MenuModel* submenu = model->GetSubmenuModelAt(i);
- if (submenu && [item hasSubmenu]) {
- NSMenuItem* subitem = GetMenuItemByID(submenu,
- [item submenu],
- command_id);
- if (subitem)
- return subitem;
- }
- }
- return nil;
-}
-
-} // namespace
-
-// Obj-C bridge class that is the target of all items in the context menu.
-// Relies on the tag being set to the command id.
-
-RenderViewContextMenuMac::RenderViewContextMenuMac(
- content::RenderFrameHost* render_frame_host,
- const content::ContextMenuParams& params,
- NSView* parent_view)
- : RenderViewContextMenu(render_frame_host, params),
- speech_submenu_model_(this),
- bidi_submenu_model_(this),
- parent_view_(parent_view) {
-}
-
-RenderViewContextMenuMac::~RenderViewContextMenuMac() {
-}
-
-void RenderViewContextMenuMac::PlatformInit() {
- InitPlatformMenu();
- menu_controller_.reset(
- [[MenuController alloc] initWithModel:&menu_model_
- useWithPopUpButtonCell:NO]);
-
- // Synthesize an event for the click, as there is no certainty that
- // [NSApp currentEvent] will return a valid event.
- NSEvent* currentEvent = [NSApp currentEvent];
- NSWindow* window = [parent_view_ window];
- NSPoint position = [window mouseLocationOutsideOfEventStream];
- NSTimeInterval eventTime = [currentEvent timestamp];
- NSEvent* clickEvent = [NSEvent mouseEventWithType:NSRightMouseDown
- location:position
- modifierFlags:NSRightMouseDownMask
- timestamp:eventTime
- windowNumber:[window windowNumber]
- context:nil
- eventNumber:0
- clickCount:1
- pressure:1.0];
-
- {
- // Make sure events can be pumped while the menu is up.
- base::MessageLoop::ScopedNestableTaskAllower allow(
- base::MessageLoop::current());
-
- // One of the events that could be pumped is |window.close()|.
- // User-initiated event-tracking loops protect against this by
- // setting flags in -[CrApplication sendEvent:], but since
- // web-content menus are initiated by IPC message the setup has to
- // be done manually.
- base::mac::ScopedSendingEvent sendingEventScoper;
-
- // Show the menu.
- [NSMenu popUpContextMenu:[menu_controller_ menu]
- withEvent:clickEvent
- forView:parent_view_];
- }
-}
-
-void RenderViewContextMenuMac::PlatformCancel() {
- [menu_controller_ cancel];
-}
-
-void RenderViewContextMenuMac::ExecuteCommand(int command_id, int event_flags) {
- switch (command_id) {
- case IDC_CONTENT_CONTEXT_LOOK_UP_IN_DICTIONARY:
- LookUpInDictionary();
- break;
-
- case IDC_CONTENT_CONTEXT_SPEECH_START_SPEAKING:
- StartSpeaking();
- break;
-
- case IDC_CONTENT_CONTEXT_SPEECH_STOP_SPEAKING:
- StopSpeaking();
- break;
-
- 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 RenderViewContextMenuMac::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 RenderViewContextMenuMac::IsCommandIdEnabled(int command_id) const {
- switch (command_id) {
- case IDC_CONTENT_CONTEXT_LOOK_UP_IN_DICTIONARY:
- // This is OK because the menu is not shown when it isn't
- // appropriate.
- return true;
-
- case IDC_CONTENT_CONTEXT_SPEECH_START_SPEAKING:
- // This is OK because the menu is not shown when it isn't
- // appropriate.
- return true;
-
- case IDC_CONTENT_CONTEXT_SPEECH_STOP_SPEAKING: {
- content::RenderWidgetHostView* view = GetRenderViewHost()->GetView();
- return view && view->IsSpeaking();
- }
-
- 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);
- }
-}
-
-bool RenderViewContextMenuMac::GetAcceleratorForCommandId(
- int command_id,
- ui::Accelerator* accelerator) {
- return false;
-}
-
-void RenderViewContextMenuMac::AppendPlatformEditableItems() {
- // OS X provides a contextual menu to set writing direction for BiDi
- // languages.
- // This functionality is exposed as a keyboard shortcut on Windows & Linux.
- AppendBidiSubMenu();
-}
-
-void RenderViewContextMenuMac::InitPlatformMenu() {
- bool has_selection = !params_.selection_text.empty();
-
- if (has_selection) {
- menu_model_.AddSeparator(ui::NORMAL_SEPARATOR);
- menu_model_.AddItemWithStringId(
- IDC_CONTENT_CONTEXT_LOOK_UP_IN_DICTIONARY,
- IDS_CONTENT_CONTEXT_LOOK_UP_IN_DICTIONARY);
-
- content::RenderWidgetHostView* view = GetRenderViewHost()->GetView();
- if (view && view->SupportsSpeech()) {
- speech_submenu_model_.AddItemWithStringId(
- IDC_CONTENT_CONTEXT_SPEECH_START_SPEAKING,
- IDS_SPEECH_START_SPEAKING_MAC);
- speech_submenu_model_.AddItemWithStringId(
- IDC_CONTENT_CONTEXT_SPEECH_STOP_SPEAKING,
- IDS_SPEECH_STOP_SPEAKING_MAC);
- menu_model_.AddSubMenu(
- IDC_CONTENT_CONTEXT_SPEECH_MENU,
- l10n_util::GetStringUTF16(IDS_SPEECH_MAC),
- &speech_submenu_model_);
- }
- }
-}
-
-void RenderViewContextMenuMac::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 RenderViewContextMenuMac::LookUpInDictionary() {
- content::RenderWidgetHostView* view = GetRenderViewHost()->GetView();
- if (view)
- view->ShowDefinitionForSelection();
-}
-
-void RenderViewContextMenuMac::StartSpeaking() {
- content::RenderWidgetHostView* view = GetRenderViewHost()->GetView();
- if (view)
- view->SpeakSelection();
-}
-
-void RenderViewContextMenuMac::StopSpeaking() {
- content::RenderWidgetHostView* view = GetRenderViewHost()->GetView();
- if (view)
- view->StopSpeaking();
-}
-
-void RenderViewContextMenuMac::UpdateMenuItem(int command_id,
- bool enabled,
- bool hidden,
- const base::string16& title) {
- NSMenuItem* item = GetMenuItemByID(&menu_model_, [menu_controller_ menu],
- command_id);
- if (!item)
- return;
-
- // Update the returned NSMenuItem directly so we can update it immediately.
- [item setEnabled:enabled];
- [item setTitle:SysUTF16ToNSString(title)];
- [item setHidden:hidden];
- [[item menu] itemChanged:item];
-}

Powered by Google App Engine
This is Rietveld 408576698