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/tray/system_tray.h" | 5 #include "ash/system/tray/system_tray.h" |
| 6 | 6 |
| 7 #include "ash/shell.h" | 7 #include "ash/shell.h" |
| 8 #include "ash/shell/panel_window.h" | 8 #include "ash/shell/panel_window.h" |
| 9 #include "ash/shell_window_ids.h" | 9 #include "ash/shell_window_ids.h" |
| 10 #include "ash/system/audio/tray_volume.h" | 10 #include "ash/system/audio/tray_volume.h" |
| 11 #include "ash/system/bluetooth/tray_bluetooth.h" | 11 #include "ash/system/bluetooth/tray_bluetooth.h" |
| 12 #include "ash/system/brightness/tray_brightness.h" | 12 #include "ash/system/brightness/tray_brightness.h" |
| 13 #include "ash/system/date/tray_date.h" | 13 #include "ash/system/date/tray_date.h" |
| 14 #include "ash/system/drive/tray_drive.h" | 14 #include "ash/system/drive/tray_drive.h" |
| 15 #include "ash/system/ime/tray_ime.h" | 15 #include "ash/system/ime/tray_ime.h" |
| 16 #include "ash/system/network/tray_network.h" | 16 #include "ash/system/network/tray_network.h" |
| 17 #include "ash/system/network/tray_sms.h" | |
| 17 #include "ash/system/power/power_status_observer.h" | 18 #include "ash/system/power/power_status_observer.h" |
| 18 #include "ash/system/power/power_supply_status.h" | 19 #include "ash/system/power/power_supply_status.h" |
| 19 #include "ash/system/power/tray_power.h" | 20 #include "ash/system/power/tray_power.h" |
| 20 #include "ash/system/settings/tray_settings.h" | 21 #include "ash/system/settings/tray_settings.h" |
| 21 #include "ash/system/tray/system_tray_bubble.h" | 22 #include "ash/system/tray/system_tray_bubble.h" |
| 22 #include "ash/system/tray/system_tray_delegate.h" | 23 #include "ash/system/tray/system_tray_delegate.h" |
| 23 #include "ash/system/tray/system_tray_item.h" | 24 #include "ash/system/tray/system_tray_item.h" |
| 24 #include "ash/system/tray/system_tray_widget_delegate.h" | 25 #include "ash/system/tray/system_tray_widget_delegate.h" |
| 25 #include "ash/system/tray/tray_constants.h" | 26 #include "ash/system/tray/tray_constants.h" |
| 26 #include "ash/system/tray_accessibility.h" | 27 #include "ash/system/tray_accessibility.h" |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 165 } | 166 } |
| 166 } | 167 } |
| 167 | 168 |
| 168 void SystemTray::CreateItems() { | 169 void SystemTray::CreateItems() { |
| 169 internal::TrayVolume* tray_volume = new internal::TrayVolume(); | 170 internal::TrayVolume* tray_volume = new internal::TrayVolume(); |
| 170 internal::TrayBluetooth* tray_bluetooth = new internal::TrayBluetooth(); | 171 internal::TrayBluetooth* tray_bluetooth = new internal::TrayBluetooth(); |
| 171 internal::TrayBrightness* tray_brightness = new internal::TrayBrightness(); | 172 internal::TrayBrightness* tray_brightness = new internal::TrayBrightness(); |
| 172 internal::TrayDate* tray_date = new internal::TrayDate(); | 173 internal::TrayDate* tray_date = new internal::TrayDate(); |
| 173 internal::TrayPower* tray_power = new internal::TrayPower(); | 174 internal::TrayPower* tray_power = new internal::TrayPower(); |
| 174 internal::TrayNetwork* tray_network = new internal::TrayNetwork; | 175 internal::TrayNetwork* tray_network = new internal::TrayNetwork; |
| 176 internal::TraySms* tray_sms = new internal::TraySms(); | |
| 175 internal::TrayUser* tray_user = new internal::TrayUser; | 177 internal::TrayUser* tray_user = new internal::TrayUser; |
| 176 internal::TrayAccessibility* tray_accessibility = | 178 internal::TrayAccessibility* tray_accessibility = |
| 177 new internal::TrayAccessibility; | 179 new internal::TrayAccessibility; |
| 178 internal::TrayCapsLock* tray_caps_lock = new internal::TrayCapsLock; | 180 internal::TrayCapsLock* tray_caps_lock = new internal::TrayCapsLock; |
| 179 internal::TrayDrive* tray_drive = new internal::TrayDrive; | 181 internal::TrayDrive* tray_drive = new internal::TrayDrive; |
| 180 internal::TrayIME* tray_ime = new internal::TrayIME; | 182 internal::TrayIME* tray_ime = new internal::TrayIME; |
| 181 internal::TrayUpdate* tray_update = new internal::TrayUpdate; | 183 internal::TrayUpdate* tray_update = new internal::TrayUpdate; |
| 182 | 184 |
| 183 accessibility_observer_ = tray_accessibility; | 185 accessibility_observer_ = tray_accessibility; |
| 184 audio_observer_ = tray_volume; | 186 audio_observer_ = tray_volume; |
| 185 bluetooth_observer_ = tray_bluetooth; | 187 bluetooth_observer_ = tray_bluetooth; |
| 186 brightness_observer_ = tray_brightness; | 188 brightness_observer_ = tray_brightness; |
| 187 caps_lock_observer_ = tray_caps_lock; | 189 caps_lock_observer_ = tray_caps_lock; |
| 188 clock_observer_ = tray_date; | 190 clock_observer_ = tray_date; |
| 189 drive_observer_ = tray_drive; | 191 drive_observer_ = tray_drive; |
| 190 ime_observer_ = tray_ime; | 192 ime_observer_ = tray_ime; |
| 191 network_observer_ = tray_network; | 193 network_observer_ = tray_network; |
| 192 power_status_observer_ = tray_power; | 194 power_status_observer_ = tray_power; |
| 193 update_observer_ = tray_update; | 195 update_observer_ = tray_update; |
| 194 user_observer_ = tray_user; | 196 user_observer_ = tray_user; |
| 195 | 197 |
| 196 AddTrayItem(tray_user); | 198 AddTrayItem(tray_user); |
| 197 AddTrayItem(tray_power); | 199 AddTrayItem(tray_power); |
| 198 AddTrayItem(tray_network); | 200 AddTrayItem(tray_network); |
| 199 AddTrayItem(tray_bluetooth); | 201 AddTrayItem(tray_bluetooth); |
| 202 AddTrayItem(tray_sms); | |
| 200 AddTrayItem(tray_drive); | 203 AddTrayItem(tray_drive); |
| 201 AddTrayItem(tray_ime); | 204 AddTrayItem(tray_ime); |
| 202 AddTrayItem(tray_volume); | 205 AddTrayItem(tray_volume); |
| 203 AddTrayItem(tray_brightness); | 206 AddTrayItem(tray_brightness); |
| 204 AddTrayItem(tray_update); | 207 AddTrayItem(tray_update); |
| 205 AddTrayItem(tray_accessibility); | 208 AddTrayItem(tray_accessibility); |
| 206 AddTrayItem(tray_caps_lock); | 209 AddTrayItem(tray_caps_lock); |
| 207 AddTrayItem(new internal::TraySettings()); | 210 AddTrayItem(new internal::TraySettings()); |
| 208 AddTrayItem(tray_date); | 211 AddTrayItem(tray_date); |
| 209 SetVisible(ash::Shell::GetInstance()->tray_delegate()-> | 212 SetVisible(ash::Shell::GetInstance()->tray_delegate()-> |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 256 | 259 |
| 257 void SystemTray::ShowDetailedView(SystemTrayItem* item, | 260 void SystemTray::ShowDetailedView(SystemTrayItem* item, |
| 258 int close_delay, | 261 int close_delay, |
| 259 bool activate) { | 262 bool activate) { |
| 260 std::vector<SystemTrayItem*> items; | 263 std::vector<SystemTrayItem*> items; |
| 261 items.push_back(item); | 264 items.push_back(item); |
| 262 ShowItems(items, true, activate); | 265 ShowItems(items, true, activate); |
| 263 bubble_->StartAutoCloseTimer(close_delay); | 266 bubble_->StartAutoCloseTimer(close_delay); |
| 264 } | 267 } |
| 265 | 268 |
| 269 void SystemTray::SetDetailedViewCloseDelay(int close_delay) { | |
| 270 if (bubble_.get() && | |
| 271 bubble_->bubble_type() == SystemTrayBubble::BUBBLE_TYPE_DETAILED) | |
| 272 bubble_->StartAutoCloseTimer(close_delay); | |
| 273 } | |
|
stevenjb
2012/05/15 02:57:16
Moved from below.
| |
| 274 | |
| 275 void SystemTray::HideDetailedView(SystemTrayItem* item) { | |
| 276 if (item == detailed_item_) { | |
| 277 bubble_.reset(); | |
| 278 UpdateNotificationBubble(); | |
| 279 } | |
| 280 } | |
| 281 | |
| 266 void SystemTray::ShowNotificationView(SystemTrayItem* item) { | 282 void SystemTray::ShowNotificationView(SystemTrayItem* item) { |
| 267 if (std::find(notification_items_.begin(), notification_items_.end(), item) | 283 if (std::find(notification_items_.begin(), notification_items_.end(), item) |
| 268 != notification_items_.end()) | 284 != notification_items_.end()) |
| 269 return; | 285 return; |
| 270 notification_items_.push_back(item); | 286 notification_items_.push_back(item); |
| 271 UpdateNotificationBubble(); | 287 UpdateNotificationBubble(); |
| 272 } | 288 } |
| 273 | 289 |
| 274 void SystemTray::HideNotificationView(SystemTrayItem* item) { | 290 void SystemTray::HideNotificationView(SystemTrayItem* item) { |
| 275 std::vector<SystemTrayItem*>::iterator found_iter = | 291 std::vector<SystemTrayItem*>::iterator found_iter = |
| 276 std::find(notification_items_.begin(), notification_items_.end(), item); | 292 std::find(notification_items_.begin(), notification_items_.end(), item); |
| 277 if (found_iter == notification_items_.end()) | 293 if (found_iter == notification_items_.end()) |
| 278 return; | 294 return; |
| 279 notification_items_.erase(found_iter); | 295 notification_items_.erase(found_iter); |
| 280 UpdateNotificationBubble(); | 296 // Only update the notification bubble if visible (i.e. don't create one). |
| 281 } | 297 if (notification_bubble_.get()) |
| 282 | 298 UpdateNotificationBubble(); |
| 283 void SystemTray::SetDetailedViewCloseDelay(int close_delay) { | |
| 284 if (bubble_.get() && | |
| 285 bubble_->bubble_type() == SystemTrayBubble::BUBBLE_TYPE_DETAILED) | |
| 286 bubble_->StartAutoCloseTimer(close_delay); | |
| 287 } | 299 } |
| 288 | 300 |
| 289 void SystemTray::UpdateAfterLoginStatusChange(user::LoginStatus login_status) { | 301 void SystemTray::UpdateAfterLoginStatusChange(user::LoginStatus login_status) { |
| 290 bubble_.reset(); | 302 bubble_.reset(); |
| 291 | 303 |
| 292 for (std::vector<SystemTrayItem*>::iterator it = items_.begin(); | 304 for (std::vector<SystemTrayItem*>::iterator it = items_.begin(); |
| 293 it != items_.end(); | 305 it != items_.end(); |
| 294 ++it) { | 306 ++it) { |
| 295 (*it)->UpdateAfterLoginStatusChange(login_status); | 307 (*it)->UpdateAfterLoginStatusChange(login_status); |
| 296 } | 308 } |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 335 } | 347 } |
| 336 | 348 |
| 337 void SystemTray::ShowItems(const std::vector<SystemTrayItem*>& items, | 349 void SystemTray::ShowItems(const std::vector<SystemTrayItem*>& items, |
| 338 bool detailed, | 350 bool detailed, |
| 339 bool can_activate) { | 351 bool can_activate) { |
| 340 // Destroy any existing bubble and create a new one. | 352 // Destroy any existing bubble and create a new one. |
| 341 SystemTrayBubble::BubbleType bubble_type = detailed ? | 353 SystemTrayBubble::BubbleType bubble_type = detailed ? |
| 342 SystemTrayBubble::BUBBLE_TYPE_DETAILED : | 354 SystemTrayBubble::BUBBLE_TYPE_DETAILED : |
| 343 SystemTrayBubble::BUBBLE_TYPE_DEFAULT; | 355 SystemTrayBubble::BUBBLE_TYPE_DEFAULT; |
| 344 bubble_.reset(new SystemTrayBubble(this, items, bubble_type)); | 356 bubble_.reset(new SystemTrayBubble(this, items, bubble_type)); |
| 357 | |
| 358 if (detailed && items.size() > 0) | |
| 359 detailed_item_ = items[0]; | |
| 360 else | |
| 361 detailed_item_ = NULL; | |
| 362 | |
| 363 // Destroy the notification bubble here so that it doesn't get rebuilt | |
| 364 // while we add items to the main bubble_ (e.g. in HideNotificationView). | |
| 365 notification_bubble_.reset(); | |
| 366 | |
| 345 ash::SystemTrayDelegate* delegate = | 367 ash::SystemTrayDelegate* delegate = |
| 346 ash::Shell::GetInstance()->tray_delegate(); | 368 ash::Shell::GetInstance()->tray_delegate(); |
| 347 views::View* anchor = tray_container_; | 369 views::View* anchor = tray_container_; |
| 348 bubble_->InitView(anchor, SystemTrayBubble::ANCHOR_TYPE_TRAY, | 370 bubble_->InitView(anchor, SystemTrayBubble::ANCHOR_TYPE_TRAY, |
| 349 can_activate, delegate->GetUserLoginStatus()); | 371 can_activate, delegate->GetUserLoginStatus()); |
| 350 // If we have focus the shelf should be visible and we need to continue | 372 // If we have focus the shelf should be visible and we need to continue |
| 351 // showing the shelf when the popup is shown. | 373 // showing the shelf when the popup is shown. |
| 352 if (GetWidget()->IsActive()) | 374 if (GetWidget()->IsActive()) |
| 353 should_show_launcher_ = true; | 375 should_show_launcher_ = true; |
| 354 UpdateNotificationBubble(); // State changed, re-create notifications. | 376 UpdateNotificationBubble(); // State changed, re-create notifications. |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 435 canvas->DrawFocusRect(tray_container_->bounds()); | 457 canvas->DrawFocusRect(tray_container_->bounds()); |
| 436 } | 458 } |
| 437 | 459 |
| 438 void SystemTray::UpdateBackground(int alpha) { | 460 void SystemTray::UpdateBackground(int alpha) { |
| 439 background_->set_alpha(hide_background_animator_.alpha() + | 461 background_->set_alpha(hide_background_animator_.alpha() + |
| 440 hover_background_animator_.alpha()); | 462 hover_background_animator_.alpha()); |
| 441 SchedulePaint(); | 463 SchedulePaint(); |
| 442 } | 464 } |
| 443 | 465 |
| 444 } // namespace ash | 466 } // namespace ash |
| OLD | NEW |