Index: ui/message_center/views/message_popup_collection.cc |
diff --git a/ui/message_center/views/message_popup_collection.cc b/ui/message_center/views/message_popup_collection.cc |
index 1a28ffe591e6e9f7e29b0d9876aa3ac6fcd40cb5..7bab73498efcf8133bd5f804d25b3272655ce58e 100644 |
--- a/ui/message_center/views/message_popup_collection.cc |
+++ b/ui/message_center/views/message_popup_collection.cc |
@@ -83,7 +83,25 @@ void MessagePopupCollection::ClickOnNotification( |
void MessagePopupCollection::RemoveNotification( |
const std::string& notification_id, |
bool by_user) { |
- message_center_->RemoveNotification(notification_id, by_user); |
+ NotificationList::PopupNotifications notifications = |
+ message_center_->GetPopupNotifications(); |
+ for (NotificationList::PopupNotifications::iterator iter = |
+ notifications.begin(); |
+ iter != notifications.end(); ++iter) { |
+ Notification* notification = *iter; |
+ DCHECK(notification); |
+ |
+ if (notification->id() != notification_id) |
+ continue; |
+ |
+ // Don't remove the notification only when it's not closable. |
+ if (notification->closable()) |
+ message_center_->RemoveNotification(notification_id, by_user); |
+ else |
+ message_center_->MarkSinglePopupAsShown(notification_id, true /* read */); |
+ |
+ break; |
+ } |
} |
scoped_ptr<ui::MenuModel> MessagePopupCollection::CreateMenuModel( |
@@ -139,10 +157,13 @@ void MessagePopupCollection::UpdateWidgets() { |
if (FindToast((*iter)->id())) |
continue; |
+ Notification notification = *(*iter); |
+ // Override closable status, since toasts should be closable even when it's |
+ // non-closable. |
+ notification.set_closable(true); |
NotificationView* view = |
- NotificationView::Create(NULL, |
- *(*iter), |
- true); // Create top-level notification. |
+ NotificationView::Create(NULL, notification, |
+ true); // Create top-level notification. |
view->set_context_menu_controller(context_menu_controller_.get()); |
int view_height = ToastContentsView::GetToastSizeForView(view).height(); |
int height_available = |