Index: ash/system/date/date_default_view.cc |
diff --git a/ash/system/date/date_default_view.cc b/ash/system/date/date_default_view.cc |
index 44cb9978d5b595c884bc18c87cb4292b7f1dac60..aa86cc8f8d55163e3b1737df59a623224fa69cbd 100644 |
--- a/ash/system/date/date_default_view.cc |
+++ b/ash/system/date/date_default_view.cc |
@@ -30,10 +30,11 @@ const int kPaddingVertical = 19; |
namespace ash { |
DateDefaultView::DateDefaultView(ash::user::LoginStatus login) |
- : help_(NULL), |
- shutdown_(NULL), |
- lock_(NULL), |
- date_view_(NULL) { |
+ : help_button_(NULL), |
+ shutdown_button_(NULL), |
+ lock_button_(NULL), |
+ date_view_(NULL), |
+ weak_factory_(this) { |
SetLayoutManager(new views::FillLayout); |
date_view_ = new tray::DateView(); |
@@ -53,46 +54,52 @@ DateDefaultView::DateDefaultView(ash::user::LoginStatus login) |
date_view_->SetAction(TrayDate::SHOW_DATE_SETTINGS); |
- help_ = new TrayPopupHeaderButton(this, |
- IDR_AURA_UBER_TRAY_HELP, |
- IDR_AURA_UBER_TRAY_HELP, |
- IDR_AURA_UBER_TRAY_HELP_HOVER, |
- IDR_AURA_UBER_TRAY_HELP_HOVER, |
- IDS_ASH_STATUS_TRAY_HELP); |
- help_->SetTooltipText(l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_HELP)); |
- view->AddButton(help_); |
+ help_button_ = new TrayPopupHeaderButton( |
+ this, IDR_AURA_UBER_TRAY_HELP, IDR_AURA_UBER_TRAY_HELP, |
+ IDR_AURA_UBER_TRAY_HELP_HOVER, IDR_AURA_UBER_TRAY_HELP_HOVER, |
+ IDS_ASH_STATUS_TRAY_HELP); |
+ help_button_->SetTooltipText( |
+ l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_HELP)); |
+ view->AddButton(help_button_); |
#if !defined(OS_WIN) |
if (login != ash::user::LOGGED_IN_LOCKED) { |
- shutdown_ = new TrayPopupHeaderButton(this, |
- IDR_AURA_UBER_TRAY_SHUTDOWN, |
- IDR_AURA_UBER_TRAY_SHUTDOWN, |
- IDR_AURA_UBER_TRAY_SHUTDOWN_HOVER, |
- IDR_AURA_UBER_TRAY_SHUTDOWN_HOVER, |
- IDS_ASH_STATUS_TRAY_SHUTDOWN); |
- shutdown_->SetTooltipText( |
+ shutdown_button_ = new TrayPopupHeaderButton( |
+ this, IDR_AURA_UBER_TRAY_SHUTDOWN, IDR_AURA_UBER_TRAY_SHUTDOWN, |
+ IDR_AURA_UBER_TRAY_SHUTDOWN_HOVER, IDR_AURA_UBER_TRAY_SHUTDOWN_HOVER, |
+ IDS_ASH_STATUS_TRAY_SHUTDOWN); |
+ shutdown_button_->SetTooltipText( |
l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_SHUTDOWN)); |
- view->AddButton(shutdown_); |
+ view->AddButton(shutdown_button_); |
} |
if (ash::Shell::GetInstance()->session_state_delegate()->CanLockScreen()) { |
- lock_ = new TrayPopupHeaderButton(this, |
- IDR_AURA_UBER_TRAY_LOCKSCREEN, |
- IDR_AURA_UBER_TRAY_LOCKSCREEN, |
- IDR_AURA_UBER_TRAY_LOCKSCREEN_HOVER, |
- IDR_AURA_UBER_TRAY_LOCKSCREEN_HOVER, |
- IDS_ASH_STATUS_TRAY_LOCK); |
- lock_->SetTooltipText(l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_LOCK)); |
- view->AddButton(lock_); |
+ lock_button_ = new TrayPopupHeaderButton( |
+ this, IDR_AURA_UBER_TRAY_LOCKSCREEN, IDR_AURA_UBER_TRAY_LOCKSCREEN, |
+ IDR_AURA_UBER_TRAY_LOCKSCREEN_HOVER, |
+ IDR_AURA_UBER_TRAY_LOCKSCREEN_HOVER, IDS_ASH_STATUS_TRAY_LOCK); |
+ lock_button_->SetTooltipText( |
+ l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_LOCK)); |
+ view->AddButton(lock_button_); |
} |
+ SystemTrayDelegate* system_tray_delegate = |
+ Shell::GetInstance()->system_tray_delegate(); |
+ system_tray_delegate->AddShutdownPolicyObserver(this); |
+ system_tray_delegate->ShouldRebootOnShutdown(base::Bind( |
+ &DateDefaultView::OnShutdownPolicyChanged, weak_factory_.GetWeakPtr())); |
#endif // !defined(OS_WIN) |
} |
DateDefaultView::~DateDefaultView() { |
+ // We need the check as on shell destruction, the delegate is destroyed first. |
+ SystemTrayDelegate* system_tray_delegate = |
+ Shell::GetInstance()->system_tray_delegate(); |
+ if (system_tray_delegate) |
+ system_tray_delegate->RemoveShutdownPolicyObserver(this); |
} |
views::View* DateDefaultView::GetHelpButtonView() { |
- return help_; |
+ return help_button_; |
} |
tray::DateView* DateDefaultView::GetDateView() { |
@@ -107,14 +114,13 @@ void DateDefaultView::ButtonPressed(views::Button* sender, |
const ui::Event& event) { |
ash::Shell* shell = ash::Shell::GetInstance(); |
ash::SystemTrayDelegate* tray_delegate = shell->system_tray_delegate(); |
- if (sender == help_) { |
+ if (sender == help_button_) { |
shell->metrics()->RecordUserMetricsAction(ash::UMA_TRAY_HELP); |
tray_delegate->ShowHelp(); |
- } else if (sender == shutdown_) { |
+ } else if (sender == shutdown_button_) { |
shell->metrics()->RecordUserMetricsAction(ash::UMA_TRAY_SHUT_DOWN); |
- ash::Shell::GetInstance()->lock_state_controller()->RequestShutdown( |
- ash::LockStateController::POWER_OFF); |
- } else if (sender == lock_) { |
+ ash::Shell::GetInstance()->lock_state_controller()->RequestShutdown(); |
+ } else if (sender == lock_button_) { |
shell->metrics()->RecordUserMetricsAction(ash::UMA_TRAY_LOCK_SCREEN); |
tray_delegate->RequestLockScreen(); |
} else { |
@@ -122,4 +128,13 @@ void DateDefaultView::ButtonPressed(views::Button* sender, |
} |
} |
+void DateDefaultView::OnShutdownPolicyChanged(bool reboot_on_shutdown) { |
+ if (!shutdown_button_) |
+ return; |
+ |
+ shutdown_button_->SetTooltipText(l10n_util::GetStringUTF16( |
+ reboot_on_shutdown ? IDS_ASH_STATUS_TRAY_REBOOT |
+ : IDS_ASH_STATUS_TRAY_SHUTDOWN)); |
+} |
+ |
} // namespace ash |