Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ash/system/status_area_widget.h" | 5 #include "ash/system/status_area_widget.h" |
| 6 | 6 |
| 7 #include "ash/shell.h" | 7 #include "ash/shell.h" |
| 8 #include "ash/shell_delegate.h" | 8 #include "ash/shell_delegate.h" |
| 9 #include "ash/shell_window_ids.h" | 9 #include "ash/shell_window_ids.h" |
| 10 #include "ash/system/bluetooth/bluetooth_observer.h" | 10 #include "ash/system/bluetooth/bluetooth_observer.h" |
| 11 #include "ash/system/network/network_observer.h" | 11 #include "ash/system/network/network_observer.h" |
| 12 #include "ash/system/status_area_widget_delegate.h" | 12 #include "ash/system/status_area_widget_delegate.h" |
| 13 #include "ash/system/tray/system_tray.h" | 13 #include "ash/system/tray/system_tray.h" |
| 14 #include "ash/system/tray/system_tray_delegate.h" | 14 #include "ash/system/tray/system_tray_delegate.h" |
| 15 #include "ash/system/web_notification/web_notification_tray.h" | |
| 15 #include "base/i18n/time_formatting.h" | 16 #include "base/i18n/time_formatting.h" |
| 16 #include "base/utf_string_conversions.h" | 17 #include "base/utf_string_conversions.h" |
| 17 #include "ui/aura/window.h" | 18 #include "ui/aura/window.h" |
| 18 | 19 |
| 19 namespace ash { | 20 namespace ash { |
| 20 | 21 |
| 21 namespace { | 22 namespace { |
| 22 | 23 |
| 23 class DummySystemTrayDelegate : public SystemTrayDelegate { | 24 class DummySystemTrayDelegate : public SystemTrayDelegate { |
| 24 public: | 25 public: |
| (...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 274 | 275 |
| 275 DISALLOW_COPY_AND_ASSIGN(DummySystemTrayDelegate); | 276 DISALLOW_COPY_AND_ASSIGN(DummySystemTrayDelegate); |
| 276 }; | 277 }; |
| 277 | 278 |
| 278 } // namespace | 279 } // namespace |
| 279 | 280 |
| 280 namespace internal { | 281 namespace internal { |
| 281 | 282 |
| 282 StatusAreaWidget::StatusAreaWidget() | 283 StatusAreaWidget::StatusAreaWidget() |
| 283 : widget_delegate_(new internal::StatusAreaWidgetDelegate), | 284 : widget_delegate_(new internal::StatusAreaWidgetDelegate), |
| 284 system_tray_(NULL) { | 285 system_tray_(NULL), |
| 286 web_notification_tray_(NULL) { | |
| 285 views::Widget::InitParams params( | 287 views::Widget::InitParams params( |
| 286 views::Widget::InitParams::TYPE_WINDOW_FRAMELESS); | 288 views::Widget::InitParams::TYPE_WINDOW_FRAMELESS); |
| 287 params.delegate = widget_delegate_; | 289 params.delegate = widget_delegate_; |
| 288 params.parent = Shell::GetContainer( | 290 params.parent = Shell::GetContainer( |
| 289 Shell::GetPrimaryRootWindow(), | 291 Shell::GetPrimaryRootWindow(), |
| 290 ash::internal::kShellWindowId_StatusContainer); | 292 ash::internal::kShellWindowId_StatusContainer); |
| 291 params.transparent = true; | 293 params.transparent = true; |
| 292 Init(params); | 294 Init(params); |
| 293 set_focus_on_creation(false); | 295 set_focus_on_creation(false); |
| 294 SetContentsView(widget_delegate_); | 296 SetContentsView(widget_delegate_); |
| 295 GetNativeView()->SetName("StatusAreaWidget"); | 297 GetNativeView()->SetName("StatusAreaWidget"); |
| 296 } | 298 } |
| 297 | 299 |
| 298 StatusAreaWidget::~StatusAreaWidget() { | 300 StatusAreaWidget::~StatusAreaWidget() { |
| 299 } | 301 } |
| 300 | 302 |
| 301 void StatusAreaWidget::CreateTrayViews(ShellDelegate* shell_delegate) { | 303 void StatusAreaWidget::CreateTrayViews(ShellDelegate* shell_delegate) { |
| 304 AddWebNotificationTray(new WebNotificationTray(this)); | |
| 302 AddSystemTray(new SystemTray(), shell_delegate); | 305 AddSystemTray(new SystemTray(), shell_delegate); |
| 303 } | 306 } |
| 304 | 307 |
| 305 void StatusAreaWidget::Shutdown() { | 308 void StatusAreaWidget::Shutdown() { |
| 306 // Destroy the trays early, causing them to be removed from the view | 309 // Destroy the trays early, causing them to be removed from the view |
| 307 // hierarchy. Do not used scoped pointers since we don't want to destroy them | 310 // hierarchy. Do not used scoped pointers since we don't want to destroy them |
| 308 // in the destructor if Shutdown() is not called (e.g. in tests). | 311 // in the destructor if Shutdown() is not called (e.g. in tests). |
| 309 delete system_tray_; | 312 delete system_tray_; |
| 310 system_tray_ = NULL; | 313 system_tray_ = NULL; |
| 314 delete web_notification_tray_; | |
| 315 web_notification_tray_ = NULL; | |
| 311 } | 316 } |
| 312 | 317 |
| 313 void StatusAreaWidget::AddSystemTray(SystemTray* system_tray, | 318 void StatusAreaWidget::AddSystemTray(SystemTray* system_tray, |
| 314 ShellDelegate* shell_delegate) { | 319 ShellDelegate* shell_delegate) { |
| 315 system_tray_ = system_tray; | 320 system_tray_ = system_tray; |
| 316 widget_delegate_->AddTray(system_tray); | 321 widget_delegate_->AddTray(system_tray); |
| 317 system_tray_->Initialize(); // Called after added to widget. | 322 system_tray_->Initialize(); // Called after added to widget. |
| 318 | 323 |
| 319 if (shell_delegate) { | 324 if (shell_delegate) { |
| 320 system_tray_delegate_.reset( | 325 system_tray_delegate_.reset( |
| 321 shell_delegate->CreateSystemTrayDelegate(system_tray)); | 326 shell_delegate->CreateSystemTrayDelegate(system_tray)); |
| 322 } | 327 } |
| 323 if (!system_tray_delegate_.get()) | 328 if (!system_tray_delegate_.get()) |
| 324 system_tray_delegate_.reset(new DummySystemTrayDelegate()); | 329 system_tray_delegate_.reset(new DummySystemTrayDelegate()); |
| 325 | 330 |
| 326 system_tray->CreateItems(); // Called after delegate is created. | 331 system_tray->CreateItems(); // Called after delegate is created. |
| 327 } | 332 } |
| 328 | 333 |
| 334 void StatusAreaWidget::AddWebNotificationTray( | |
| 335 WebNotificationTray* web_notification_tray) { | |
| 336 web_notification_tray_ = web_notification_tray; | |
| 337 widget_delegate_->AddTray(web_notification_tray); | |
| 338 } | |
| 339 | |
| 329 void StatusAreaWidget::SetShelfAlignment(ShelfAlignment alignment) { | 340 void StatusAreaWidget::SetShelfAlignment(ShelfAlignment alignment) { |
| 330 widget_delegate_->set_alignment(alignment); | 341 widget_delegate_->set_alignment(alignment); |
| 331 widget_delegate_->UpdateLayout(); | 342 widget_delegate_->UpdateLayout(); |
| 343 if (system_tray_) | |
| 344 system_tray_->SetShelfAlignment(alignment); | |
| 345 if (web_notification_tray_) | |
| 346 web_notification_tray_->SetShelfAlignment(alignment); | |
| 347 } | |
| 348 | |
| 349 void StatusAreaWidget::SetPaintsBackground( | |
| 350 bool value, | |
|
sadrul
2012/06/13 16:37:56
less indentation
stevenjb
2012/06/13 19:05:02
Done.
| |
| 351 internal::BackgroundAnimator::ChangeType change_type) { | |
| 352 if (system_tray_) | |
| 353 system_tray_->SetPaintsBackground(value, change_type); | |
| 354 if (web_notification_tray_) | |
| 355 web_notification_tray_->SetPaintsBackground(value, change_type); | |
| 356 } | |
| 357 | |
| 358 void StatusAreaWidget::ShowWebNotificationBubble(UserAction user_action) { | |
| 359 // If not triggered by a user action, only show the web notification bubble | |
| 360 // if the system tray is not visible. | |
| 361 if (user_action == USER_ACTION && | |
| 362 system_tray_ && system_tray_->IsBubbleVisible()) { | |
| 363 return; | |
| 364 } | |
| 365 DCHECK(web_notification_tray_); | |
| 366 web_notification_tray_->ShowBubble(); | |
| 367 // Disable showing system notifications while viewing web notifications. | |
| 368 if (system_tray_) | |
| 369 system_tray_->SetHideNotifications(true); | |
|
sadrul
2012/06/13 16:37:56
Just to clarify: with this change, both the system
stevenjb
2012/06/13 19:05:02
No, only one should be visible at a time, but that
| |
| 370 } | |
| 371 | |
| 372 void StatusAreaWidget::HideWebNotificationBubble() { | |
| 373 DCHECK(web_notification_tray_); | |
| 374 web_notification_tray_->HideBubble(); | |
| 375 // Show any hidden or suppressed system notifications. | |
| 376 if (system_tray_) | |
| 377 system_tray_->SetHideNotifications(false); | |
| 332 } | 378 } |
| 333 | 379 |
| 334 } // namespace internal | 380 } // namespace internal |
| 335 } // namespace ash | 381 } // namespace ash |
| OLD | NEW |