diff options
Diffstat (limited to 'chrome/browser')
-rw-r--r-- | chrome/browser/notifications/balloon_collection_impl.cc | 9 | ||||
-rw-r--r-- | chrome/browser/notifications/balloon_collection_impl.h | 8 |
2 files changed, 17 insertions, 0 deletions
diff --git a/chrome/browser/notifications/balloon_collection_impl.cc b/chrome/browser/notifications/balloon_collection_impl.cc index ec95f8e..cfeeac6 100644 --- a/chrome/browser/notifications/balloon_collection_impl.cc +++ b/chrome/browser/notifications/balloon_collection_impl.cc @@ -186,6 +186,7 @@ void BalloonCollectionImpl::Observe( // Fall through. case chrome::NOTIFICATION_PANEL_ADDED: case chrome::NOTIFICATION_PANEL_CLOSED: + layout_.enable_computing_panel_offset(); if (layout_.ComputeOffsetToMoveAbovePanels(bounds)) PositionBalloons(true); break; @@ -275,6 +276,7 @@ void BalloonCollectionImpl::HandleMouseMoveEvent() { BalloonCollectionImpl::Layout::Layout() : placement_(INVALID), + need_to_compute_panel_offset_(false), offset_to_move_above_panels_(0) { RefreshSystemMetrics(); } @@ -406,6 +408,13 @@ gfx::Size BalloonCollectionImpl::Layout::ConstrainToSizeLimits( bool BalloonCollectionImpl::Layout::ComputeOffsetToMoveAbovePanels( const gfx::Rect& panel_bounds) { + // If the offset is not enabled due to that we have not received a + // notification about panel, don't proceed because we don't want to call + // PanelManager::GetInstance() to create an instance when panel is not + // present. + if (!need_to_compute_panel_offset_) + return false; + const DockedPanelStrip::Panels& panels = PanelManager::GetInstance()->docked_strip()->panels(); int offset_to_move_above_panels = 0; diff --git a/chrome/browser/notifications/balloon_collection_impl.h b/chrome/browser/notifications/balloon_collection_impl.h index 749c9e0..f505463 100644 --- a/chrome/browser/notifications/balloon_collection_impl.h +++ b/chrome/browser/notifications/balloon_collection_impl.h @@ -143,6 +143,10 @@ class BalloonCollectionImpl : public BalloonCollection, // to be repositioned. bool ComputeOffsetToMoveAbovePanels(const gfx::Rect& panel_bounds); + void enable_computing_panel_offset() { + need_to_compute_panel_offset_ = true; + } + private: // Layout parameters int VerticalEdgeMargin() const; @@ -161,6 +165,10 @@ class BalloonCollectionImpl : public BalloonCollection, Placement placement_; gfx::Rect work_area_; + // The flag that indicates that the panel offset computation should be + // performed. + bool need_to_compute_panel_offset_; + // The offset that guarantees that the notificaitions shown in the // lower-right or lower-left corner of the screen will go above currently // shown panels and will not be obscured by them. |