diff options
author | jcampan@chromium.org <jcampan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-01 22:53:51 +0000 |
---|---|---|
committer | jcampan@chromium.org <jcampan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-01 22:53:51 +0000 |
commit | dc5e89230025a8202e0314410a388ad91138020c (patch) | |
tree | 41630518a44295112141de14f595c50e11fb84de /views/focus/focus_manager.cc | |
parent | 668dd15b25cf7fd94fede92dd140b59c62009390 (diff) | |
download | chromium_src-dc5e89230025a8202e0314410a388ad91138020c.zip chromium_src-dc5e89230025a8202e0314410a388ad91138020c.tar.gz chromium_src-dc5e89230025a8202e0314410a388ad91138020c.tar.bz2 |
The FocusManager stores/restores focus when the top window becomes inactive/active.
BUG=None
TEST=Run the focus manager unit-tests.
Review URL: http://codereview.chromium.org/164448
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@25108 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'views/focus/focus_manager.cc')
-rw-r--r-- | views/focus/focus_manager.cc | 45 |
1 files changed, 23 insertions, 22 deletions
diff --git a/views/focus/focus_manager.cc b/views/focus/focus_manager.cc index 1a0f7ae..dffb392 100644 --- a/views/focus/focus_manager.cc +++ b/views/focus/focus_manager.cc @@ -224,31 +224,32 @@ View* FocusManager::GetNextFocusableView(View* original_starting_view, } void FocusManager::SetFocusedView(View* view) { - if (focused_view_ != view) { - View* prev_focused_view = focused_view_; - if (focused_view_) - focused_view_->WillLoseFocus(); - - if (view) - view->WillGainFocus(); - - // Notified listeners that the focus changed. - FocusChangeListenerList::const_iterator iter; - for (iter = focus_change_listeners_.begin(); - iter != focus_change_listeners_.end(); ++iter) { - (*iter)->FocusWillChange(prev_focused_view, view); - } + if (focused_view_ == view) + return; - focused_view_ = view; + View* prev_focused_view = focused_view_; + if (focused_view_) + focused_view_->WillLoseFocus(); - if (prev_focused_view) - prev_focused_view->SchedulePaint(); // Remove focus artifacts. + if (view) + view->WillGainFocus(); - if (view) { - view->SchedulePaint(); - view->Focus(); - view->DidGainFocus(); - } + // Notified listeners that the focus changed. + FocusChangeListenerList::const_iterator iter; + for (iter = focus_change_listeners_.begin(); + iter != focus_change_listeners_.end(); ++iter) { + (*iter)->FocusWillChange(prev_focused_view, view); + } + + focused_view_ = view; + + if (prev_focused_view) + prev_focused_view->SchedulePaint(); // Remove focus artifacts. + + if (view) { + view->SchedulePaint(); + view->Focus(); + view->DidGainFocus(); } } |