| Index: ash/system/status_area_widget.cc
|
| diff --git a/ash/system/status_area_widget.cc b/ash/system/status_area_widget.cc
|
| index 32f48719b7e966a614a74f108e7f776842726d0d..3da3a529427d7ba23ac03fecf15b3e9f605f234e 100644
|
| --- a/ash/system/status_area_widget.cc
|
| +++ b/ash/system/status_area_widget.cc
|
| @@ -15,9 +15,11 @@
|
| #include "ash/system/tray/system_tray_delegate.h"
|
| #include "ash/system/web_notification/web_notification_tray.h"
|
| #include "ash/volume_control_delegate.h"
|
| +#include "ash/wm/shelf_layout_manager.h"
|
| #include "base/i18n/time_formatting.h"
|
| #include "base/utf_string_conversions.h"
|
| #include "ui/aura/window.h"
|
| +#include "ui/gfx/screen.h"
|
|
|
| namespace ash {
|
|
|
| @@ -304,7 +306,8 @@ StatusAreaWidget::StatusAreaWidget()
|
| : status_area_widget_delegate_(new internal::StatusAreaWidgetDelegate),
|
| system_tray_(NULL),
|
| web_notification_tray_(NULL),
|
| - login_status_(user::LOGGED_IN_NONE) {
|
| + login_status_(user::LOGGED_IN_NONE),
|
| + should_show_launcher_(false) {
|
| views::Widget::InitParams params(
|
| views::Widget::InitParams::TYPE_WINDOW_FRAMELESS);
|
| params.delegate = status_area_widget_delegate_;
|
| @@ -322,11 +325,14 @@ StatusAreaWidget::~StatusAreaWidget() {
|
| }
|
|
|
| void StatusAreaWidget::CreateTrayViews(ShellDelegate* shell_delegate) {
|
| - AddWebNotificationTray();
|
| AddSystemTray(shell_delegate);
|
| - // SetBorder() must be called after all trays have been created.
|
| - web_notification_tray_->SetBorder();
|
| - system_tray_->SetBorder();
|
| + AddWebNotificationTray();
|
| + // Initialize() must be called after all trays have been created.
|
| + if (system_tray_)
|
| + system_tray_->Initialize();
|
| + if (web_notification_tray_)
|
| + web_notification_tray_->Initialize();
|
| + UpdateAfterLoginStatusChange(system_tray_delegate_->GetUserLoginStatus());
|
| }
|
|
|
| void StatusAreaWidget::Shutdown() {
|
| @@ -343,7 +349,6 @@ void StatusAreaWidget::Shutdown() {
|
| void StatusAreaWidget::AddSystemTray(ShellDelegate* shell_delegate) {
|
| system_tray_ = new SystemTray(this);
|
| status_area_widget_delegate_->AddTray(system_tray_);
|
| - system_tray_->Initialize(); // Called after added to widget.
|
|
|
| if (shell_delegate) {
|
| system_tray_delegate_.reset(
|
| @@ -351,9 +356,6 @@ void StatusAreaWidget::AddSystemTray(ShellDelegate* shell_delegate) {
|
| }
|
| if (!system_tray_delegate_.get())
|
| system_tray_delegate_.reset(new DummySystemTrayDelegate());
|
| -
|
| - system_tray_->CreateItems(); // Called after delegate is created.
|
| - UpdateAfterLoginStatusChange(system_tray_delegate_->GetUserLoginStatus());
|
| }
|
|
|
| void StatusAreaWidget::AddWebNotificationTray() {
|
| @@ -404,5 +406,26 @@ void StatusAreaWidget::UpdateAfterLoginStatusChange(
|
| web_notification_tray_->UpdateAfterLoginStatusChange(login_status);
|
| }
|
|
|
| +void StatusAreaWidget::UpdateShouldShowLauncher() {
|
| + bool should_show_launcher =
|
| + (system_tray_ && system_tray_->IsSystemBubbleVisible()) ||
|
| + (web_notification_tray_ &&
|
| + web_notification_tray_->IsMessageCenterBubbleVisible());
|
| + if (!should_show_launcher && Shell::GetInstance()->shelf()->IsVisible()) {
|
| + // If the launcher is currently visible, don't hide the launcher
|
| + // if the mouse is in this widget or in any notification bubbles.
|
| + should_show_launcher =
|
| + (GetWindowBoundsInScreen().Contains(
|
| + gfx::Screen::GetCursorScreenPoint())) ||
|
| + (system_tray_ && system_tray_->IsMouseInNotificationBubble()) ||
|
| + (web_notification_tray_ &&
|
| + web_notification_tray_->IsMouseInNotificationBubble());
|
| + }
|
| + if (should_show_launcher != should_show_launcher_) {
|
| + should_show_launcher_ = should_show_launcher;
|
| + Shell::GetInstance()->shelf()->UpdateAutoHideState();
|
| + }
|
| +}
|
| +
|
| } // namespace internal
|
| } // namespace ash
|
|
|