| Index: views/focus/accelerator_handler_touch.cc
|
| diff --git a/views/focus/accelerator_handler_touch.cc b/views/focus/accelerator_handler_touch.cc
|
| index ce15c518c83357f4feffdd0c88592181cb61f5df..b9120c5ca39bcb1c84965fd0f07c05da970469ca 100644
|
| --- a/views/focus/accelerator_handler_touch.cc
|
| +++ b/views/focus/accelerator_handler_touch.cc
|
| @@ -15,6 +15,7 @@
|
| #include "views/accelerator.h"
|
| #include "views/events/event.h"
|
| #include "views/focus/focus_manager.h"
|
| +#include "views/ime/input_method.h"
|
| #include "views/touchui/touch_factory.h"
|
| #include "views/widget/root_view.h"
|
| #include "views/widget/widget_gtk.h"
|
| @@ -23,7 +24,7 @@ namespace views {
|
|
|
| namespace {
|
|
|
| -RootView* FindRootViewForGdkWindow(GdkWindow* gdk_window) {
|
| +Widget* FindWidgetForGdkWindow(GdkWindow* gdk_window) {
|
| gpointer data = NULL;
|
| gdk_window_get_user_data(gdk_window, &data);
|
| GtkWidget* gtk_widget = reinterpret_cast<GtkWidget*>(data);
|
| @@ -37,7 +38,7 @@ RootView* FindRootViewForGdkWindow(GdkWindow* gdk_window) {
|
| DLOG(WARNING) << "no WidgetGtk found for that GtkWidget";
|
| return NULL;
|
| }
|
| - return widget->GetWidget()->GetRootView();
|
| + return widget->GetWidget();
|
| }
|
|
|
| #if defined(HAVE_XINPUT2)
|
| @@ -163,12 +164,23 @@ bool DispatchXEvent(XEvent* xev) {
|
|
|
| GdkWindow* gwind = gdk_window_lookup_for_display(gdisp, xwindow);
|
|
|
| - if (RootView* root = FindRootViewForGdkWindow(gwind)) {
|
| + if (Widget* widget = FindWidgetForGdkWindow(gwind)) {
|
| + RootView* root = widget->GetRootView();
|
| switch (xev->type) {
|
| case KeyPress:
|
| case KeyRelease: {
|
| Event::FromNativeEvent2 from_native;
|
| KeyEvent keyev(xev, from_native);
|
| + InputMethod* ime = widget->GetInputMethod();
|
| + // Only dispatch the key event to the input method if the focused view
|
| + // supports text input, then we can safely return true to prevent the
|
| + // event from being dispatched to Gtk native widgets.
|
| + // TODO(suzhe): remove it after getting rid of Gtk.
|
| + if (ime &&
|
| + widget->GetFocusManager()->GetFocusedView()->GetTextInputClient()) {
|
| + ime->DispatchKeyEvent(keyev);
|
| + return true;
|
| + }
|
| return root->ProcessKeyEvent(keyev);
|
| }
|
|
|
|
|