summaryrefslogtreecommitdiffstats
path: root/views/focus/focus_manager.cc
diff options
context:
space:
mode:
authorpkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-29 23:47:04 +0000
committerpkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-29 23:47:04 +0000
commit8aa8ece77906ecd5aa0526b9182e4e48fa9e6b67 (patch)
treea58f13b1abd237205c3a5f669abe5004bdcbdc6e /views/focus/focus_manager.cc
parent9a08908fbe72c1e6cc0f9127cde5d758272ab197 (diff)
downloadchromium_src-8aa8ece77906ecd5aa0526b9182e4e48fa9e6b67.zip
chromium_src-8aa8ece77906ecd5aa0526b9182e4e48fa9e6b67.tar.gz
chromium_src-8aa8ece77906ecd5aa0526b9182e4e48fa9e6b67.tar.bz2
Switch FocusManager to using ObserverList instead of keeping its listeners in a simple vector.
BUG=none TEST=none Review URL: http://codereview.chromium.org/7280013 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@91052 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'views/focus/focus_manager.cc')
-rw-r--r--views/focus/focus_manager.cc59
1 files changed, 13 insertions, 46 deletions
diff --git a/views/focus/focus_manager.cc b/views/focus/focus_manager.cc
index eddf4b6..febbc3c 100644
--- a/views/focus/focus_manager.cc
+++ b/views/focus/focus_manager.cc
@@ -27,45 +27,28 @@ namespace views {
void FocusManager::WidgetFocusManager::AddFocusChangeListener(
WidgetFocusChangeListener* listener) {
- DCHECK(std::find(focus_change_listeners_.begin(),
- focus_change_listeners_.end(), listener) ==
- focus_change_listeners_.end()) <<
- "Adding a WidgetFocusChangeListener twice.";
- focus_change_listeners_.push_back(listener);
+ focus_change_listeners_.AddObserver(listener);
}
void FocusManager::WidgetFocusManager::RemoveFocusChangeListener(
WidgetFocusChangeListener* listener) {
- WidgetFocusChangeListenerList::iterator iter(std::find(
- focus_change_listeners_.begin(),
- focus_change_listeners_.end(),
- listener));
- if (iter != focus_change_listeners_.end()) {
- focus_change_listeners_.erase(iter);
- } else {
- NOTREACHED() <<
- "Attempting to remove an unregistered WidgetFocusChangeListener.";
- }
+ focus_change_listeners_.RemoveObserver(listener);
}
void FocusManager::WidgetFocusManager::OnWidgetFocusEvent(
gfx::NativeView focused_before,
gfx::NativeView focused_now) {
- if (!enabled_)
- return;
-
- // Perform a safe iteration over the focus listeners, as the array
- // may change during notification.
- WidgetFocusChangeListenerList local_listeners(focus_change_listeners_);
- WidgetFocusChangeListenerList::iterator iter(local_listeners.begin());
- for (;iter != local_listeners.end(); ++iter) {
- (*iter)->NativeFocusWillChange(focused_before, focused_now);
+ if (enabled_) {
+ FOR_EACH_OBSERVER(WidgetFocusChangeListener, focus_change_listeners_,
+ NativeFocusWillChange(focused_before, focused_now));
}
}
-FocusManager::WidgetFocusManager::WidgetFocusManager() : enabled_(true) {}
+FocusManager::WidgetFocusManager::WidgetFocusManager() : enabled_(true) {
+}
-FocusManager::WidgetFocusManager::~WidgetFocusManager() {}
+FocusManager::WidgetFocusManager::~WidgetFocusManager() {
+}
// static
FocusManager::WidgetFocusManager*
@@ -85,9 +68,6 @@ FocusManager::FocusManager(Widget* widget)
}
FocusManager::~FocusManager() {
- // If there are still registered FocusChange listeners, chances are they were
- // leaked so warn about them.
- DCHECK(focus_change_listeners_.empty());
}
// static
@@ -289,11 +269,8 @@ void FocusManager::SetFocusedViewWithReason(
// Update the reason for the focus change (since this is checked by
// some listeners), then notify all listeners.
focus_change_reason_ = reason;
- FocusChangeListenerList::const_iterator iter;
- for (iter = focus_change_listeners_.begin();
- iter != focus_change_listeners_.end(); ++iter) {
- (*iter)->FocusWillChange(focused_view_, view);
- }
+ FOR_EACH_OBSERVER(FocusChangeListener, focus_change_listeners_,
+ FocusWillChange(focused_view_, view));
if (focused_view_)
focused_view_->Blur();
@@ -488,21 +465,11 @@ void FocusManager::ViewRemoved(View* removed) {
}
void FocusManager::AddFocusChangeListener(FocusChangeListener* listener) {
- DCHECK(std::find(focus_change_listeners_.begin(),
- focus_change_listeners_.end(), listener) ==
- focus_change_listeners_.end()) << "Adding a listener twice.";
- focus_change_listeners_.push_back(listener);
+ focus_change_listeners_.AddObserver(listener);
}
void FocusManager::RemoveFocusChangeListener(FocusChangeListener* listener) {
- FocusChangeListenerList::iterator place =
- std::find(focus_change_listeners_.begin(), focus_change_listeners_.end(),
- listener);
- if (place == focus_change_listeners_.end()) {
- NOTREACHED() << "Removing a listener that isn't registered.";
- return;
- }
- focus_change_listeners_.erase(place);
+ focus_change_listeners_.RemoveObserver(listener);
}
} // namespace views