summaryrefslogtreecommitdiffstats
path: root/ui/aura_shell/compact_layout_manager.cc
diff options
context:
space:
mode:
Diffstat (limited to 'ui/aura_shell/compact_layout_manager.cc')
-rw-r--r--ui/aura_shell/compact_layout_manager.cc28
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