Index: views/widget/gtk_views_window.cc |
diff --git a/views/widget/gtk_views_window.cc b/views/widget/gtk_views_window.cc |
index fb3657d0582083fd7c6d927177a73eb154dd7d0b..2eff8f11c03fe68a5628525518543d6ae91bcbb4 100644 |
--- a/views/widget/gtk_views_window.cc |
+++ b/views/widget/gtk_views_window.cc |
@@ -2,6 +2,8 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
+#include <gtk/gtk.h> |
+#include "views/event.h" |
#include "views/widget/gtk_views_window.h" |
#include "views/focus/focus_manager.h" |
@@ -9,15 +11,16 @@ G_BEGIN_DECLS |
G_DEFINE_TYPE(GtkViewsWindow, gtk_views_window, GTK_TYPE_WINDOW) |
-static void gtk_views_window_move_focus(GtkWindow *window, |
+static void gtk_views_window_move_focus(GtkWindow* window, |
GtkDirectionType dir) { |
views::FocusManager* focus_manager = |
views::FocusManager::GetFocusManagerForNativeWindow(window); |
if (focus_manager) { |
- // We only support tab traversing by tab keys, so just ignore all other |
- // cases silently. |
- if (dir == GTK_DIR_TAB_BACKWARD || dir == GTK_DIR_TAB_FORWARD) |
- focus_manager->AdvanceFocus(dir == GTK_DIR_TAB_BACKWARD); |
+ GdkEvent* key = gtk_get_current_event(); |
+ if (key && key->type == GDK_KEY_PRESS) { |
+ views::KeyEvent key_event(reinterpret_cast<GdkEventKey*>(key)); |
+ focus_manager->OnKeyEvent(key_event); |
+ } |
} else if (GTK_WINDOW_CLASS(gtk_views_window_parent_class)->move_focus) { |
GTK_WINDOW_CLASS(gtk_views_window_parent_class)->move_focus(window, dir); |
} |