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 bd05be2c88a22bb2d04915b9dbe1a15a1055a95c..3528612778ee3a6044eb46ee0dc2a74f9fca15ab 100644 |
--- a/ash/system/date/date_default_view.cc |
+++ b/ash/system/date/date_default_view.cc |
@@ -12,6 +12,7 @@ |
#include "ash/system/tray/system_tray_delegate.h" |
#include "ash/system/tray/tray_constants.h" |
#include "ash/system/tray/tray_popup_header_button.h" |
+#include "base/bind.h" |
#include "grit/ash_resources.h" |
#include "grit/ash_strings.h" |
#include "ui/base/l10n/l10n_util.h" |
@@ -30,9 +31,11 @@ namespace ash { |
DateDefaultView::DateDefaultView(ash::user::LoginStatus login) |
: help_(NULL), |
+ reboot_(NULL), |
shutdown_(NULL), |
lock_(NULL), |
- date_view_(NULL) { |
+ date_view_(NULL), |
+ weak_factory_(this) { |
SetLayoutManager(new views::FillLayout); |
date_view_ = new tray::DateView(); |
@@ -73,6 +76,15 @@ DateDefaultView::DateDefaultView(ash::user::LoginStatus login) |
shutdown_->SetTooltipText( |
l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_SHUTDOWN)); |
view->AddButton(shutdown_); |
+ |
+ reboot_ = 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_REBOOT); |
+ reboot_->SetTooltipText( |
+ l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_REBOOT)); |
+ reboot_->SetVisible(false); |
+ view->AddButton(reboot_); |
stevenjb
2014/12/17 19:09:02
Rather than having two separate buttons and the UI
cschuet (SLOW)
2015/01/07 14:37:07
Done.
|
} |
if (ash::Shell::GetInstance()->session_state_delegate()->CanLockScreen()) { |
@@ -85,10 +97,28 @@ DateDefaultView::DateDefaultView(ash::user::LoginStatus login) |
lock_->SetTooltipText(l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_LOCK)); |
view->AddButton(lock_); |
} |
+ SystemTrayDelegate* systemTrayDelegate = |
stevenjb
2014/12/17 19:09:02
system_tray_delegate
cschuet (SLOW)
2015/01/07 14:37:07
Done.
|
+ Shell::GetInstance()->system_tray_delegate(); |
+ systemTrayDelegate->AddShutdownPolicyObserver(this); |
+ systemTrayDelegate->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::GetShutdownButtonView() { |
+ return shutdown_; |
+} |
+ |
+views::View* DateDefaultView::GetRebootButtonView() { |
+ return reboot_; |
} |
views::View* DateDefaultView::GetHelpButtonView() { |
@@ -110,6 +140,8 @@ void DateDefaultView::ButtonPressed(views::Button* sender, |
if (sender == help_) { |
shell->metrics()->RecordUserMetricsAction(ash::UMA_TRAY_HELP); |
tray_delegate->ShowHelp(); |
+ } else if (sender == reboot_) { |
Daniel Erat
2014/12/17 16:21:04
you should probably add a metric for this to match
cschuet (SLOW)
2015/01/07 14:37:07
I have followed stevenjb's suggestion and there is
|
+ tray_delegate->Restart(); |
} else if (sender == shutdown_) { |
shell->metrics()->RecordUserMetricsAction(ash::UMA_TRAY_SHUT_DOWN); |
tray_delegate->ShutDown(); |
@@ -121,4 +153,9 @@ void DateDefaultView::ButtonPressed(views::Button* sender, |
} |
} |
+void DateDefaultView::OnShutdownPolicyChanged(bool reboot_on_shutdown) { |
+ shutdown_->SetVisible(!reboot_on_shutdown); |
+ reboot_->SetVisible(reboot_on_shutdown); |
+} |
+ |
} // namespace ash |