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

Unified Diff: ash/system/tray/system_tray.cc

Issue 10407080: Add NetworkNotificationView to tray_network. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 8 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
Index: ash/system/tray/system_tray.cc
diff --git a/ash/system/tray/system_tray.cc b/ash/system/tray/system_tray.cc
index 753fb484225677cfeb3eefc19cc658bd2b9547ec..33b848073c97306b309a2f192ee1f7fdff46348d 100644
--- a/ash/system/tray/system_tray.cc
+++ b/ash/system/tray/system_tray.cc
@@ -177,10 +177,11 @@ SystemTray::SystemTray()
background_(new internal::SystemTrayBackground),
should_show_launcher_(false),
shelf_alignment_(SHELF_ALIGNMENT_BOTTOM),
- ALLOW_THIS_IN_INITIALIZER_LIST(hide_background_animator_(this,
- 0, kTrayBackgroundAlpha)),
- ALLOW_THIS_IN_INITIALIZER_LIST(hover_background_animator_(this,
- 0, kTrayBackgroundHoverAlpha - kTrayBackgroundAlpha)) {
+ ALLOW_THIS_IN_INITIALIZER_LIST(hide_background_animator_(
+ this, 0, kTrayBackgroundAlpha)),
+ ALLOW_THIS_IN_INITIALIZER_LIST(hover_background_animator_(
+ this, 0, kTrayBackgroundHoverAlpha - kTrayBackgroundAlpha)),
+ default_bubble_height_(0) {
tray_container_ = new internal::SystemTrayContainer;
tray_container_->SetLayoutManager(new views::BoxLayout(
views::BoxLayout::kHorizontal, 0, 0, 0));
@@ -323,7 +324,7 @@ void SystemTray::SetDetailedViewCloseDelay(int close_delay) {
void SystemTray::HideDetailedView(SystemTrayItem* item) {
if (item != detailed_item_)
return;
- bubble_.reset();
+ DestroyBubble();
UpdateNotificationBubble();
}
@@ -347,7 +348,7 @@ void SystemTray::HideNotificationView(SystemTrayItem* item) {
}
void SystemTray::UpdateAfterLoginStatusChange(user::LoginStatus login_status) {
- bubble_.reset();
+ DestroyBubble();
for (std::vector<SystemTrayItem*>::iterator it = items_.begin();
it != items_.end();
@@ -368,9 +369,14 @@ bool SystemTray::CloseBubbleForTest() const {
// Private methods.
+void SystemTray::DestroyBubble() {
+ bubble_.reset();
+ detailed_item_ = NULL;
+}
+
void SystemTray::RemoveBubble(SystemTrayBubble* bubble) {
if (bubble == bubble_.get()) {
- bubble_.reset();
+ DestroyBubble();
UpdateNotificationBubble(); // State changed, re-create notifications.
if (should_show_launcher_) {
// No need to show the launcher if the mouse isn't over the status area
@@ -460,8 +466,13 @@ void SystemTray::ShowItems(const std::vector<SystemTrayItem*>& items,
init_params.login_status = delegate->GetUserLoginStatus();
if (arrow_offset >= 0)
init_params.arrow_offset = arrow_offset;
+ if (detailed)
+ init_params.max_height = default_bubble_height_;
bubble_->InitView(init_params);
}
+ // Save height of default view for creating detailed views directly.
+ if (!detailed)
+ default_bubble_height_ = bubble_->bubble_view()->height();
if (detailed && items.size() > 0)
detailed_item_ = items[0];
@@ -485,9 +496,23 @@ void SystemTray::UpdateNotificationBubble() {
notification_bubble_.reset();
return;
}
- notification_bubble_.reset(
- new SystemTrayBubble(this, notification_items_,
- SystemTrayBubble::BUBBLE_TYPE_NOTIFICATION));
+ if (bubble_.get() &&
+ bubble_->bubble_type() == SystemTrayBubble::BUBBLE_TYPE_DETAILED) {
+ // Skip notifications for any currently displayed detailed item.
+ std::vector<SystemTrayItem*> items;
+ for (std::vector<SystemTrayItem*>::iterator iter =
+ notification_items_.begin();
+ iter != notification_items_.end(); ++ iter) {
+ if (*iter != detailed_item_)
+ items.push_back(*iter);
+ }
+ notification_bubble_.reset(new SystemTrayBubble(
+ this, items, SystemTrayBubble::BUBBLE_TYPE_NOTIFICATION));
+ } else {
+ // Show all notifications.
+ notification_bubble_.reset(new SystemTrayBubble(
+ this, notification_items_, SystemTrayBubble::BUBBLE_TYPE_NOTIFICATION));
+ }
views::View* anchor;
SystemTrayBubble::AnchorType anchor_type;
if (bubble_.get()) {

Powered by Google App Engine
This is Rietveld 408576698