Commit 6fada7eb authored by achuith@chromium.org's avatar achuith@chromium.org

Use Closure instead of ScopedRunnableFactory in StatusAreaView.

BUG=chromium-os:22024
TEST=tests pass.
Review URL: http://codereview.chromium.org/8332016

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@107081 0039d316-1c4b-4281-b951-d872f2087c98
parent 7f1c96b5
......@@ -41,8 +41,7 @@ StatusAreaView::StatusAreaView(StatusAreaHost* host)
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() {
......@@ -140,7 +139,7 @@ void StatusAreaView::ButtonVisibilityChanged(views::View* button_view) {
void StatusAreaView::TakeFocus(
bool reverse,
const base::Callback<void(bool)>& return_focus_cb) {
const ReturnFocusCallback& return_focus_cb) {
// Emulates focus receive by AccessiblePaneView::SetPaneFocus.
if (!focus_manager_)
focus_manager_ = GetFocusManager();
......@@ -172,16 +171,12 @@ void StatusAreaView::FocusWillChange(views::View* focused_before,
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));
}
}
......
......@@ -8,7 +8,6 @@
#include "base/basictypes.h"
#include "base/callback.h"
#include "base/task.h"
#include "chrome/browser/ui/views/accessible_pane_view.h"
#include "views/view.h"
......@@ -25,7 +24,8 @@ class StatusAreaHost;
// This class is used to wrap the small informative widgets in the upper-right
// of the window title bar. It is used on ChromeOS only.
class StatusAreaView : public AccessiblePaneView {
class StatusAreaView : public AccessiblePaneView,
public base::SupportsWeakPtr<StatusAreaView> {
public:
explicit StatusAreaView(StatusAreaHost* host);
virtual ~StatusAreaView();
......@@ -37,8 +37,9 @@ class StatusAreaView : public AccessiblePaneView {
// Takes focus and transfers it to the first (last if |reverse| is true).
// After focus has traversed through all elements, clears focus and calls
// |return_focus_cb(reverse)| from the message loop.
typedef base::Callback<void(bool)> ReturnFocusCallback;
void TakeFocus(bool reverse,
const base::Callback<void(bool)>& return_focus_cb);
const ReturnFocusCallback& return_focus_cb);
// Overridden from views::FocusChangeListener:
virtual void FocusWillChange(views::View* focused_before,
......@@ -69,8 +70,7 @@ class StatusAreaView : public AccessiblePaneView {
// True if focus needs to be returned via |return_focus_cb_| when it wraps.
bool need_return_focus_;
base::Callback<void(bool)> return_focus_cb_;
ScopedRunnableMethodFactory<StatusAreaView> task_factory_;
ReturnFocusCallback return_focus_cb_;
// Clears focus and calls |return_focus_cb_|.
void ReturnFocus(bool reverse);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment