diff options
Diffstat (limited to 'ui/aura_shell/compact_layout_manager.cc')
-rw-r--r-- | ui/aura_shell/compact_layout_manager.cc | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/ui/aura_shell/compact_layout_manager.cc b/ui/aura_shell/compact_layout_manager.cc index e7b762e..059a478 100644 --- a/ui/aura_shell/compact_layout_manager.cc +++ b/ui/aura_shell/compact_layout_manager.cc @@ -9,11 +9,13 @@ #include "ui/aura_shell/window_util.h" #include "ui/base/ui_base_types.h" #include "ui/gfx/screen.h" +#include "ui/views/widget/widget.h" namespace aura_shell { namespace internal { -CompactLayoutManager::CompactLayoutManager() { +CompactLayoutManager::CompactLayoutManager(views::Widget* status_area_widget) + : status_area_widget_(status_area_widget) { } CompactLayoutManager::~CompactLayoutManager() { @@ -27,8 +29,10 @@ void CompactLayoutManager::OnWindowResized() { void CompactLayoutManager::OnWindowAddedToLayout(aura::Window* child) { windows_.insert(child); child->AddObserver(this); - if (child->GetProperty(aura::client::kShowStateKey)) + if (child->GetProperty(aura::client::kShowStateKey)) { UpdateBoundsFromShowState(child); + UpdateStatusAreaVisibility(); + } } void CompactLayoutManager::OnWillRemoveWindowFromLayout(aura::Window* child) { @@ -39,6 +43,7 @@ void CompactLayoutManager::OnWillRemoveWindowFromLayout(aura::Window* child) { void CompactLayoutManager::OnChildWindowVisibilityChanged( aura::Window* child, bool visibile) { + UpdateStatusAreaVisibility(); } void CompactLayoutManager::SetChildBounds( @@ -55,8 +60,25 @@ void CompactLayoutManager::SetChildBounds( void CompactLayoutManager::OnWindowPropertyChanged(aura::Window* window, const char* name, void* old) { - if (name == aura::client::kShowStateKey) + if (name == aura::client::kShowStateKey) { UpdateBoundsFromShowState(window); + UpdateStatusAreaVisibility(); + } +} + +////////////////////////////////////////////////////////////////////////////// +// CompactLayoutManager, private: + +void CompactLayoutManager::UpdateStatusAreaVisibility() { + if (!status_area_widget_) + return; + // Full screen windows should hide the status area widget. + bool fullscreen_window = HasFullscreenWindow(windows_); + bool widget_visible = status_area_widget_->IsVisible(); + if (fullscreen_window && widget_visible) + status_area_widget_->Hide(); + else if (!fullscreen_window && !widget_visible) + status_area_widget_->Show(); } } // namespace internal |