Chromium Code Reviews| Index: chrome/browser/chromeos/status/status_area_view.cc |
| =================================================================== |
| --- chrome/browser/chromeos/status/status_area_view.cc (revision 106989) |
| +++ chrome/browser/chromeos/status/status_area_view.cc (working copy) |
| @@ -41,8 +41,7 @@ |
| memory_view_(NULL), |
| network_view_(NULL), |
| power_view_(NULL), |
| - need_return_focus_(false), |
| - ALLOW_THIS_IN_INITIALIZER_LIST(task_factory_(this)) { |
| + need_return_focus_(false) { |
| } |
| StatusAreaView::~StatusAreaView() { |
| @@ -138,9 +137,8 @@ |
| PreferredSizeChanged(); |
| } |
| -void StatusAreaView::TakeFocus( |
| - bool reverse, |
| - const base::Callback<void(bool)>& return_focus_cb) { |
| +void StatusAreaView::TakeFocus(bool reverse, |
| + const ReturnFocusCallback& return_focus_cb) { |
|
satorux1
2011/10/25 01:08:16
nit: indentation for parameters should be vertical
achuithb
2011/10/25 08:49:09
Done.
|
| // Emulates focus receive by AccessiblePaneView::SetPaneFocus. |
| if (!focus_manager_) |
| focus_manager_ = GetFocusManager(); |
| @@ -172,16 +170,12 @@ |
| if (need_return_focus_) { |
| const views::View* first = GetFirstFocusableChild(); |
| const views::View* last = GetLastFocusableChild(); |
| + const bool first_to_last = (focused_before == first && focused_now == last); |
| + const bool last_to_first = (focused_now == first && focused_before == last); |
| - if (focused_before == first && focused_now == last) { |
| - MessageLoop::current()->PostTask( |
| - FROM_HERE, |
| - task_factory_.NewRunnableMethod(&StatusAreaView::ReturnFocus, true)); |
| - } else if (focused_now == first && focused_before == last) { |
| - MessageLoop::current()->PostTask( |
| - FROM_HERE, |
| - task_factory_.NewRunnableMethod(&StatusAreaView::ReturnFocus, false)); |
| - } |
| + if (first_to_last || last_to_first) |
| + MessageLoop::current()->PostTask(FROM_HERE, |
| + base::Bind(&StatusAreaView::ReturnFocus, AsWeakPtr(), first_to_last)); |
| } |
| } |