diff options
author | estade <estade@chromium.org> | 2016-03-10 07:29:13 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-03-10 15:30:43 +0000 |
commit | 6c27fa4ddfb8efa64df7c16b783b8252b81834dd (patch) | |
tree | b07ab36917604af6a42077044ef337649549d0f9 /ash | |
parent | d034150c37234dfa2eedf8fde15f9fedd8c3cd10 (diff) | |
download | chromium_src-6c27fa4ddfb8efa64df7c16b783b8252b81834dd.zip chromium_src-6c27fa4ddfb8efa64df7c16b783b8252b81834dd.tar.gz chromium_src-6c27fa4ddfb8efa64df7c16b783b8252b81834dd.tar.bz2 |
Convert location bar bubble delegates to bubble dialog delegates
BUG=585312
Review URL: https://codereview.chromium.org/1759453002
Cr-Commit-Position: refs/heads/master@{#380411}
Diffstat (limited to 'ash')
-rw-r--r-- | ash/wm/immersive_fullscreen_controller.cc | 100 | ||||
-rw-r--r-- | ash/wm/immersive_fullscreen_controller.h | 8 |
2 files changed, 64 insertions, 44 deletions
diff --git a/ash/wm/immersive_fullscreen_controller.cc b/ash/wm/immersive_fullscreen_controller.cc index 7d0a851..54773ae 100644 --- a/ash/wm/immersive_fullscreen_controller.cc +++ b/ash/wm/immersive_fullscreen_controller.cc @@ -24,6 +24,7 @@ #include "ui/gfx/geometry/rect.h" #include "ui/gfx/screen.h" #include "ui/views/bubble/bubble_delegate.h" +#include "ui/views/bubble/bubble_dialog_delegate.h" #include "ui/views/view.h" #include "ui/views/widget/widget.h" #include "ui/wm/core/transient_window_manager.h" @@ -63,16 +64,40 @@ const int kSwipeVerticalThresholdMultiplier = 3; const int kHeightOfDeadRegionAboveTopContainer = 10; // Returns the BubbleDelegateView corresponding to |maybe_bubble| if -// |maybe_bubble| is a bubble. +// |maybe_bubble| is a bubble. TODO(estade): remove this when all bubbles are +// BubbleDialogDelegateViews, or create a common interface for the two bubble +// types. views::BubbleDelegateView* AsBubbleDelegate(aura::Window* maybe_bubble) { if (!maybe_bubble) - return NULL; + return nullptr; views::Widget* widget = views::Widget::GetWidgetForNativeView(maybe_bubble); if (!widget) - return NULL; + return nullptr; return widget->widget_delegate()->AsBubbleDelegate(); } +// Returns the BubbleDialogDelegateView corresponding to |maybe_bubble| if +// |maybe_bubble| is a bubble. +views::BubbleDialogDelegateView* AsBubbleDialogDelegate( + aura::Window* maybe_bubble) { + if (!maybe_bubble) + return nullptr; + views::Widget* widget = views::Widget::GetWidgetForNativeView(maybe_bubble); + if (!widget) + return nullptr; + return widget->widget_delegate()->AsBubbleDialogDelegate(); +} + +views::View* GetAnchorView(aura::Window* maybe_bubble) { + views::BubbleDelegateView* bubble = AsBubbleDelegate(maybe_bubble); + if (bubble) + return bubble->GetAnchorView(); + + views::BubbleDialogDelegateView* bubble_dialog = + AsBubbleDialogDelegate(maybe_bubble); + return bubble_dialog ? bubble_dialog->GetAnchorView() : nullptr; +} + // Returns true if |maybe_transient| is a transient child of |toplevel|. bool IsWindowTransientChildOf(aura::Window* maybe_transient, aura::Window* toplevel) { @@ -128,11 +153,11 @@ const int ImmersiveFullscreenController::kMouseRevealBoundsHeight = 3; // so that bubbles which are not activatable and bubbles which do not close // upon deactivation also keep the top-of-window views revealed for the // duration of their visibility. -class ImmersiveFullscreenController::BubbleManager +class ImmersiveFullscreenController::BubbleObserver : public aura::WindowObserver { public: - explicit BubbleManager(ImmersiveFullscreenController* controller); - ~BubbleManager() override; + explicit BubbleObserver(ImmersiveFullscreenController* controller); + ~BubbleObserver() override; // Start / stop observing changes to |bubble|'s visibility. void StartObserving(aura::Window* bubble); @@ -154,22 +179,21 @@ class ImmersiveFullscreenController::BubbleManager // |bubbles_| is visible. scoped_ptr<ImmersiveRevealedLock> revealed_lock_; - DISALLOW_COPY_AND_ASSIGN(BubbleManager); + DISALLOW_COPY_AND_ASSIGN(BubbleObserver); }; -ImmersiveFullscreenController::BubbleManager::BubbleManager( +ImmersiveFullscreenController::BubbleObserver::BubbleObserver( ImmersiveFullscreenController* controller) - : controller_(controller) { -} + : controller_(controller) {} -ImmersiveFullscreenController::BubbleManager::~BubbleManager() { +ImmersiveFullscreenController::BubbleObserver::~BubbleObserver() { for (std::set<aura::Window*>::const_iterator it = bubbles_.begin(); it != bubbles_.end(); ++it) { (*it)->RemoveObserver(this); } } -void ImmersiveFullscreenController::BubbleManager::StartObserving( +void ImmersiveFullscreenController::BubbleObserver::StartObserving( aura::Window* bubble) { if (bubbles_.insert(bubble).second) { bubble->AddObserver(this); @@ -177,7 +201,7 @@ void ImmersiveFullscreenController::BubbleManager::StartObserving( } } -void ImmersiveFullscreenController::BubbleManager::StopObserving( +void ImmersiveFullscreenController::BubbleObserver::StopObserving( aura::Window* bubble) { if (bubbles_.erase(bubble)) { bubble->RemoveObserver(this); @@ -185,7 +209,7 @@ void ImmersiveFullscreenController::BubbleManager::StopObserving( } } -void ImmersiveFullscreenController::BubbleManager::UpdateRevealedLock() { +void ImmersiveFullscreenController::BubbleObserver::UpdateRevealedLock() { bool has_visible_bubble = false; for (std::set<aura::Window*>::const_iterator it = bubbles_.begin(); it != bubbles_.end(); ++it) { @@ -216,18 +240,22 @@ void ImmersiveFullscreenController::BubbleManager::UpdateRevealedLock() { // visibility change. for (std::set<aura::Window*>::const_iterator it = bubbles_.begin(); it != bubbles_.end(); ++it) { - AsBubbleDelegate(*it)->OnAnchorBoundsChanged(); + views::BubbleDelegateView* bubble = AsBubbleDelegate(*it); + if (bubble) + bubble->OnAnchorBoundsChanged(); + else + AsBubbleDialogDelegate(*it)->OnAnchorBoundsChanged(); } } } -void ImmersiveFullscreenController::BubbleManager::OnWindowVisibilityChanged( +void ImmersiveFullscreenController::BubbleObserver::OnWindowVisibilityChanged( aura::Window*, bool visible) { UpdateRevealedLock(); } -void ImmersiveFullscreenController::BubbleManager::OnWindowDestroying( +void ImmersiveFullscreenController::BubbleObserver::OnWindowDestroying( aura::Window* window) { StopObserving(window); } @@ -489,21 +517,19 @@ void ImmersiveFullscreenController::AnimationProgressed( void ImmersiveFullscreenController::OnTransientChildAdded( aura::Window* window, aura::Window* transient) { - views::BubbleDelegateView* bubble_delegate = AsBubbleDelegate(transient); - if (bubble_delegate && - bubble_delegate->GetAnchorView() && - top_container_->Contains(bubble_delegate->GetAnchorView())) { + views::View* anchor = GetAnchorView(transient); + if (anchor && top_container_->Contains(anchor)) { // Observe the aura::Window because the BubbleDelegateView may not be // parented to the widget's root view yet so |bubble_delegate->GetWidget()| // may still return NULL. - bubble_manager_->StartObserving(transient); + bubble_observer_->StartObserving(transient); } } void ImmersiveFullscreenController::OnTransientChildRemoved( aura::Window* window, aura::Window* transient) { - bubble_manager_->StopObserving(transient); + bubble_observer_->StopObserving(transient); } //////////////////////////////////////////////////////////////////////////////// @@ -543,7 +569,7 @@ void ImmersiveFullscreenController::EnableWindowObservers(bool enable) { ::wm::TransientWindowManager::Get(native_window_)-> AddObserver(this); - RecreateBubbleManager(); + RecreateBubbleObserver(); } else { widget_->RemoveObserver(this); focus_manager->RemoveFocusChangeListener(this); @@ -552,10 +578,10 @@ void ImmersiveFullscreenController::EnableWindowObservers(bool enable) { RemoveObserver(this); // We have stopped observing whether transient children are added or removed - // to |native_window_|. The set of bubbles that BubbleManager is observing - // will become stale really quickly. Destroy BubbleManager and recreate it + // to |native_window_|. The set of bubbles that BubbleObserver is observing + // will become stale really quickly. Destroy BubbleObserver and recreate it // when we start observing |native_window_| again. - bubble_manager_.reset(); + bubble_observer_.reset(); animation_->Stop(); } @@ -705,10 +731,8 @@ void ImmersiveFullscreenController::UpdateFocusRevealedLock() { } else { aura::Window* active_window = aura::client::GetActivationClient( native_window_->GetRootWindow())->GetActiveWindow(); - views::BubbleDelegateView* bubble_delegate = - AsBubbleDelegate(active_window); - if (bubble_delegate && bubble_delegate->anchor_widget()) { - // BubbleManager will already have locked the top-of-window views if the + if (GetAnchorView(active_window)) { + // BubbleObserver will already have locked the top-of-window views if the // bubble is anchored to a child of |top_container_|. Don't acquire // |focus_revealed_lock_| here for the sake of simplicity. // Note: Instead of checking for the existence of the |anchor_view|, @@ -933,19 +957,15 @@ bool ImmersiveFullscreenController::ShouldHandleGestureEvent( location.x() < hit_bounds_in_screen.right()); } -void ImmersiveFullscreenController::RecreateBubbleManager() { - bubble_manager_.reset(new BubbleManager(this)); +void ImmersiveFullscreenController::RecreateBubbleObserver() { + bubble_observer_.reset(new BubbleObserver(this)); const std::vector<aura::Window*> transient_children = ::wm::GetTransientChildren(native_window_); for (size_t i = 0; i < transient_children.size(); ++i) { aura::Window* transient_child = transient_children[i]; - views::BubbleDelegateView* bubble_delegate = - AsBubbleDelegate(transient_child); - if (bubble_delegate && - bubble_delegate->GetAnchorView() && - top_container_->Contains(bubble_delegate->GetAnchorView())) { - bubble_manager_->StartObserving(transient_child); - } + views::View* anchor_view = GetAnchorView(transient_child); + if (anchor_view && top_container_->Contains(anchor_view)) + bubble_observer_->StartObserving(transient_child); } } diff --git a/ash/wm/immersive_fullscreen_controller.h b/ash/wm/immersive_fullscreen_controller.h index 8b3f141..a9d7614 100644 --- a/ash/wm/immersive_fullscreen_controller.h +++ b/ash/wm/immersive_fullscreen_controller.h @@ -238,9 +238,9 @@ class ASH_EXPORT ImmersiveFullscreenController // is a bezel sensor above the top container. bool ShouldHandleGestureEvent(const gfx::Point& location) const; - // Recreate |bubble_manager_| and start observing any bubbles anchored to a + // Recreate |bubble_observer_| and start observing any bubbles anchored to a // child of |top_container_|. - void RecreateBubbleManager(); + void RecreateBubbleObserver(); // Not owned. Delegate* delegate_; @@ -288,8 +288,8 @@ class ASH_EXPORT ImmersiveFullscreenController bool animations_disabled_for_test_; // Manages bubbles which are anchored to a child of |top_container_|. - class BubbleManager; - scoped_ptr<BubbleManager> bubble_manager_; + class BubbleObserver; + scoped_ptr<BubbleObserver> bubble_observer_; base::WeakPtrFactory<ImmersiveFullscreenController> weak_ptr_factory_; |