Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(819)

Unified Diff: ui/message_center/views/notification_view.cc

Issue 273173003: Notifications: Retain button hover state during content updates. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Update some formatting Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/message_center/views/notification_view.h ('k') | ui/message_center/views/notification_view_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/message_center/views/notification_view.cc
diff --git a/ui/message_center/views/notification_view.cc b/ui/message_center/views/notification_view.cc
index 0884205e68f3077fa66d02e31638a5e3f820d205..33f52a9cae316fe4d2ccc7700c4bec43667f4225 100644
--- a/ui/message_center/views/notification_view.cc
+++ b/ui/message_center/views/notification_view.cc
@@ -5,6 +5,7 @@
#include "ui/message_center/views/notification_view.h"
#include "base/command_line.h"
+#include "base/stl_util.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "grit/ui_resources.h"
@@ -451,7 +452,8 @@ views::View* NotificationView::GetEventHandlerForRect(const gfx::Rect& rect) {
// Want to return this for underlying views, otherwise GetCursor is not
// called. But buttons are exceptions, they'll have their own event handlings.
- std::vector<views::View*> buttons(action_buttons_);
+ std::vector<views::View*> buttons(action_buttons_.begin(),
+ action_buttons_.end());
buttons.push_back(close_button());
for (size_t i = 0; i < buttons.size(); ++i) {
@@ -702,29 +704,47 @@ void NotificationView::CreateOrUpdateImageView(
void NotificationView::CreateOrUpdateActionButtonViews(
const Notification& notification) {
- for (size_t i = 0; i < separators_.size(); ++i)
- delete separators_[i];
- separators_.clear();
+ std::vector<ButtonInfo> buttons = notification.buttons();
+ bool new_buttons = action_buttons_.size() != buttons.size();
+
+ if (new_buttons || buttons.size() == 0) {
+ STLDeleteContainerPointers(separators_.begin(), separators_.end());
+ separators_.clear();
Jun Mukai 2014/05/23 06:24:08 STLDeleteElements() invokes DeleteContainerPointer
dewittj 2014/05/23 17:32:41 Done.
- for (size_t i = 0; i < action_buttons_.size(); ++i)
- delete action_buttons_[i];
- action_buttons_.clear();
+ STLDeleteContainerPointers(action_buttons_.begin(), action_buttons_.end());
+ action_buttons_.clear();
+ }
DCHECK(bottom_view_);
DCHECK_EQ(this, bottom_view_->parent());
- std::vector<ButtonInfo> buttons = notification.buttons();
for (size_t i = 0; i < buttons.size(); ++i) {
- views::View* separator = new views::ImageView();
- separator->SetBorder(MakeSeparatorBorder(1, 0, kButtonSeparatorColor));
- separators_.push_back(separator);
- bottom_view_->AddChildView(separator);
- NotificationButton* button = new NotificationButton(this);
ButtonInfo button_info = buttons[i];
- button->SetTitle(button_info.title);
- button->SetIcon(button_info.icon.AsImageSkia());
- action_buttons_.push_back(button);
- bottom_view_->AddChildView(button);
+ if (new_buttons) {
+ views::View* separator = new views::ImageView();
+ separator->SetBorder(MakeSeparatorBorder(1, 0, kButtonSeparatorColor));
+ separators_.push_back(separator);
+ bottom_view_->AddChildView(separator);
+ NotificationButton* button = new NotificationButton(this);
+ button->SetTitle(button_info.title);
+ button->SetIcon(button_info.icon.AsImageSkia());
+ action_buttons_.push_back(button);
+ bottom_view_->AddChildView(button);
+ } else {
+ action_buttons_[i]->SetTitle(button_info.title);
+ action_buttons_[i]->SetIcon(button_info.icon.AsImageSkia());
+ action_buttons_[i]->SchedulePaint();
+ action_buttons_[i]->Layout();
+ }
+ }
+
+ if (new_buttons) {
+ Layout();
+ views::Widget* widget = GetWidget();
+ if (widget != NULL) {
+ widget->SetSize(widget->GetContentsView()->GetPreferredSize());
+ GetWidget()->SynthesizeMouseMoveEvent();
+ }
}
}
« no previous file with comments | « ui/message_center/views/notification_view.h ('k') | ui/message_center/views/notification_view_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698