Chromium Code Reviews| Index: ash/system/web_notification/web_notification_tray.cc |
| diff --git a/ash/system/web_notification/web_notification_tray.cc b/ash/system/web_notification/web_notification_tray.cc |
| index 11f1773897a3dc11a3a9409d1b1b34d4884ca041..83b0794b75b9e8e3834858c59e858c56aa5635de 100644 |
| --- a/ash/system/web_notification/web_notification_tray.cc |
| +++ b/ash/system/web_notification/web_notification_tray.cc |
| @@ -162,7 +162,8 @@ class WebNotificationList { |
| notifications_.clear(); |
| } |
| - void RemoveNotificationsBySource(const std::string& id) { |
| + void SendRemoveNotificationsBySource(WebNotificationTray* tray, |
| + const std::string& id) { |
| Notifications::iterator source_iter = GetNotification(id); |
| if (source_iter == notifications_.end()) |
| return; |
| @@ -171,11 +172,12 @@ class WebNotificationList { |
| loopiter != notifications_.end(); ) { |
| Notifications::iterator curiter = loopiter++; |
| if (curiter->display_source == display_source) |
| - EraseNotification(curiter); |
| + tray->SendRemoveNotification(curiter->id); |
| } |
| } |
| - void RemoveNotificationsByExtension(const std::string& id) { |
| + void SendRemoveNotificationsByExtension(WebNotificationTray* tray, |
| + const std::string& id) { |
| Notifications::iterator source_iter = GetNotification(id); |
| if (source_iter == notifications_.end()) |
| return; |
| @@ -184,7 +186,7 @@ class WebNotificationList { |
| loopiter != notifications_.end(); ) { |
| Notifications::iterator curiter = loopiter++; |
| if (curiter->extension_id == extension_id) |
| - EraseNotification(curiter); |
| + tray->SendRemoveNotification(curiter->id); |
| } |
| } |
| @@ -455,6 +457,7 @@ class WebNotificationView : public views::View, |
| View* source, const gfx::Point& point) OVERRIDE { |
| if (source != menu_button_) |
| return; |
| + tray_->set_menu_open(true); |
|
sadrul
2012/08/13 22:09:08
This feels like a hack. The app-list controller do
stevenjb
2012/08/14 00:48:37
Sure. I'm not a huge fan of using globals, but at
|
| WebNotificationMenuModel menu_model(tray_, notification_); |
| views::MenuModelAdapter menu_model_adapter(&menu_model); |
| views::MenuRunner menu_runner(menu_model_adapter.CreateMenu()); |
| @@ -467,6 +470,7 @@ class WebNotificationView : public views::View, |
| gfx::Rect(screen_location, menu_button_->size()), |
| views::MenuItemView::TOPRIGHT, |
| views::MenuRunner::HAS_MNEMONICS)); |
| + tray_->set_menu_open(false); |
| } |
| private: |
| @@ -776,7 +780,8 @@ class WebNotificationTray::Bubble : public TrayBubbleView::Host, |
| virtual void OnClickedOutsideView() OVERRIDE { |
| // May delete |this|. |
| - tray_->HideMessageCenterBubble(); |
| + if (!tray_->menu_open()) |
| + tray_->HideMessageCenterBubble(); |
| } |
| // Overridden from views::WidgetObserver: |
| @@ -828,7 +833,8 @@ WebNotificationTray::WebNotificationTray( |
| notification_list_(new WebNotificationList()), |
| count_label_(NULL), |
| delegate_(NULL), |
| - show_message_center_on_unlock_(false) { |
| + show_message_center_on_unlock_(false), |
| + menu_open_(false) { |
| count_label_ = new views::Label(UTF8ToUTF16("0")); |
| internal::SetupLabelForTray(count_label_); |
| gfx::Font font = count_label_->font(); |
| @@ -994,17 +1000,17 @@ void WebNotificationTray::SendRemoveAllNotifications() { |
| // When we disable notifications, we remove any existing matching |
| // notifications to avoid adding complicated UI to re-enable the source. |
| void WebNotificationTray::DisableByExtension(const std::string& id) { |
| - // Will call SendRemoveNotification for each matching notification. |
| - notification_list_->RemoveNotificationsByExtension(id); |
| if (delegate_) |
| delegate_->DisableExtension(id); |
| + // Will call SendRemoveNotification for each matching notification. |
| + notification_list_->SendRemoveNotificationsByExtension(this, id); |
| } |
| void WebNotificationTray::DisableByUrl(const std::string& id) { |
| - // Will call SendRemoveNotification for each matching notification. |
| - notification_list_->RemoveNotificationsBySource(id); |
| if (delegate_) |
| delegate_->DisableNotificationsFromSource(id); |
| + // Will call SendRemoveNotification for each matching notification. |
| + notification_list_->SendRemoveNotificationsBySource(this, id); |
| } |
| bool WebNotificationTray::PerformAction(const ui::Event& event) { |