OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 "ui/message_center/views/message_popup_collection.h" | 5 #include "ui/message_center/views/message_popup_collection.h" |
6 | 6 |
7 #include <set> | 7 #include <set> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/timer.h" | 10 #include "base/timer.h" |
(...skipping 29 matching lines...) Expand all Loading... |
40 int seconds = kAutocloseDefaultDelaySeconds; | 40 int seconds = kAutocloseDefaultDelaySeconds; |
41 if (notification->priority() > DEFAULT_PRIORITY) | 41 if (notification->priority() > DEFAULT_PRIORITY) |
42 seconds = kAutocloseHighPriorityDelaySeconds; | 42 seconds = kAutocloseHighPriorityDelaySeconds; |
43 delay_ = base::TimeDelta::FromSeconds(seconds); | 43 delay_ = base::TimeDelta::FromSeconds(seconds); |
44 } | 44 } |
45 | 45 |
46 views::Widget* CreateWidget(gfx::NativeView context) { | 46 views::Widget* CreateWidget(gfx::NativeView context) { |
47 views::Widget::InitParams params( | 47 views::Widget::InitParams params( |
48 views::Widget::InitParams::TYPE_WINDOW_FRAMELESS); | 48 views::Widget::InitParams::TYPE_WINDOW_FRAMELESS); |
49 params.keep_on_top = true; | 49 params.keep_on_top = true; |
50 params.context = context; | 50 if (context) |
| 51 params.context = context; |
| 52 else |
| 53 params.top_level = true; |
51 params.transparent = true; | 54 params.transparent = true; |
52 // The origin of the initial bounds are set to (0, 0). It'll then moved by | 55 // The origin of the initial bounds are set to (0, 0). It'll then moved by |
53 // MessagePopupCollection. | 56 // MessagePopupCollection. |
54 params.bounds = gfx::Rect( | 57 params.bounds = gfx::Rect( |
55 gfx::Size(kWebNotificationWidth, | 58 gfx::Size(kWebNotificationWidth, |
56 GetHeightForWidth(kWebNotificationWidth))); | 59 GetHeightForWidth(kWebNotificationWidth))); |
57 params.delegate = this; | 60 params.delegate = this; |
58 views::Widget* widget = new views::Widget(); | 61 views::Widget* widget = new views::Widget(); |
59 widget->set_focus_on_creation(false); | 62 widget->set_focus_on_creation(false); |
60 widget->Init(params); | 63 widget->Init(params); |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
140 | 143 |
141 void MessagePopupCollection::UpdatePopups() { | 144 void MessagePopupCollection::UpdatePopups() { |
142 NotificationList::PopupNotifications popups = | 145 NotificationList::PopupNotifications popups = |
143 message_center_->notification_list()->GetPopupNotifications(); | 146 message_center_->notification_list()->GetPopupNotifications(); |
144 | 147 |
145 if (popups.empty()) { | 148 if (popups.empty()) { |
146 CloseAllWidgets(); | 149 CloseAllWidgets(); |
147 return; | 150 return; |
148 } | 151 } |
149 | 152 |
150 gfx::Screen* screen = gfx::Screen::GetScreenFor(context_); | 153 gfx::Rect work_area; |
151 gfx::Rect work_area = screen->GetDisplayNearestWindow(context_).work_area(); | 154 if (!context_) { |
| 155 // On Win+Aura, we don't have a context since the popups currently show up |
| 156 // on the Windows desktop, not in the Aura/Ash desktop. This code will |
| 157 // display the popups on the primary display. |
| 158 gfx::Screen* screen = gfx::Screen::GetNativeScreen(); |
| 159 work_area = screen->GetPrimaryDisplay().work_area(); |
| 160 } else { |
| 161 gfx::Screen* screen = gfx::Screen::GetScreenFor(context_); |
| 162 work_area = screen->GetDisplayNearestWindow(context_).work_area(); |
| 163 } |
152 | 164 |
153 std::set<std::string> old_toast_ids; | 165 std::set<std::string> old_toast_ids; |
154 for (ToastContainer::iterator iter = toasts_.begin(); iter != toasts_.end(); | 166 for (ToastContainer::iterator iter = toasts_.begin(); iter != toasts_.end(); |
155 ++iter) { | 167 ++iter) { |
156 old_toast_ids.insert(iter->first); | 168 old_toast_ids.insert(iter->first); |
157 } | 169 } |
158 | 170 |
159 int bottom = work_area.bottom() - kMarginBetweenItems; | 171 int bottom = work_area.bottom() - kMarginBetweenItems; |
160 int left = work_area.right() - kWebNotificationWidth - kMarginBetweenItems; | 172 int left = work_area.right() - kWebNotificationWidth - kMarginBetweenItems; |
161 // Iterate in the reverse order to keep the oldest toasts on screen. Newer | 173 // Iterate in the reverse order to keep the oldest toasts on screen. Newer |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
247 message_center_->notification_list()->MarkSinglePopupAsShown( | 259 message_center_->notification_list()->MarkSinglePopupAsShown( |
248 iter->first, false); | 260 iter->first, false); |
249 toasts_.erase(iter); | 261 toasts_.erase(iter); |
250 break; | 262 break; |
251 } | 263 } |
252 } | 264 } |
253 UpdatePopups(); | 265 UpdatePopups(); |
254 } | 266 } |
255 | 267 |
256 } // namespace message_center | 268 } // namespace message_center |
OLD | NEW |