| Index: ui/views/widget/native_widget_aura.cc
|
| diff --git a/ui/views/widget/native_widget_aura.cc b/ui/views/widget/native_widget_aura.cc
|
| index 620a08c0154d9c78cb7d0fb5bc5a37c5984830c2..4bd87bb0158ef7ee20fab8cf9c3e539e04c64df3 100644
|
| --- a/ui/views/widget/native_widget_aura.cc
|
| +++ b/ui/views/widget/native_widget_aura.cc
|
| @@ -20,6 +20,7 @@
|
| #include "ui/gfx/compositor/layer.h"
|
| #include "ui/gfx/font.h"
|
| #include "ui/gfx/screen.h"
|
| +#include "ui/views/ime/input_method_bridge.h"
|
| #include "ui/views/widget/drop_helper.h"
|
| #include "ui/views/widget/native_widget_delegate.h"
|
| #include "ui/views/widget/tooltip_manager_aura.h"
|
| @@ -31,12 +32,6 @@
|
| #include "ui/base/l10n/l10n_util_win.h"
|
| #endif
|
|
|
| -#if defined(HAVE_IBUS)
|
| -#include "ui/views/ime/input_method_ibus.h"
|
| -#else
|
| -#include "ui/views/ime/mock_input_method.h"
|
| -#endif
|
| -
|
| namespace views {
|
|
|
| namespace {
|
| @@ -311,11 +306,10 @@ bool NativeWidgetAura::HasMouseCapture() const {
|
| }
|
|
|
| InputMethod* NativeWidgetAura::CreateInputMethod() {
|
| -#if defined(HAVE_IBUS)
|
| - InputMethod* input_method = new InputMethodIBus(this);
|
| -#else
|
| - InputMethod* input_method = new MockInputMethod(this);
|
| -#endif
|
| + aura::RootWindow* root_window = aura::RootWindow::GetInstance();
|
| + ui::InputMethod* host = reinterpret_cast<ui::InputMethod*>(
|
| + root_window->GetProperty(aura::client::kRootWindowInputMethod));
|
| + InputMethod* input_method = new InputMethodBridge(this, host);
|
| input_method->Init(GetWidget());
|
| return input_method;
|
| }
|
| @@ -637,15 +631,17 @@ void NativeWidgetAura::OnBlur() {
|
| }
|
|
|
| bool NativeWidgetAura::OnKeyEvent(aura::KeyEvent* event) {
|
| - // TODO(beng): Need an InputMethodAura to properly handle character events.
|
| - // Right now, we just skip these.
|
| - if (event->is_char())
|
| + if (event->is_char()) {
|
| + // If a ui::InputMethod object is attched to the root window, character
|
| + // events are handled inside the object and are not passed to this function.
|
| + // If such object is not attached, character events might be sent (e.g. on
|
| + // Windows). In this case, we just skip these.
|
| return false;
|
| + }
|
|
|
| DCHECK(window_->IsVisible());
|
| InputMethod* input_method = GetWidget()->GetInputMethod();
|
| DCHECK(input_method);
|
| - // TODO(oshima): DispatchKeyEvent should return bool?
|
| KeyEvent views_event(event);
|
| input_method->DispatchKeyEvent(views_event);
|
| return true;
|
|
|