diff options
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(); } } |