Index: chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac.mm |
diff --git a/chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac.mm b/chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac.mm |
index 549d41b6ec2f32c6222b816402010e7e14a8a3e4..63a787abd1d7121c01fe6ca44cf165138fe87194 100644 |
--- a/chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac.mm |
+++ b/chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac.mm |
@@ -183,9 +183,8 @@ RenderViewContextMenuMac::RenderViewContextMenuMac( |
const content::ContextMenuParams& params, |
NSView* parent_view) |
: RenderViewContextMenu(render_frame_host, params), |
- speech_submenu_model_(this), |
- bidi_submenu_model_(this), |
- parent_view_(parent_view) { |
+ parent_view_(parent_view), |
+ text_services_context_menu_(this) { |
std::unique_ptr<ToolkitDelegate> delegate(new ToolkitDelegateMac(this)); |
set_toolkit_delegate(std::move(delegate)); |
} |
@@ -246,96 +245,36 @@ void RenderViewContextMenuMac::Show() { |
void RenderViewContextMenuMac::ExecuteCommand(int command_id, int event_flags) { |
switch (command_id) { |
tapted
2016/12/13 05:11:22
no need to switch here
spqchan
2016/12/15 23:29:00
Done.
|
- case IDC_CONTENT_CONTEXT_LOOK_UP: |
- 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->GetWidget()->UpdateTextDirection(dir); |
- view_host->GetWidget()->NotifyTextDirection(); |
- RenderViewContextMenu::RecordUsedItem(command_id); |
- break; |
- } |
- |
default: |
+ if (text_services_context_menu_.IsTextServicesCommandId(command_id)) { |
+ return text_services_context_menu_.ExecuteCommand(command_id, |
+ event_flags); |
+ } |
+ |
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; |
+ if (text_services_context_menu_.IsTextServicesCommandId(command_id)) |
+ return text_services_context_menu_.IsCommandIdChecked(command_id); |
- default: |
- return RenderViewContextMenu::IsCommandIdChecked(command_id); |
- } |
+ return RenderViewContextMenu::IsCommandIdChecked(command_id); |
} |
bool RenderViewContextMenuMac::IsCommandIdEnabled(int command_id) const { |
- switch (command_id) { |
- case IDC_CONTENT_CONTEXT_LOOK_UP: |
- // 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()->GetWidget()->GetView(); |
- return view && view->IsSpeaking(); |
- } |
+ if (text_services_context_menu_.IsTextServicesCommandId(command_id)) |
tapted
2016/12/13 05:11:22
Is it only IDS_CONTENT_CONTEXT_LOOK_UP that comes
spqchan
2016/12/15 23:29:00
Yes, only lookup goes through here. I'm a bit conf
|
+ return text_services_context_menu_.IsCommandIdEnabled(command_id); |
- 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); |
- } |
+ return RenderViewContextMenu::IsCommandIdEnabled(command_id); |
} |
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(); |
+ text_services_context_menu_.AppendPlatformEditableItems(&menu_model_); |
} |
void RenderViewContextMenuMac::InitToolkitMenu() { |
@@ -357,31 +296,10 @@ void RenderViewContextMenuMac::InitToolkitMenu() { |
index += 1; // Place it below the separator. |
tapted
2016/12/13 05:11:22
I think the "it" here is IDS_CONTENT_CONTEXT_LOOK_
spqchan
2016/12/15 23:29:00
I'm a bit confused. I'm pretty sure that this sect
tapted
2016/12/16 07:01:19
The problem is that all the code between `if (para
|
} |
- base::string16 printable_selection_text = PrintableSelectionText(); |
- EscapeAmpersands(&printable_selection_text); |
- menu_model_.InsertItemAt( |
- index++, |
- IDC_CONTENT_CONTEXT_LOOK_UP, |
- l10n_util::GetStringFUTF16(IDS_CONTENT_CONTEXT_LOOK_UP, |
- printable_selection_text)); |
menu_model_.InsertSeparatorAt(index++, ui::NORMAL_SEPARATOR); |
} |
- content::RenderWidgetHostView* view = |
- GetRenderViewHost()->GetWidget()->GetView(); |
- if (view && view->SupportsSpeech()) { |
- menu_model_.AddSeparator(ui::NORMAL_SEPARATOR); |
- 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_); |
- } |
+ text_services_context_menu_.AppendToContextMenu(&menu_model_); |
} |
void RenderViewContextMenuMac::CancelToolkitMenu() { |
@@ -405,37 +323,73 @@ void RenderViewContextMenuMac::UpdateToolkitMenuItem( |
[[item menu] itemChanged:item]; |
} |
-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_); |
+base::string16 RenderViewContextMenuMac::GetSelectedText() const { |
+ return params_.selection_text; |
} |
-void RenderViewContextMenuMac::LookUpInDictionary() { |
+void RenderViewContextMenuMac::OnSpeakRequested() { |
content::RenderWidgetHostView* view = |
GetRenderViewHost()->GetWidget()->GetView(); |
if (view) |
- view->ShowDefinitionForSelection(); |
+ view->SpeakSelection(); |
} |
-void RenderViewContextMenuMac::StartSpeaking() { |
- content::RenderWidgetHostView* view = |
- GetRenderViewHost()->GetWidget()->GetView(); |
- if (view) |
- view->SpeakSelection(); |
+bool RenderViewContextMenuMac::IsLookUpAvailable() const { |
+ return params_.link_url.is_empty(); |
} |
-void RenderViewContextMenuMac::StopSpeaking() { |
+void RenderViewContextMenuMac::LookUpInDictionary() { |
content::RenderWidgetHostView* view = |
GetRenderViewHost()->GetWidget()->GetView(); |
if (view) |
- view->StopSpeaking(); |
+ view->ShowDefinitionForSelection(); |
+} |
+ |
+bool RenderViewContextMenuMac::IsWritingDirectionEnabled( |
+ ui::WritingDirection direction) const { |
+ switch (direction) { |
+ case ui::WritingDirection::DEFAULT: |
+ return params_.writing_direction_default & |
+ blink::WebContextMenuData::CheckableMenuItemEnabled; |
+ case ui::WritingDirection::RTL: |
+ return params_.writing_direction_right_to_left & |
+ blink::WebContextMenuData::CheckableMenuItemEnabled; |
+ case ui::WritingDirection::LTR: |
+ return params_.writing_direction_left_to_right & |
+ blink::WebContextMenuData::CheckableMenuItemEnabled; |
+ } |
+} |
+ |
+bool RenderViewContextMenuMac::IsWritingDirectionChecked( |
+ ui::WritingDirection direction) const { |
+ switch (direction) { |
+ case ui::WritingDirection::DEFAULT: |
+ return params_.writing_direction_default & |
+ blink::WebContextMenuData::CheckableMenuItemChecked; |
+ case ui::WritingDirection::RTL: |
+ return params_.writing_direction_right_to_left & |
+ blink::WebContextMenuData::CheckableMenuItemChecked; |
+ case ui::WritingDirection::LTR: |
+ return params_.writing_direction_left_to_right & |
+ blink::WebContextMenuData::CheckableMenuItemChecked; |
+ } |
+} |
+ |
+void RenderViewContextMenuMac::UpdateTextDirection( |
+ ui::WritingDirection direction) { |
+ if (direction == ui::WritingDirection::DEFAULT) |
tapted
2016/12/13 05:11:22
nit: DCHECK_NE(ui::WritingDirection::DEFAULT, dire
spqchan
2016/12/15 23:29:00
Done.
|
+ NOTREACHED(); |
+ |
+ content::RenderViewHost* view_host = GetRenderViewHost(); |
+ blink::WebTextDirection dir = blink::WebTextDirectionLeftToRight; |
+ int command_id = IDC_WRITING_DIRECTION_LTR; |
+ if (direction == ui::WritingDirection::RTL) { |
+ dir = blink::WebTextDirectionRightToLeft; |
+ command_id = IDC_WRITING_DIRECTION_RTL; |
+ } |
+ |
+ view_host->GetWidget()->UpdateTextDirection(dir); |
+ view_host->GetWidget()->NotifyTextDirection(); |
+ |
+ RenderViewContextMenu::RecordUsedItem(command_id); |
} |