Index: content/browser/renderer_host/render_widget_host_view_aura.cc |
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc |
index 54d70c0c4b859ed2278a0f9a32b22437f2615a07..cf9232fd4d79aa3baaa48033ab8387f3c3695d9e 100644 |
--- a/content/browser/renderer_host/render_widget_host_view_aura.cc |
+++ b/content/browser/renderer_host/render_widget_host_view_aura.cc |
@@ -62,6 +62,7 @@ |
#include "ui/base/clipboard/scoped_clipboard_writer.h" |
#include "ui/base/hit_test.h" |
#include "ui/base/ime/input_method.h" |
+#include "ui/base/ime/input_method_observer.h" |
#include "ui/base/ui_base_types.h" |
#include "ui/compositor/compositor_vsync_manager.h" |
#include "ui/compositor/dip_util.h" |
@@ -324,6 +325,36 @@ bool PointerEventActivates(const ui::Event& event) { |
return false; |
} |
+class KeyboardBoundsUnchangedListener : public ui::InputMethodObserver { |
+ public: |
+ KeyboardBoundsUnchangedListener(ui::InputMethod* input_method, |
+ RenderWidgetHostImpl* host) |
+ : host_(host) { |
+ input_method->AddObserver(this); |
+ } |
+ |
+ private: |
+ ~KeyboardBoundsUnchangedListener() override {} |
+ |
+ // Overridden from ui::InputMethodObserver: |
+ void OnTextInputTypeChanged(const ui::TextInputClient* client) override {} |
+ void OnFocus() override {} |
+ void OnBlur() override {} |
+ void OnCaretBoundsChanged(const ui::TextInputClient* client) override {} |
+ void OnTextInputStateChanged(const ui::TextInputClient* client) override {} |
+ void OnInputMethodDestroyed(const ui::InputMethod* input_method) override { |
+ delete this; |
+ } |
+ void OnShowImeIfNeeded() override {} |
+ void OnKeyboardBoundsUnchanged() override { |
+ host_->Send(new ViewMsg_FocusChangeComplete(host_->GetRoutingID())); |
+ } |
+ |
+ RenderWidgetHostImpl* const host_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(KeyboardBoundsUnchangedListener); |
+}; |
+ |
} // namespace |
// We need to watch for mouse events outside a Web Popup or its parent |
@@ -453,6 +484,9 @@ RenderWidgetHostViewAura::RenderWidgetHostViewAura(RenderWidgetHost* host, |
bool overscroll_enabled = base::CommandLine::ForCurrentProcess()-> |
GetSwitchValueASCII(switches::kOverscrollHistoryNavigation) != "0"; |
SetOverscrollControllerEnabled(overscroll_enabled); |
+ |
+ if (GetInputMethod()) |
+ new KeyboardBoundsUnchangedListener(GetInputMethod(), host_); |
} |
//////////////////////////////////////////////////////////////////////////////// |
@@ -866,6 +900,9 @@ void RenderWidgetHostViewAura::OnTextInputStateChanged( |
if (GetInputMethod()) |
GetInputMethod()->ShowImeIfNeeded(); |
} |
+ |
+ if (!GetInputMethod() || !GetInputMethod()->SupportsOnScreenKeyboard()) |
+ host_->Send(new ViewMsg_FocusChangeComplete(host_->GetRoutingID())); |
} |
void RenderWidgetHostViewAura::ImeCancelComposition() { |