diff options
Diffstat (limited to 'chrome/browser/renderer_host/render_widget_host_view_mac.mm')
-rw-r--r-- | chrome/browser/renderer_host/render_widget_host_view_mac.mm | 66 |
1 files changed, 45 insertions, 21 deletions
diff --git a/chrome/browser/renderer_host/render_widget_host_view_mac.mm b/chrome/browser/renderer_host/render_widget_host_view_mac.mm index e2eb64f..2b2d785 100644 --- a/chrome/browser/renderer_host/render_widget_host_view_mac.mm +++ b/chrome/browser/renderer_host/render_widget_host_view_mac.mm @@ -32,6 +32,7 @@ #include "content/browser/renderer_host/backing_store_mac.h" #include "content/browser/renderer_host/render_process_host.h" #include "content/browser/renderer_host/render_view_host.h" +#include "content/browser/renderer_host/render_view_host_observer.h" #include "content/browser/renderer_host/render_widget_host.h" #include "content/common/edit_command.h" #include "content/common/gpu/gpu_messages.h" @@ -178,6 +179,35 @@ NSWindow* ApparentWindowForView(NSView* view) { return enclosing_window; } +// Filters the message sent to RenderViewHost to know if spellchecking is +// enabled or not for the currently focused element. +class SpellCheckRenderViewObserver : public RenderViewHostObserver { + public: + SpellCheckRenderViewObserver(RenderViewHost* host, + RenderWidgetHostViewMac* view) + : RenderViewHostObserver(host), + view_(view) { + } + + private: + // RenderViewHostObserver implementation. + virtual bool OnMessageReceived(const IPC::Message& message) { + bool handled = true; + IPC_BEGIN_MESSAGE_MAP(SpellCheckRenderViewObserver, message) + IPC_MESSAGE_HANDLER(SpellCheckHostMsg_ToggleSpellCheck, + OnToggleSpellCheck) + IPC_MESSAGE_UNHANDLED(handled = false) + IPC_END_MESSAGE_MAP() + return handled; + } + + void OnToggleSpellCheck(bool enabled, bool checked) { + view_->ToggleSpellCheck(enabled, checked); + } + + RenderWidgetHostViewMac* view_; +}; + } // namespace // AcceleratedPluginView ------------------------------------------------------ @@ -598,6 +628,8 @@ RenderWidgetHostViewMac::RenderWidgetHostViewMac(RenderWidgetHost* widget) about_to_validate_and_paint_(false), call_set_needs_display_in_rect_pending_(false), text_input_type_(WebKit::WebTextInputTypeNone), + spellcheck_enabled_(false), + spellcheck_checked_(false), is_loading_(false), is_hidden_(false), shutdown_factory_(this), @@ -615,6 +647,11 @@ RenderWidgetHostViewMac::RenderWidgetHostViewMac(RenderWidgetHost* widget) BrowserAccessibilityState::GetInstance()->OnScreenReaderDetected(); render_widget_host_->EnableRendererAccessibility(); } + + if (render_widget_host_->IsRenderView()) { + new SpellCheckRenderViewObserver( + static_cast<RenderViewHost*>(widget), this); + } } RenderWidgetHostViewMac::~RenderWidgetHostViewMac() { @@ -1254,6 +1291,11 @@ void RenderWidgetHostViewMac::AcknowledgeSwapBuffers( } } +void RenderWidgetHostViewMac::ToggleSpellCheck(bool enabled, bool checked) { + spellcheck_enabled_ = enabled; + spellcheck_checked_ = checked; +} + void RenderWidgetHostViewMac::GpuRenderingStateDidChange() { CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); if (GetRenderWidgetHost()->is_accelerated_compositing_active()) { @@ -2049,31 +2091,13 @@ void RenderWidgetHostViewMac::SetTextInputActive(bool active) { } if (action == @selector(toggleContinuousSpellChecking:)) { - RenderViewHost::CommandState state; - state.is_enabled = false; - state.checked_state = RENDER_VIEW_COMMAND_CHECKED_STATE_UNCHECKED; - if (renderWidgetHostView_->render_widget_host_->IsRenderView()) { - state = static_cast<RenderViewHost*>( - renderWidgetHostView_->render_widget_host_)-> - GetStateForCommand(RENDER_VIEW_COMMAND_TOGGLE_SPELL_CHECK); - } if ([(id)item respondsToSelector:@selector(setState:)]) { NSCellStateValue checked_state = - RENDER_VIEW_COMMAND_CHECKED_STATE_UNCHECKED; - switch (state.checked_state) { - case RENDER_VIEW_COMMAND_CHECKED_STATE_UNCHECKED: - checked_state = NSOffState; - break; - case RENDER_VIEW_COMMAND_CHECKED_STATE_CHECKED: - checked_state = NSOnState; - break; - case RENDER_VIEW_COMMAND_CHECKED_STATE_MIXED: - checked_state = NSMixedState; - break; - } + renderWidgetHostView_->spellcheck_checked_ ? + NSOnState : NSOffState; [(id)item setState:checked_state]; } - return state.is_enabled; + return renderWidgetHostView_->spellcheck_enabled_; } return editCommand_helper_->IsMenuItemEnabled(action, self); |