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 3a8b8f6ce842ae1dafeb837005ac5acb1d0d3675..c564b0ae939affaa669e45795cf80383f9f46cfd 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 |
@@ -46,6 +46,35 @@ NSMenuItem* GetMenuItemByID(ui::MenuModel* model, |
} // namespace |
+// OSX implemenation of the ToolkitDelegate. |
+// This simply (re)delegates calls to RVContextMenuMac because they do not |
+// have to be componentized. |
+class ToolkitDelegateMac : public RenderViewContextMenu::ToolkitDelegate { |
+ public: |
+ explicit ToolkitDelegateMac(RenderViewContextMenuMac* context_menu) |
+ : context_menu_(context_menu) {} |
+ virtual ~ToolkitDelegateMac() {} |
+ |
+ private: |
+ // ToolkitDelegate: |
+ virtual void Init(ui::SimpleMenuModel* menu_model) OVERRIDE { |
+ context_menu_->InitToolkitMenu(); |
+ } |
+ virtual void Cancel() OVERRIDE{ |
+ context_menu_->CancelToolkitMenu(); |
+ } |
+ virtual void UpdateMenuItem(int command_id, |
+ bool enabled, |
+ bool hidden, |
+ const base::string16& title) OVERRIDE { |
+ context_menu_->UpdateToolkitMenuItem( |
+ command_id, enabled, hidden, title); |
+ } |
+ |
+ RenderViewContextMenuMac* context_menu_; |
+ DISALLOW_COPY_AND_ASSIGN(ToolkitDelegateMac); |
+}; |
+ |
// 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. |
@@ -57,15 +86,13 @@ RenderViewContextMenuMac::RenderViewContextMenuMac( |
speech_submenu_model_(this), |
bidi_submenu_model_(this), |
parent_view_(parent_view) { |
+ scoped_ptr<ToolkitDelegate> delegate(new ToolkitDelegateMac(this)); |
+ set_toolkit_delegate(delegate.Pass()); |
} |
RenderViewContextMenuMac::~RenderViewContextMenuMac() { |
} |
-void RenderViewContextMenuMac::PlatformInit() { |
- InitPlatformMenu(); |
-} |
- |
void RenderViewContextMenuMac::Show() { |
menu_controller_.reset( |
[[MenuController alloc] initWithModel:&menu_model_ |
@@ -108,10 +135,6 @@ void RenderViewContextMenuMac::Show() { |
} |
} |
-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: |
@@ -210,7 +233,7 @@ void RenderViewContextMenuMac::AppendPlatformEditableItems() { |
AppendBidiSubMenu(); |
} |
-void RenderViewContextMenuMac::InitPlatformMenu() { |
+void RenderViewContextMenuMac::InitToolkitMenu() { |
bool has_selection = !params_.selection_text.empty(); |
if (has_selection) { |
@@ -235,6 +258,27 @@ void RenderViewContextMenuMac::InitPlatformMenu() { |
} |
} |
+void RenderViewContextMenuMac::CancelToolkitMenu() { |
+ [menu_controller_ cancel]; |
+} |
+ |
+void RenderViewContextMenuMac::UpdateToolkitMenuItem( |
+ 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:base::SysUTF16ToNSString(title)]; |
+ [item setHidden:hidden]; |
+ [[item menu] itemChanged:item]; |
+} |
+ |
void RenderViewContextMenuMac::AppendBidiSubMenu() { |
bidi_submenu_model_.AddCheckItem(IDC_WRITING_DIRECTION_DEFAULT, |
l10n_util::GetStringUTF16(IDS_CONTENT_CONTEXT_WRITING_DIRECTION_DEFAULT)); |
@@ -266,19 +310,3 @@ void RenderViewContextMenuMac::StopSpeaking() { |
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]; |
-} |