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 ac0afdc0b0eb60507113252b79ee0dd99478c9da..2fa23e2c4eb838459ea88efe61f09200f8345c14 100644 |
--- a/ash/system/web_notification/web_notification_tray.cc |
+++ b/ash/system/web_notification/web_notification_tray.cc |
@@ -42,7 +42,7 @@ const int kNotificationImageIconInset = 4; |
// Web Notification Bubble constants |
const int kWebNotificationBubbleMinHeight = 80; |
-const int kWebNotificationBubbleMaxHeight = 400; |
+const int kWebNotificationBubbleMaxHeight = 480; |
// Delay laying out the Bubble until all notifications have been added and icons |
// have had a chance to load. |
const int kUpdateDelayMs = 50; |
@@ -50,7 +50,7 @@ const int kUpdateDelayMs = 50; |
const int kMaxVisibleNotifications = 100; |
// Individual notifications constants |
-const int kWebNotificationWidth = 400; |
+const int kWebNotificationWidth = 320; |
const int kWebNotificationButtonWidth = 32; |
const int kWebNotificationIconSize = 40; |
@@ -483,6 +483,7 @@ class WebNotificationButtonView : public TrayPopupTextButtonContainer, |
} // namespace internal |
+using internal::TrayBubbleView; |
using internal::WebNotificationList; |
using internal::WebNotificationView; |
@@ -567,7 +568,7 @@ class WebNotificationTray::BubbleContentsView : public views::View { |
DISALLOW_COPY_AND_ASSIGN(BubbleContentsView); |
}; |
-class WebNotificationTray::Bubble : public internal::TrayBubbleView::Host, |
+class WebNotificationTray::Bubble : public TrayBubbleView::Host, |
public views::Widget::Observer { |
public: |
explicit Bubble(WebNotificationTray* tray) |
@@ -577,32 +578,24 @@ class WebNotificationTray::Bubble : public internal::TrayBubbleView::Host, |
contents_view_(NULL), |
ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)) { |
views::View* anchor = tray->tray_container(); |
- views::BubbleBorder::ArrowLocation arrow_location; |
- int arrow_offset = 0; |
+ TrayBubbleView::InitParams init_params(TrayBubbleView::ANCHOR_TYPE_TRAY, |
+ tray->shelf_alignment()); |
+ init_params.bubble_width = kWebNotificationWidth; |
+ init_params.max_height = kWebNotificationBubbleMaxHeight; |
if (tray_->shelf_alignment() == SHELF_ALIGNMENT_BOTTOM) { |
- arrow_location = views::BubbleBorder::BOTTOM_RIGHT; |
- arrow_offset = anchor->GetContentsBounds().width() / 2; |
- } else if (tray_->shelf_alignment() == SHELF_ALIGNMENT_LEFT) { |
- arrow_location = views::BubbleBorder::LEFT_BOTTOM; |
- } else { |
- arrow_location = views::BubbleBorder::RIGHT_BOTTOM; |
+ gfx::Rect bounds(anchor->width() / 2, 0, 0, 0); |
+ bounds = anchor->ConvertRectToWidget(bounds); |
+ init_params.arrow_offset = bounds.x(); |
} |
- bubble_view_ = new internal::TrayBubbleView( |
- anchor, arrow_location, this, false, kWebNotificationWidth); |
- bubble_view_->SetMaxHeight(kWebNotificationBubbleMaxHeight); |
- |
- bubble_widget_ = views::BubbleDelegateView::CreateBubble(bubble_view_); |
- |
- bubble_view_->SetAlignment(views::BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE); |
- bubble_widget_->non_client_view()->frame_view()->set_background(NULL); |
- bubble_view_->SetBubbleBorder(arrow_offset); |
- |
- bubble_widget_->AddObserver(this); |
+ bubble_view_ = TrayBubbleView::Create(anchor, this, init_params); |
contents_view_ = new BubbleContentsView(tray); |
bubble_view_->AddChildView(contents_view_); |
- InitializeHost(bubble_widget_, tray_); |
+ bubble_widget_ = views::BubbleDelegateView::CreateBubble(bubble_view_); |
+ bubble_widget_->AddObserver(this); |
+ |
+ PostCreateBubble(bubble_widget_, bubble_view_, tray_); |
ScheduleUpdate(); |
} |
@@ -633,11 +626,6 @@ class WebNotificationTray::Bubble : public internal::TrayBubbleView::Host, |
contents_view_ = NULL; |
} |
- virtual gfx::Rect GetAnchorRect() const OVERRIDE { |
- gfx::Rect anchor_rect = tray_->tray_container()->GetBoundsInScreen(); |
- return anchor_rect; |
- } |
- |
virtual void OnMouseEnteredView() OVERRIDE { |
} |
@@ -663,7 +651,7 @@ class WebNotificationTray::Bubble : public internal::TrayBubbleView::Host, |
} |
WebNotificationTray* tray_; |
- internal::TrayBubbleView* bubble_view_; |
+ TrayBubbleView* bubble_view_; |
views::Widget* bubble_widget_; |
BubbleContentsView* contents_view_; |
base::WeakPtrFactory<Bubble> weak_ptr_factory_; |
@@ -818,6 +806,8 @@ void WebNotificationTray::SetShelfAlignment(ShelfAlignment alignment) { |
alignment == SHELF_ALIGNMENT_BOTTOM ? |
views::BoxLayout::kHorizontal : views::BoxLayout::kVertical, |
0, 0, 0)); |
+ // Destroy any existing bubble so that it will be rebuilt correctly. |
+ bubble_.reset(); |
} |
bool WebNotificationTray::PerformAction(const views::Event& event) { |