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/ash_switches.h" | 7 #include "ash/ash_switches.h" |
8 #include "ash/shell.h" | 8 #include "ash/shell.h" |
9 #include "ash/shell/panel_window.h" | 9 #include "ash/shell/panel_window.h" |
10 #include "ash/shell_window_ids.h" | 10 #include "ash/shell_window_ids.h" |
11 #include "ash/system/audio/tray_volume.h" | 11 #include "ash/system/audio/tray_volume.h" |
12 #include "ash/system/bluetooth/tray_bluetooth.h" | 12 #include "ash/system/bluetooth/tray_bluetooth.h" |
13 #include "ash/system/brightness/tray_brightness.h" | 13 #include "ash/system/brightness/tray_brightness.h" |
14 #include "ash/system/chromeos/tray_display.h" | 14 #include "ash/system/chromeos/tray_display.h" |
15 #include "ash/system/date/tray_date.h" | 15 #include "ash/system/date/tray_date.h" |
16 #include "ash/system/drive/tray_drive.h" | 16 #include "ash/system/drive/tray_drive.h" |
17 #include "ash/system/ime/tray_ime.h" | 17 #include "ash/system/ime/tray_ime.h" |
18 #include "ash/system/locale/tray_locale.h" | 18 #include "ash/system/locale/tray_locale.h" |
19 #include "ash/system/monitor/tray_monitor.h" | 19 #include "ash/system/monitor/tray_monitor.h" |
20 #include "ash/system/power/power_status_observer.h" | |
21 #include "ash/system/power/power_supply_status.h" | 20 #include "ash/system/power/power_supply_status.h" |
22 #include "ash/system/power/tray_power.h" | 21 #include "ash/system/power/tray_power.h" |
23 #include "ash/system/settings/tray_settings.h" | 22 #include "ash/system/settings/tray_settings.h" |
24 #include "ash/system/status_area_widget.h" | 23 #include "ash/system/status_area_widget.h" |
25 #include "ash/system/tray/system_tray_delegate.h" | 24 #include "ash/system/tray/system_tray_delegate.h" |
| 25 #include "ash/system/tray/system_tray_observers.h" |
26 #include "ash/system/tray/system_tray_item.h" | 26 #include "ash/system/tray/system_tray_item.h" |
27 #include "ash/system/tray/tray_bubble_wrapper.h" | 27 #include "ash/system/tray/tray_bubble_wrapper.h" |
28 #include "ash/system/tray/tray_constants.h" | 28 #include "ash/system/tray/tray_constants.h" |
29 #include "ash/system/tray_accessibility.h" | 29 #include "ash/system/tray_accessibility.h" |
30 #include "ash/system/tray_caps_lock.h" | 30 #include "ash/system/tray_caps_lock.h" |
31 #include "ash/system/tray_update.h" | 31 #include "ash/system/tray_update.h" |
32 #include "ash/system/user/login_status.h" | 32 #include "ash/system/user/login_status.h" |
33 #include "ash/system/user/tray_user.h" | 33 #include "ash/system/user/tray_user.h" |
34 #include "ash/wm/shelf_layout_manager.h" | 34 #include "ash/wm/shelf_layout_manager.h" |
35 #include "base/command_line.h" | 35 #include "base/command_line.h" |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
99 | 99 |
100 } // namespace internal | 100 } // namespace internal |
101 | 101 |
102 // SystemTray | 102 // SystemTray |
103 | 103 |
104 using internal::SystemTrayBubble; | 104 using internal::SystemTrayBubble; |
105 | 105 |
106 SystemTray::SystemTray(internal::StatusAreaWidget* status_area_widget) | 106 SystemTray::SystemTray(internal::StatusAreaWidget* status_area_widget) |
107 : internal::TrayBackgroundView(status_area_widget), | 107 : internal::TrayBackgroundView(status_area_widget), |
108 items_(), | 108 items_(), |
109 accessibility_observer_(NULL), | |
110 audio_observer_(NULL), | |
111 bluetooth_observer_(NULL), | |
112 brightness_observer_(NULL), | |
113 caps_lock_observer_(NULL), | |
114 clock_observer_(NULL), | |
115 drive_observer_(NULL), | |
116 ime_observer_(NULL), | |
117 locale_observer_(NULL), | |
118 #if defined(OS_CHROMEOS) | |
119 network_observer_(NULL), | |
120 vpn_observer_(NULL), | |
121 sms_observer_(NULL), | |
122 #endif | |
123 update_observer_(NULL), | |
124 user_observer_(NULL), | |
125 default_bubble_height_(0), | 109 default_bubble_height_(0), |
126 hide_notifications_(false) { | 110 hide_notifications_(false) { |
127 SetContentsBackground(); | 111 SetContentsBackground(); |
128 } | 112 } |
129 | 113 |
130 SystemTray::~SystemTray() { | 114 SystemTray::~SystemTray() { |
131 // Destroy any child views that might have back pointers before ~View(). | 115 // Destroy any child views that might have back pointers before ~View(). |
132 system_bubble_.reset(); | 116 system_bubble_.reset(); |
133 notification_bubble_.reset(); | 117 notification_bubble_.reset(); |
134 for (std::vector<SystemTrayItem*>::iterator it = items_.begin(); | 118 for (std::vector<SystemTrayItem*>::iterator it = items_.begin(); |
135 it != items_.end(); | 119 it != items_.end(); |
136 ++it) { | 120 ++it) { |
137 (*it)->DestroyTrayView(); | 121 (*it)->DestroyTrayView(); |
138 } | 122 } |
139 } | 123 } |
140 | 124 |
141 void SystemTray::CreateItems() { | 125 void SystemTray::InitializeTrayItems(SystemTrayDelegate* delegate) { |
| 126 internal::TrayBackgroundView::Initialize(); |
| 127 CreateItems(delegate); |
| 128 } |
| 129 |
| 130 void SystemTray::CreateItems(SystemTrayDelegate* delegate) { |
142 internal::TrayVolume* tray_volume = new internal::TrayVolume(); | 131 internal::TrayVolume* tray_volume = new internal::TrayVolume(); |
143 internal::TrayBluetooth* tray_bluetooth = new internal::TrayBluetooth(); | 132 internal::TrayBluetooth* tray_bluetooth = new internal::TrayBluetooth(); |
144 internal::TrayBrightness* tray_brightness = new internal::TrayBrightness(); | 133 internal::TrayBrightness* tray_brightness = new internal::TrayBrightness(); |
145 internal::TrayDate* tray_date = new internal::TrayDate(); | 134 internal::TrayDate* tray_date = new internal::TrayDate(); |
146 internal::TrayPower* tray_power = new internal::TrayPower(); | 135 internal::TrayPower* tray_power = new internal::TrayPower(); |
147 internal::TrayIME* tray_ime = new internal::TrayIME; | 136 internal::TrayIME* tray_ime = new internal::TrayIME(); |
148 internal::TrayUser* tray_user = new internal::TrayUser; | 137 internal::TrayUser* tray_user = new internal::TrayUser(); |
149 internal::TrayAccessibility* tray_accessibility = | 138 internal::TrayAccessibility* tray_accessibility = |
150 new internal::TrayAccessibility; | 139 new internal::TrayAccessibility(); |
151 internal::TrayCapsLock* tray_caps_lock = new internal::TrayCapsLock; | 140 internal::TrayCapsLock* tray_caps_lock = new internal::TrayCapsLock(); |
152 internal::TrayDrive* tray_drive = new internal::TrayDrive; | 141 internal::TrayDrive* tray_drive = new internal::TrayDrive(); |
153 internal::TrayLocale* tray_locale = new internal::TrayLocale; | 142 internal::TrayLocale* tray_locale = new internal::TrayLocale(); |
154 internal::TrayUpdate* tray_update = new internal::TrayUpdate; | 143 internal::TrayUpdate* tray_update = new internal::TrayUpdate(); |
155 internal::TraySettings* tray_settings = new internal::TraySettings(); | 144 internal::TraySettings* tray_settings = new internal::TraySettings(); |
| 145 #if defined(OS_CHROMEOS) |
| 146 internal::TrayDisplay* tray_display = new internal::TrayDisplay(); |
| 147 internal::TrayNetwork* tray_network = new internal::TrayNetwork(); |
| 148 internal::TrayVPN* tray_vpn = new internal::TrayVPN(); |
| 149 internal::TraySms* tray_sms = new internal::TraySms(); |
| 150 #endif |
156 | 151 |
157 accessibility_observer_ = tray_accessibility; | 152 SystemTrayObservers* observers = delegate->GetSystemTrayObservers(); |
158 audio_observer_ = tray_volume; | 153 if (observers) { |
159 bluetooth_observer_ = tray_bluetooth; | 154 observers->accessibility_observers().AddObserver(tray_accessibility); |
160 brightness_observer_ = tray_brightness; | 155 observers->audio_observers().AddObserver(tray_volume); |
161 caps_lock_observer_ = tray_caps_lock; | 156 observers->bluetooth_observers().AddObserver(tray_bluetooth); |
162 clock_observer_ = tray_date; | 157 observers->brightness_observers().AddObserver(tray_brightness); |
163 drive_observer_ = tray_drive; | 158 observers->caps_lock_observers().AddObserver(tray_caps_lock); |
164 ime_observer_ = tray_ime; | 159 observers->clock_observers().AddObserver(tray_date); |
165 locale_observer_ = tray_locale; | 160 observers->drive_observers().AddObserver(tray_drive); |
166 power_status_observers_.AddObserver(tray_power); | 161 observers->ime_observers().AddObserver(tray_ime); |
167 power_status_observers_.AddObserver(tray_settings); | 162 observers->locale_observers().AddObserver(tray_locale); |
168 update_observer_ = tray_update; | 163 observers->power_status_observers().AddObserver(tray_power); |
169 user_observer_ = tray_user; | 164 observers->power_status_observers().AddObserver(tray_settings); |
170 | 165 observers->update_observers().AddObserver(tray_update); |
| 166 observers->user_observers().AddObserver(tray_user); |
171 #if defined(OS_CHROMEOS) | 167 #if defined(OS_CHROMEOS) |
172 internal::TrayDisplay* tray_display = new internal::TrayDisplay; | 168 observers->network_observers().AddObserver(tray_network); |
173 internal::TrayNetwork* tray_network = new internal::TrayNetwork; | 169 observers->vpn_observers().AddObserver(tray_vpn); |
174 internal::TrayVPN* tray_vpn = new internal::TrayVPN; | 170 observers->sms_observers().AddObserver(tray_sms); |
175 internal::TraySms* tray_sms = new internal::TraySms(); | |
176 network_observer_ = tray_network; | |
177 vpn_observer_ = tray_vpn; | |
178 sms_observer_ = tray_sms; | |
179 #endif | 171 #endif |
| 172 } |
180 | 173 |
181 AddTrayItem(tray_user); | 174 AddTrayItem(tray_user); |
182 AddTrayItem(tray_ime); | 175 AddTrayItem(tray_ime); |
183 AddTrayItem(tray_power); | 176 AddTrayItem(tray_power); |
184 #if defined(OS_CHROMEOS) | 177 #if defined(OS_CHROMEOS) |
185 AddTrayItem(tray_network); | 178 AddTrayItem(tray_network); |
186 AddTrayItem(tray_vpn); | 179 AddTrayItem(tray_vpn); |
187 AddTrayItem(tray_sms); | 180 AddTrayItem(tray_sms); |
188 #endif | 181 #endif |
189 AddTrayItem(tray_bluetooth); | 182 AddTrayItem(tray_bluetooth); |
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
485 // It is possible that none of the items generated actual notifications. | 478 // It is possible that none of the items generated actual notifications. |
486 DestroyNotificationBubble(); | 479 DestroyNotificationBubble(); |
487 return; | 480 return; |
488 } | 481 } |
489 if (hide_notifications_) | 482 if (hide_notifications_) |
490 notification_bubble->SetVisible(false); | 483 notification_bubble->SetVisible(false); |
491 else | 484 else |
492 status_area_widget()->SetHideWebNotifications(true); | 485 status_area_widget()->SetHideWebNotifications(true); |
493 } | 486 } |
494 | 487 |
495 void SystemTray::Initialize() { | |
496 internal::TrayBackgroundView::Initialize(); | |
497 CreateItems(); | |
498 } | |
499 | |
500 void SystemTray::SetShelfAlignment(ShelfAlignment alignment) { | 488 void SystemTray::SetShelfAlignment(ShelfAlignment alignment) { |
501 if (alignment == shelf_alignment()) | 489 if (alignment == shelf_alignment()) |
502 return; | 490 return; |
503 internal::TrayBackgroundView::SetShelfAlignment(alignment); | 491 internal::TrayBackgroundView::SetShelfAlignment(alignment); |
504 UpdateAfterShelfAlignmentChange(alignment); | 492 UpdateAfterShelfAlignmentChange(alignment); |
505 // Destroy any existing bubble so that it is rebuilt correctly. | 493 // Destroy any existing bubble so that it is rebuilt correctly. |
506 system_bubble_.reset(); | 494 system_bubble_.reset(); |
507 // Rebuild any notification bubble. | 495 // Rebuild any notification bubble. |
508 if (notification_bubble_.get()) { | 496 if (notification_bubble_.get()) { |
509 notification_bubble_.reset(); | 497 notification_bubble_.reset(); |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
593 ConvertPointToWidget(this, &point); | 581 ConvertPointToWidget(this, &point); |
594 arrow_offset = point.x(); | 582 arrow_offset = point.x(); |
595 } | 583 } |
596 } | 584 } |
597 ShowDefaultViewWithOffset(BUBBLE_CREATE_NEW, arrow_offset); | 585 ShowDefaultViewWithOffset(BUBBLE_CREATE_NEW, arrow_offset); |
598 } | 586 } |
599 return true; | 587 return true; |
600 } | 588 } |
601 | 589 |
602 } // namespace ash | 590 } // namespace ash |
OLD | NEW |