From 5c320965fef19421538290eb27ea1819a2a04b87 Mon Sep 17 00:00:00 2001 From: "oshima@google.com" Date: Thu, 14 Jul 2011 08:03:30 +0000 Subject: Clean up FocusManager Use Widget API to get FocusManager for native_view/window. Move FocusNatieView to native widget impl. This is necessary for NativeWidgetX BUG=none TEST=none Review URL: http://codereview.chromium.org/7351008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@92497 0039d316-1c4b-4281-b951-d872f2087c98 --- views/focus/focus_manager.cc | 23 ++++++++++++++++++++ views/focus/focus_manager.h | 10 ++++----- views/focus/focus_manager_gtk.cc | 45 ---------------------------------------- views/focus/focus_manager_win.cc | 33 ----------------------------- 4 files changed, 28 insertions(+), 83 deletions(-) delete mode 100644 views/focus/focus_manager_gtk.cc delete mode 100644 views/focus/focus_manager_win.cc (limited to 'views/focus') diff --git a/views/focus/focus_manager.cc b/views/focus/focus_manager.cc index 87610d7..e2942a6 100644 --- a/views/focus/focus_manager.cc +++ b/views/focus/focus_manager.cc @@ -454,11 +454,34 @@ AcceleratorTarget* FocusManager::GetCurrentTargetForAccelerator( return map_iter->second.front(); } +void FocusManager::FocusNativeView(gfx::NativeView native_view) { + widget_->FocusNativeView(native_view); +} + // static bool FocusManager::IsTabTraversalKeyEvent(const KeyEvent& key_event) { return key_event.key_code() == ui::VKEY_TAB && !key_event.IsControlDown(); } +// static +FocusManager* FocusManager::GetFocusManagerForNativeView( + gfx::NativeView native_view) { + // TODO(beng): This method probably isn't necessary. + Widget* widget = Widget::GetTopLevelWidgetForNativeView(native_view); + return widget ? widget->GetFocusManager() : NULL; +} + +// static +FocusManager* FocusManager::GetFocusManagerForNativeWindow( + gfx::NativeWindow native_window) { + // TODO(beng): This method probably isn't necessary. + Widget* widget = Widget::GetWidgetForNativeWindow(native_window); + if (!widget) + return NULL; + widget = widget->GetTopLevelWidget(); + return widget ? widget->GetFocusManager() : NULL; +} + void FocusManager::ViewRemoved(View* removed) { // If the view being removed contains (or is) the focused view, // clear the focus. However, it's not safe to call ClearFocus() diff --git a/views/focus/focus_manager.h b/views/focus/focus_manager.h index 70c38e56..a75f79a 100644 --- a/views/focus/focus_manager.h +++ b/views/focus/focus_manager.h @@ -269,17 +269,17 @@ class FocusManager { AcceleratorTarget* GetCurrentTargetForAccelerator( const Accelerator& accelertor) const; - // Convenience method that returns true if the passed |key_event| should - // trigger tab traversal (if it is a TAB key press with or without SHIFT - // pressed). - static bool IsTabTraversalKeyEvent(const KeyEvent& key_event); - // Sets the focus to the specified native view. virtual void FocusNativeView(gfx::NativeView native_view); // Clears the native view having the focus. virtual void ClearNativeFocus(); + // Convenience method that returns true if the passed |key_event| should + // trigger tab traversal (if it is a TAB key press with or without SHIFT + // pressed). + static bool IsTabTraversalKeyEvent(const KeyEvent& key_event); + // Retrieves the FocusManager associated with the passed native view. static FocusManager* GetFocusManagerForNativeView( gfx::NativeView native_view); diff --git a/views/focus/focus_manager_gtk.cc b/views/focus/focus_manager_gtk.cc deleted file mode 100644 index e0fa90a..0000000 --- a/views/focus/focus_manager_gtk.cc +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include - -#include "views/focus/focus_manager.h" - -#include "base/logging.h" -#include "views/widget/native_widget_gtk.h" - -namespace views { - -void FocusManager::FocusNativeView(gfx::NativeView native_view) { - if (native_view && !gtk_widget_is_focus(native_view)) - gtk_widget_grab_focus(native_view); -} - -// static -FocusManager* FocusManager::GetFocusManagerForNativeView( - gfx::NativeView native_view) { - GtkWidget* root = gtk_widget_get_toplevel(native_view); - if (!root || !GTK_WIDGET_TOPLEVEL(root)) - return NULL; - - Widget* widget = Widget::GetWidgetForNativeView(root); - if (!widget) { - // TODO(jcampan): http://crbug.com/21378 Reenable this NOTREACHED() when the - // options page is only based on views. - // NOTREACHED(); - NOTIMPLEMENTED(); - return NULL; - } - FocusManager* focus_manager = widget->GetFocusManager(); - DCHECK(focus_manager) << "no FocusManager for top level Widget"; - return focus_manager; -} - -// static -FocusManager* FocusManager::GetFocusManagerForNativeWindow( - gfx::NativeWindow native_window) { - return GetFocusManagerForNativeView(GTK_WIDGET(native_window)); -} - -} // namespace views diff --git a/views/focus/focus_manager_win.cc b/views/focus/focus_manager_win.cc deleted file mode 100644 index 17517a9..0000000 --- a/views/focus/focus_manager_win.cc +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "views/focus/focus_manager.h" - -#include "views/view.h" -#include "views/widget/native_widget.h" -#include "views/widget/widget.h" - -namespace views { - -void FocusManager::FocusNativeView(gfx::NativeView native_view) { - // Only reset focus if hwnd is not already focused. - if (native_view && ::GetFocus() != native_view) - ::SetFocus(native_view); -} - -// static -FocusManager* FocusManager::GetFocusManagerForNativeView( - gfx::NativeView native_view) { - // TODO(beng): This method probably isn't necessary. - Widget* widget = Widget::GetTopLevelWidgetForNativeView(native_view); - return widget ? widget->GetFocusManager() : NULL; -} - -// static -FocusManager* FocusManager::GetFocusManagerForNativeWindow( - gfx::NativeWindow native_window) { - return GetFocusManagerForNativeView(native_window); -} - -} // namespace views -- cgit v1.1