diff options
author | pkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-29 23:47:04 +0000 |
---|---|---|
committer | pkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-29 23:47:04 +0000 |
commit | 8aa8ece77906ecd5aa0526b9182e4e48fa9e6b67 (patch) | |
tree | a58f13b1abd237205c3a5f669abe5004bdcbdc6e /views/focus/focus_manager.cc | |
parent | 9a08908fbe72c1e6cc0f9127cde5d758272ab197 (diff) | |
download | chromium_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.cc | 59 |
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 |