Index: ash/system/overview/overview_button_tray.cc |
diff --git a/ash/system/overview/overview_button_tray.cc b/ash/system/overview/overview_button_tray.cc |
index edd5d67dd0697dd2598133cc5289d83e7511831f..f5295b52fd04bddb003cc8c118ee915b54c82f71 100644 |
--- a/ash/system/overview/overview_button_tray.cc |
+++ b/ash/system/overview/overview_button_tray.cc |
@@ -4,6 +4,7 @@ |
#include "ash/system/overview/overview_button_tray.h" |
+#include "ash/session/session_state_delegate.h" |
#include "ash/shelf/shelf_types.h" |
#include "ash/shell.h" |
#include "ash/system/tray/system_tray_delegate.h" |
@@ -42,10 +43,13 @@ OverviewButtonTray::OverviewButtonTray(StatusAreaWidget* status_area_widget) |
tray_container()->AddChildView(icon_); |
Shell::GetInstance()->AddShellObserver(this); |
+ Shell::GetInstance()->session_state_delegate()->AddSessionStateObserver(this); |
} |
OverviewButtonTray::~OverviewButtonTray() { |
Shell::GetInstance()->RemoveShellObserver(this); |
+ Shell::GetInstance()->session_state_delegate()->RemoveSessionStateObserver( |
+ this); |
} |
void OverviewButtonTray::UpdateAfterLoginStatusChange( |
@@ -62,6 +66,11 @@ bool OverviewButtonTray::PerformAction(const ui::Event& event) { |
return true; |
} |
+void OverviewButtonTray::SessionStateChanged( |
+ SessionStateDelegate::SessionState state) { |
+ UpdateIconVisibility(); |
+} |
+ |
void OverviewButtonTray::OnMaximizeModeStarted() { |
UpdateIconVisibility(); |
} |
@@ -115,9 +124,22 @@ void OverviewButtonTray::SetIconBorderForShelfAlignment() { |
} |
void OverviewButtonTray::UpdateIconVisibility() { |
- SetVisible(Shell::GetInstance()->maximize_mode_controller()-> |
- IsMaximizeModeWindowManagerEnabled() && |
- Shell::GetInstance()->window_selector_controller()->CanSelect()); |
+ // The visibility of the OverviewButtonTray has diverge from |
+ // WindowSelectorController::CanSelect. The visibility of the button should |
+ // not change during transient times in which CanSelect is false. Such as when |
+ // a modal dialog is present. |
+ Shell* shell = Shell::GetInstance(); |
+ SessionStateDelegate* session_state_delegate = |
+ shell->session_state_delegate(); |
+ |
+ SetVisible( |
+ shell->maximize_mode_controller()->IsMaximizeModeWindowManagerEnabled() && |
+ session_state_delegate->IsActiveUserSessionStarted() && |
+ !session_state_delegate->IsScreenLocked() && |
+ session_state_delegate->GetSessionState() == |
+ SessionStateDelegate::SESSION_STATE_ACTIVE && |
sadrul
2015/06/03 19:08:36
This ... is a bit complex. Can this be made better
jonross
2015/06/04 17:38:22
The "Active Session" term has become a bit overloa
jonross
2015/06/04 17:55:54
Filed crbug.com/496761 to cover a refactor of Sess
|
+ shell->system_tray_delegate()->GetUserLoginStatus() != |
+ user::LOGGED_IN_KIOSK_APP); |
} |
} // namespace ash |