Index: views/focus/focus_manager_gtk.cc |
diff --git a/views/focus/focus_manager_gtk.cc b/views/focus/focus_manager_gtk.cc |
index eb2565447359c554f041c7f5818b4d44a49a7e76..6ba1390dcf0003724909e007065dfbc2daec17ec 100644 |
--- a/views/focus/focus_manager_gtk.cc |
+++ b/views/focus/focus_manager_gtk.cc |
@@ -16,17 +16,18 @@ void FocusManager::ClearNativeFocus() { |
} |
void FocusManager::FocusNativeView(gfx::NativeView native_view) { |
- NOTIMPLEMENTED(); |
+ if (native_view && !gtk_widget_is_focus(native_view)) |
+ gtk_widget_grab_focus(native_view); |
} |
// static |
FocusManager* FocusManager::GetFocusManagerForNativeView( |
gfx::NativeView native_view) { |
- GtkWidget* parent; |
- while ((parent = gtk_widget_get_parent(native_view)) != NULL) { |
- native_view = parent; |
- } |
- WidgetGtk* widget = WidgetGtk::GetViewForNative(native_view); |
+ GtkWidget* root = gtk_widget_get_toplevel(native_view); |
+ if (!root || !GTK_WIDGET_TOPLEVEL(root)) |
+ return NULL; |
+ |
+ WidgetGtk* widget = WidgetGtk::GetViewForNative(root); |
if (!widget) { |
NOTREACHED(); |
return NULL; |