summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortfarina@chromium.org <tfarina@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-14 00:29:54 +0000
committertfarina@chromium.org <tfarina@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-14 00:29:54 +0000
commit103b290595a05fc1bb8b239ed80bfdc701c39105 (patch)
treeff2845f9b949f63ec710386187cc5642f1f544ec
parent36cb77af1fd4dd1b1daff4dfb989398a27d774a1 (diff)
downloadchromium_src-103b290595a05fc1bb8b239ed80bfdc701c39105.zip
chromium_src-103b290595a05fc1bb8b239ed80bfdc701c39105.tar.gz
chromium_src-103b290595a05fc1bb8b239ed80bfdc701c39105.tar.bz2
views: Factor WidgetFocusManager out of FocusManager class.
This moves WidgetFocusManager into its source/header files avoiding the use of nested classes. R=sky@chromium.org Review URL: http://codereview.chromium.org/7885001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@101002 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/extensions/extension_browser_event_router.cc4
-rw-r--r--chrome/browser/extensions/extension_browser_event_router.h3
-rw-r--r--chrome/browser/ui/views/about_chrome_view.cc1
-rw-r--r--chrome/browser/ui/views/tab_contents/native_tab_contents_container_views.cc1
-rw-r--r--chrome/browser/ui/views/tab_contents/native_tab_contents_container_win.cc1
-rw-r--r--views/focus/focus_manager.cc41
-rw-r--r--views/focus/focus_manager.h69
-rw-r--r--views/focus/widget_focus_manager.cc50
-rw-r--r--views/focus/widget_focus_manager.h82
-rw-r--r--views/views.gyp2
-rw-r--r--views/widget/widget.cc22
11 files changed, 153 insertions, 123 deletions
diff --git a/chrome/browser/extensions/extension_browser_event_router.cc b/chrome/browser/extensions/extension_browser_event_router.cc
index 976c251..b72f425 100644
--- a/chrome/browser/extensions/extension_browser_event_router.cc
+++ b/chrome/browser/extensions/extension_browser_event_router.cc
@@ -67,7 +67,7 @@ void ExtensionBrowserEventRouter::Init() {
return;
BrowserList::AddObserver(this);
#if defined(TOOLKIT_VIEWS)
- views::FocusManager::GetWidgetFocusManager()->AddFocusChangeListener(this);
+ views::WidgetFocusManager::GetInstance()->AddFocusChangeListener(this);
#elif defined(TOOLKIT_GTK)
ui::ActiveWindowWatcherX::AddObserver(this);
#elif defined(OS_MACOSX)
@@ -108,7 +108,7 @@ ExtensionBrowserEventRouter::ExtensionBrowserEventRouter(Profile* profile)
ExtensionBrowserEventRouter::~ExtensionBrowserEventRouter() {
BrowserList::RemoveObserver(this);
#if defined(TOOLKIT_VIEWS)
- views::FocusManager::GetWidgetFocusManager()->RemoveFocusChangeListener(this);
+ views::WidgetFocusManager::GetInstance()->RemoveFocusChangeListener(this);
#elif defined(TOOLKIT_GTK)
ui::ActiveWindowWatcherX::RemoveObserver(this);
#endif
diff --git a/chrome/browser/extensions/extension_browser_event_router.h b/chrome/browser/extensions/extension_browser_event_router.h
index 08e37a4..409e744 100644
--- a/chrome/browser/extensions/extension_browser_event_router.h
+++ b/chrome/browser/extensions/extension_browser_event_router.h
@@ -16,8 +16,7 @@
#include "chrome/browser/ui/browser_list.h"
#include "content/common/notification_registrar.h"
#if defined(TOOLKIT_VIEWS)
-#include "views/focus/focus_manager.h"
-#include "views/view.h"
+#include "views/focus/widget_focus_manager.h"
#elif defined(TOOLKIT_GTK)
#include "ui/base/x/active_window_watcher_x.h"
#endif
diff --git a/chrome/browser/ui/views/about_chrome_view.cc b/chrome/browser/ui/views/about_chrome_view.cc
index a75ec62..d1d2ae7 100644
--- a/chrome/browser/ui/views/about_chrome_view.cc
+++ b/chrome/browser/ui/views/about_chrome_view.cc
@@ -14,6 +14,7 @@
#include "base/callback.h"
#include "base/i18n/rtl.h"
#include "base/string_number_conversions.h"
+#include "base/threading/thread_restrictions.h"
#include "base/utf_string_conversions.h"
#include "base/win/windows_version.h"
#include "chrome/browser/google/google_util.h"
diff --git a/chrome/browser/ui/views/tab_contents/native_tab_contents_container_views.cc b/chrome/browser/ui/views/tab_contents/native_tab_contents_container_views.cc
index 1849428..4ab1aaa 100644
--- a/chrome/browser/ui/views/tab_contents/native_tab_contents_container_views.cc
+++ b/chrome/browser/ui/views/tab_contents/native_tab_contents_container_views.cc
@@ -13,6 +13,7 @@
#include "content/browser/tab_contents/tab_contents.h"
#include "ui/base/accessibility/accessible_view_state.h"
#include "views/focus/focus_manager.h"
+#include "views/focus/widget_focus_manager.h"
#include "views/layout/fill_layout.h"
#include "views/widget/native_widget_views.h"
diff --git a/chrome/browser/ui/views/tab_contents/native_tab_contents_container_win.cc b/chrome/browser/ui/views/tab_contents/native_tab_contents_container_win.cc
index 750dc45..9ef98ad 100644
--- a/chrome/browser/ui/views/tab_contents/native_tab_contents_container_win.cc
+++ b/chrome/browser/ui/views/tab_contents/native_tab_contents_container_win.cc
@@ -13,6 +13,7 @@
#include "content/browser/tab_contents/tab_contents.h"
#include "ui/base/accessibility/accessible_view_state.h"
#include "views/focus/focus_manager.h"
+#include "views/focus/widget_focus_manager.h"
////////////////////////////////////////////////////////////////////////////////
// NativeTabContentsContainerWin, public:
diff --git a/views/focus/focus_manager.cc b/views/focus/focus_manager.cc
index d58e4a11..d09d615 100644
--- a/views/focus/focus_manager.cc
+++ b/views/focus/focus_manager.cc
@@ -13,47 +13,13 @@
#include "views/accelerator.h"
#include "views/focus/focus_search.h"
#include "views/focus/view_storage.h"
+#include "views/focus/widget_focus_manager.h"
#include "views/view.h"
#include "views/widget/root_view.h"
#include "views/widget/widget.h"
namespace views {
-// FocusManager::WidgetFocusManager ---------------------------------
-
-void FocusManager::WidgetFocusManager::AddFocusChangeListener(
- WidgetFocusChangeListener* listener) {
- focus_change_listeners_.AddObserver(listener);
-}
-
-void FocusManager::WidgetFocusManager::RemoveFocusChangeListener(
- WidgetFocusChangeListener* listener) {
- focus_change_listeners_.RemoveObserver(listener);
-}
-
-void FocusManager::WidgetFocusManager::OnWidgetFocusEvent(
- gfx::NativeView focused_before,
- gfx::NativeView focused_now) {
- if (enabled_) {
- FOR_EACH_OBSERVER(WidgetFocusChangeListener, focus_change_listeners_,
- NativeFocusWillChange(focused_before, focused_now));
- }
-}
-
-FocusManager::WidgetFocusManager::WidgetFocusManager() : enabled_(true) {
-}
-
-FocusManager::WidgetFocusManager::~WidgetFocusManager() {
-}
-
-// static
-FocusManager::WidgetFocusManager*
-FocusManager::WidgetFocusManager::GetInstance() {
- return Singleton<WidgetFocusManager>::get();
-}
-
-// FocusManager -----------------------------------------------------
-
FocusManager::FocusManager(Widget* widget)
: widget_(widget),
focused_view_(NULL),
@@ -67,11 +33,6 @@ FocusManager::FocusManager(Widget* widget)
FocusManager::~FocusManager() {
}
-// static
-FocusManager::WidgetFocusManager* FocusManager::GetWidgetFocusManager() {
- return WidgetFocusManager::GetInstance();
-}
-
bool FocusManager::OnKeyEvent(const KeyEvent& event) {
#if defined(OS_WIN)
// If the focused view wants to process the key event as is, let it be.
diff --git a/views/focus/focus_manager.h b/views/focus/focus_manager.h
index 88f7a1c..8650d2c 100644
--- a/views/focus/focus_manager.h
+++ b/views/focus/focus_manager.h
@@ -10,7 +10,6 @@
#include <map>
#include "base/basictypes.h"
-#include "base/memory/singleton.h"
#include "base/observer_list.h"
#include "ui/gfx/native_widget_types.h"
#include "views/accelerator.h"
@@ -109,58 +108,8 @@ class VIEWS_EXPORT FocusChangeListener {
virtual ~FocusChangeListener() {}
};
-// This interface should be implemented by classes that want to be notified when
-// the native focus is about to change. Listeners implementing this interface
-// will be invoked for all native focus changes across the entire Chrome
-// application. FocusChangeListeners are only called for changes within the
-// children of a single top-level native-view.
-class WidgetFocusChangeListener {
- public:
- virtual void NativeFocusWillChange(gfx::NativeView focused_before,
- gfx::NativeView focused_now) = 0;
-
- protected:
- virtual ~WidgetFocusChangeListener() {}
-};
-
class VIEWS_EXPORT FocusManager {
public:
- class VIEWS_EXPORT WidgetFocusManager {
- public:
- // Returns the singleton instance.
- static WidgetFocusManager* GetInstance();
-
- // Adds/removes a WidgetFocusChangeListener |listener| to the set of
- // active listeners.
- void AddFocusChangeListener(WidgetFocusChangeListener* listener);
- void RemoveFocusChangeListener(WidgetFocusChangeListener* listener);
-
- // To be called when native-focus shifts from |focused_before| to
- // |focused_now|.
- // TODO(port) : Invocations to this routine are only implemented for
- // the Win32 platform. Calls need to be placed appropriately for
- // non-Windows environments.
- void OnWidgetFocusEvent(gfx::NativeView focused_before,
- gfx::NativeView focused_now);
-
- // Enable/Disable notification of registered listeners during calls
- // to OnWidgetFocusEvent. Used to prevent unwanted focus changes from
- // propagating notifications.
- void EnableNotifications() { enabled_ = true; }
- void DisableNotifications() { enabled_ = false; }
-
- private:
- WidgetFocusManager();
- ~WidgetFocusManager();
-
- ObserverList<WidgetFocusChangeListener> focus_change_listeners_;
-
- bool enabled_;
-
- friend struct DefaultSingletonTraits<WidgetFocusManager>;
- DISALLOW_COPY_AND_ASSIGN(WidgetFocusManager);
- };
-
// The reason why the focus changed.
enum FocusChangeReason {
// The focus changed because the user traversed focusable views using
@@ -178,9 +127,6 @@ class VIEWS_EXPORT FocusManager {
explicit FocusManager(Widget* widget);
virtual ~FocusManager();
- // Returns the global WidgetFocusManager instance for the running application.
- static WidgetFocusManager* GetWidgetFocusManager();
-
// Processes the passed key event for accelerators and tab traversal.
// Returns false if the event has been consumed and should not be processed
// further.
@@ -322,21 +268,6 @@ class VIEWS_EXPORT FocusManager {
DISALLOW_COPY_AND_ASSIGN(FocusManager);
};
-// A basic helper class that is used to disable native focus change
-// notifications within a scope.
-class AutoNativeNotificationDisabler {
- public:
- AutoNativeNotificationDisabler() {
- FocusManager::GetWidgetFocusManager()->DisableNotifications();
- }
-
- ~AutoNativeNotificationDisabler() {
- FocusManager::GetWidgetFocusManager()->EnableNotifications();
- }
- private:
- DISALLOW_COPY_AND_ASSIGN(AutoNativeNotificationDisabler);
-};
-
} // namespace views
#endif // VIEWS_FOCUS_FOCUS_MANAGER_H_
diff --git a/views/focus/widget_focus_manager.cc b/views/focus/widget_focus_manager.cc
new file mode 100644
index 0000000..3ff0a17
--- /dev/null
+++ b/views/focus/widget_focus_manager.cc
@@ -0,0 +1,50 @@
+// 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/widget_focus_manager.h"
+
+#include "base/memory/singleton.h"
+
+namespace views {
+
+// WidgetFocusManager ----------------------------------------------------------
+
+// static
+WidgetFocusManager* WidgetFocusManager::GetInstance() {
+ return Singleton<WidgetFocusManager>::get();
+}
+
+void WidgetFocusManager::AddFocusChangeListener(
+ WidgetFocusChangeListener* listener) {
+ focus_change_listeners_.AddObserver(listener);
+}
+
+void WidgetFocusManager::RemoveFocusChangeListener(
+ WidgetFocusChangeListener* listener) {
+ focus_change_listeners_.RemoveObserver(listener);
+}
+
+void WidgetFocusManager::OnWidgetFocusEvent(gfx::NativeView focused_before,
+ gfx::NativeView focused_now) {
+ if (enabled_) {
+ FOR_EACH_OBSERVER(WidgetFocusChangeListener, focus_change_listeners_,
+ NativeFocusWillChange(focused_before, focused_now));
+ }
+}
+
+WidgetFocusManager::WidgetFocusManager() : enabled_(true) {}
+
+WidgetFocusManager::~WidgetFocusManager() {}
+
+// AutoNativeNotificationDisabler ----------------------------------------------
+
+AutoNativeNotificationDisabler::AutoNativeNotificationDisabler() {
+ WidgetFocusManager::GetInstance()->DisableNotifications();
+}
+
+AutoNativeNotificationDisabler::~AutoNativeNotificationDisabler() {
+ WidgetFocusManager::GetInstance()->EnableNotifications();
+}
+
+} // namespace views
diff --git a/views/focus/widget_focus_manager.h b/views/focus/widget_focus_manager.h
new file mode 100644
index 0000000..36430fb
--- /dev/null
+++ b/views/focus/widget_focus_manager.h
@@ -0,0 +1,82 @@
+// 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.
+
+#ifndef VIEWS_FOCUS_WIDGET_FOCUS_MANAGER_H_
+#define VIEWS_FOCUS_WIDGET_FOCUS_MANAGER_H_
+#pragma once
+
+#include "base/basictypes.h"
+#include "base/observer_list.h"
+#include "ui/gfx/native_widget_types.h"
+#include "views/views_export.h"
+
+template <typename T> struct DefaultSingletonTraits;
+
+namespace views {
+
+// This interface should be implemented by classes that want to be notified when
+// the native focus is about to change. Listeners implementing this interface
+// will be invoked for all native focus changes across the entire Chrome
+// application. FocusChangeListeners are only called for changes within the
+// children of a single top-level native-view.
+class WidgetFocusChangeListener {
+ public:
+ virtual void NativeFocusWillChange(gfx::NativeView focused_before,
+ gfx::NativeView focused_now) = 0;
+
+ protected:
+ virtual ~WidgetFocusChangeListener() {}
+};
+
+class VIEWS_EXPORT WidgetFocusManager {
+ public:
+ // Returns the singleton instance.
+ static WidgetFocusManager* GetInstance();
+
+ // Adds/removes a WidgetFocusChangeListener |listener| to the set of
+ // active listeners.
+ void AddFocusChangeListener(WidgetFocusChangeListener* listener);
+ void RemoveFocusChangeListener(WidgetFocusChangeListener* listener);
+
+ // To be called when native-focus shifts from |focused_before| to
+ // |focused_now|.
+ // TODO(port) : Invocations to this routine are only implemented for
+ // the Win32 platform. Calls need to be placed appropriately for
+ // non-Windows environments.
+ void OnWidgetFocusEvent(gfx::NativeView focused_before,
+ gfx::NativeView focused_now);
+
+ // Enable/Disable notification of registered listeners during calls
+ // to OnWidgetFocusEvent. Used to prevent unwanted focus changes from
+ // propagating notifications.
+ void EnableNotifications() { enabled_ = true; }
+ void DisableNotifications() { enabled_ = false; }
+
+ private:
+ friend struct DefaultSingletonTraits<WidgetFocusManager>;
+
+ WidgetFocusManager();
+ ~WidgetFocusManager();
+
+ ObserverList<WidgetFocusChangeListener> focus_change_listeners_;
+
+ bool enabled_;
+
+ DISALLOW_COPY_AND_ASSIGN(WidgetFocusManager);
+};
+
+// A basic helper class that is used to disable native focus change
+// notifications within a scope.
+class AutoNativeNotificationDisabler {
+ public:
+ AutoNativeNotificationDisabler();
+ ~AutoNativeNotificationDisabler();
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(AutoNativeNotificationDisabler);
+};
+
+} // namespace views
+
+#endif // VIEWS_FOCUS_WIDGET_FOCUS_MANAGER_H_
diff --git a/views/views.gyp b/views/views.gyp
index d6e3145..6d651fa 100644
--- a/views/views.gyp
+++ b/views/views.gyp
@@ -264,6 +264,8 @@
'focus/focus_search.h',
'focus/view_storage.cc',
'focus/view_storage.h',
+ 'focus/widget_focus_manager.cc',
+ 'focus/widget_focus_manager.h',
'ime/character_composer.cc',
'ime/character_composer.h',
'ime/input_method.h',
diff --git a/views/widget/widget.cc b/views/widget/widget.cc
index 909fc50..de44fdb 100644
--- a/views/widget/widget.cc
+++ b/views/widget/widget.cc
@@ -12,26 +12,30 @@
#include "ui/gfx/compositor/compositor.h"
#include "ui/gfx/compositor/layer.h"
#include "views/controls/menu/menu_controller.h"
+#include "views/focus/focus_manager.h"
#include "views/focus/focus_manager_factory.h"
#include "views/focus/view_storage.h"
+#include "views/focus/widget_focus_manager.h"
#include "views/ime/input_method.h"
#include "views/views_delegate.h"
#include "views/widget/default_theme_provider.h"
-#include "views/widget/root_view.h"
#include "views/widget/native_widget_private.h"
+#include "views/widget/root_view.h"
#include "views/widget/tooltip_manager.h"
#include "views/widget/widget_delegate.h"
#include "views/window/custom_frame_view.h"
-namespace views {
-
namespace {
+
// Set to true if a pure Views implementation is preferred
bool use_pure_views = false;
// True to enable debug paint that indicates where to be painted.
bool debug_paint = false;
-}
+
+} // namespace
+
+namespace views {
// This class is used to keep track of the event a Widget is processing, and
// restore any previously active event afterwards.
@@ -844,15 +848,13 @@ void Widget::OnNativeWidgetActivationChanged(bool active) {
}
void Widget::OnNativeFocus(gfx::NativeView focused_view) {
- GetFocusManager()->GetWidgetFocusManager()->OnWidgetFocusEvent(
- focused_view,
- GetNativeView());
+ WidgetFocusManager::GetInstance()->OnWidgetFocusEvent(focused_view,
+ GetNativeView());
}
void Widget::OnNativeBlur(gfx::NativeView focused_view) {
- GetFocusManager()->GetWidgetFocusManager()->OnWidgetFocusEvent(
- GetNativeView(),
- focused_view);
+ WidgetFocusManager::GetInstance()->OnWidgetFocusEvent(GetNativeView(),
+ focused_view);
}
void Widget::OnNativeWidgetVisibilityChanged(bool visible) {