summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ash/wm/base_layout_manager.cc3
-rw-r--r--ash/wm/base_layout_manager.h1
-rw-r--r--ash/wm/panel_layout_manager.cc3
-rw-r--r--ash/wm/panel_layout_manager.h1
-rw-r--r--ash/wm/root_window_layout_manager.cc3
-rw-r--r--ash/wm/root_window_layout_manager.h1
-rw-r--r--ash/wm/shelf_layout_manager.cc3
-rw-r--r--ash/wm/shelf_layout_manager.h1
-rw-r--r--ash/wm/status_area_layout_manager.cc3
-rw-r--r--ash/wm/status_area_layout_manager.h3
-rw-r--r--ash/wm/system_modal_container_layout_manager.cc4
-rw-r--r--ash/wm/system_modal_container_layout_manager.h1
-rw-r--r--ash/wm/workspace/workspace_layout_manager.cc31
-rw-r--r--ash/wm/workspace/workspace_layout_manager.h1
-rw-r--r--ash/wm/workspace/workspace_manager.cc6
-rw-r--r--ash/wm/workspace/workspace_manager_unittest.cc38
-rw-r--r--ui/aura/layout_manager.h5
-rw-r--r--ui/aura/window.cc2
-rw-r--r--ui/aura/window_unittest.cc1
-rw-r--r--ui/views/widget/native_widget_aura_unittest.cc2
20 files changed, 93 insertions, 20 deletions
diff --git a/ash/wm/base_layout_manager.cc b/ash/wm/base_layout_manager.cc
index 9277c50..4b9a906 100644
--- a/ash/wm/base_layout_manager.cc
+++ b/ash/wm/base_layout_manager.cc
@@ -90,6 +90,9 @@ void BaseLayoutManager::OnWillRemoveWindowFromLayout(aura::Window* child) {
child->RemoveObserver(this);
}
+void BaseLayoutManager::OnWindowRemovedFromLayout(aura::Window* child) {
+}
+
void BaseLayoutManager::OnChildWindowVisibilityChanged(aura::Window* child,
bool visible) {
if (visible && wm::IsWindowMinimized(child)) {
diff --git a/ash/wm/base_layout_manager.h b/ash/wm/base_layout_manager.h
index 0638d36..4965777 100644
--- a/ash/wm/base_layout_manager.h
+++ b/ash/wm/base_layout_manager.h
@@ -46,6 +46,7 @@ class ASH_EXPORT BaseLayoutManager : public aura::LayoutManager,
virtual void OnWindowResized() OVERRIDE;
virtual void OnWindowAddedToLayout(aura::Window* child) OVERRIDE;
virtual void OnWillRemoveWindowFromLayout(aura::Window* child) OVERRIDE;
+ virtual void OnWindowRemovedFromLayout(aura::Window* child) OVERRIDE;
virtual void OnChildWindowVisibilityChanged(aura::Window* child,
bool visible) OVERRIDE;
virtual void SetChildBounds(aura::Window* child,
diff --git a/ash/wm/panel_layout_manager.cc b/ash/wm/panel_layout_manager.cc
index d793428..3c8a522 100644
--- a/ash/wm/panel_layout_manager.cc
+++ b/ash/wm/panel_layout_manager.cc
@@ -107,6 +107,9 @@ void PanelLayoutManager::OnWillRemoveWindowFromLayout(aura::Window* child) {
Relayout();
}
+void PanelLayoutManager::OnWindowRemovedFromLayout(aura::Window* child) {
+}
+
void PanelLayoutManager::OnChildWindowVisibilityChanged(aura::Window* child,
bool visible) {
Relayout();
diff --git a/ash/wm/panel_layout_manager.h b/ash/wm/panel_layout_manager.h
index 6951c29..07ffd0e 100644
--- a/ash/wm/panel_layout_manager.h
+++ b/ash/wm/panel_layout_manager.h
@@ -47,6 +47,7 @@ class ASH_EXPORT PanelLayoutManager : public aura::LayoutManager {
virtual void OnWindowResized() OVERRIDE;
virtual void OnWindowAddedToLayout(aura::Window* child) OVERRIDE;
virtual void OnWillRemoveWindowFromLayout(aura::Window* child) OVERRIDE;
+ virtual void OnWindowRemovedFromLayout(aura::Window* child) OVERRIDE;
virtual void OnChildWindowVisibilityChanged(aura::Window* child,
bool visibile) OVERRIDE;
virtual void SetChildBounds(aura::Window* child,
diff --git a/ash/wm/root_window_layout_manager.cc b/ash/wm/root_window_layout_manager.cc
index 7514d9a..f4b6fff 100644
--- a/ash/wm/root_window_layout_manager.cc
+++ b/ash/wm/root_window_layout_manager.cc
@@ -65,6 +65,9 @@ void RootWindowLayoutManager::OnWillRemoveWindowFromLayout(
aura::Window* child) {
}
+void RootWindowLayoutManager::OnWindowRemovedFromLayout(aura::Window* child) {
+}
+
void RootWindowLayoutManager::OnChildWindowVisibilityChanged(
aura::Window* child,
bool visible) {
diff --git a/ash/wm/root_window_layout_manager.h b/ash/wm/root_window_layout_manager.h
index e39f476..5bbcf74 100644
--- a/ash/wm/root_window_layout_manager.h
+++ b/ash/wm/root_window_layout_manager.h
@@ -50,6 +50,7 @@ class RootWindowLayoutManager : public aura::LayoutManager {
virtual void OnWindowResized() OVERRIDE;
virtual void OnWindowAddedToLayout(aura::Window* child) OVERRIDE;
virtual void OnWillRemoveWindowFromLayout(aura::Window* child) OVERRIDE;
+ virtual void OnWindowRemovedFromLayout(aura::Window* child) OVERRIDE;
virtual void OnChildWindowVisibilityChanged(aura::Window* child,
bool visible) OVERRIDE;
virtual void SetChildBounds(aura::Window* child,
diff --git a/ash/wm/shelf_layout_manager.cc b/ash/wm/shelf_layout_manager.cc
index c2fd695..dc6eee5 100644
--- a/ash/wm/shelf_layout_manager.cc
+++ b/ash/wm/shelf_layout_manager.cc
@@ -264,6 +264,9 @@ void ShelfLayoutManager::OnWindowAddedToLayout(aura::Window* child) {
void ShelfLayoutManager::OnWillRemoveWindowFromLayout(aura::Window* child) {
}
+void ShelfLayoutManager::OnWindowRemovedFromLayout(aura::Window* child) {
+}
+
void ShelfLayoutManager::OnChildWindowVisibilityChanged(aura::Window* child,
bool visible) {
}
diff --git a/ash/wm/shelf_layout_manager.h b/ash/wm/shelf_layout_manager.h
index 9c3cc1d..9f9275d 100644
--- a/ash/wm/shelf_layout_manager.h
+++ b/ash/wm/shelf_layout_manager.h
@@ -126,6 +126,7 @@ class ASH_EXPORT ShelfLayoutManager : public aura::LayoutManager,
virtual void OnWindowResized() OVERRIDE;
virtual void OnWindowAddedToLayout(aura::Window* child) OVERRIDE;
virtual void OnWillRemoveWindowFromLayout(aura::Window* child) OVERRIDE;
+ virtual void OnWindowRemovedFromLayout(aura::Window* child) OVERRIDE;
virtual void OnChildWindowVisibilityChanged(aura::Window* child,
bool visible) OVERRIDE;
virtual void SetChildBounds(aura::Window* child,
diff --git a/ash/wm/status_area_layout_manager.cc b/ash/wm/status_area_layout_manager.cc
index bec0836..cbc2833 100644
--- a/ash/wm/status_area_layout_manager.cc
+++ b/ash/wm/status_area_layout_manager.cc
@@ -37,6 +37,9 @@ void StatusAreaLayoutManager::OnWillRemoveWindowFromLayout(
aura::Window* child) {
}
+void StatusAreaLayoutManager::OnWindowRemovedFromLayout(aura::Window* child) {
+}
+
void StatusAreaLayoutManager::OnChildWindowVisibilityChanged(
aura::Window* child, bool visible) {
}
diff --git a/ash/wm/status_area_layout_manager.h b/ash/wm/status_area_layout_manager.h
index 8554565..a638a36 100644
--- a/ash/wm/status_area_layout_manager.h
+++ b/ash/wm/status_area_layout_manager.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -27,6 +27,7 @@ class StatusAreaLayoutManager : public aura::LayoutManager {
virtual void OnWindowResized() OVERRIDE;
virtual void OnWindowAddedToLayout(aura::Window* child) OVERRIDE;
virtual void OnWillRemoveWindowFromLayout(aura::Window* child) OVERRIDE;
+ virtual void OnWindowRemovedFromLayout(aura::Window* child) OVERRIDE;
virtual void OnChildWindowVisibilityChanged(aura::Window* child,
bool visible) OVERRIDE;
virtual void SetChildBounds(aura::Window* child,
diff --git a/ash/wm/system_modal_container_layout_manager.cc b/ash/wm/system_modal_container_layout_manager.cc
index cdad8b8..701a980 100644
--- a/ash/wm/system_modal_container_layout_manager.cc
+++ b/ash/wm/system_modal_container_layout_manager.cc
@@ -93,6 +93,10 @@ void SystemModalContainerLayoutManager::OnWillRemoveWindowFromLayout(
RemoveModalWindow(child);
}
+void SystemModalContainerLayoutManager::OnWindowRemovedFromLayout(
+ aura::Window* child) {
+}
+
void SystemModalContainerLayoutManager::OnChildWindowVisibilityChanged(
aura::Window* child,
bool visible) {
diff --git a/ash/wm/system_modal_container_layout_manager.h b/ash/wm/system_modal_container_layout_manager.h
index 10a5dcd..a689880 100644
--- a/ash/wm/system_modal_container_layout_manager.h
+++ b/ash/wm/system_modal_container_layout_manager.h
@@ -43,6 +43,7 @@ class ASH_EXPORT SystemModalContainerLayoutManager
virtual void OnWindowResized() OVERRIDE;
virtual void OnWindowAddedToLayout(aura::Window* child) OVERRIDE;
virtual void OnWillRemoveWindowFromLayout(aura::Window* child) OVERRIDE;
+ virtual void OnWindowRemovedFromLayout(aura::Window* child) OVERRIDE;
virtual void OnChildWindowVisibilityChanged(aura::Window* child,
bool visibile) OVERRIDE;
virtual void SetChildBounds(aura::Window* child,
diff --git a/ash/wm/workspace/workspace_layout_manager.cc b/ash/wm/workspace/workspace_layout_manager.cc
index ca28cd4..a7e8a53 100644
--- a/ash/wm/workspace/workspace_layout_manager.cc
+++ b/ash/wm/workspace/workspace_layout_manager.cc
@@ -39,26 +39,35 @@ void WorkspaceLayoutManager::OnWindowResized() {
void WorkspaceLayoutManager::OnWindowAddedToLayout(aura::Window* child) {
BaseLayoutManager::OnWindowAddedToLayout(child);
- if (!workspace_manager_->IsManagedWindow(child))
+ if (!workspace_manager_->IsManagedWindow(child)) {
+ if (child->IsVisible())
+ workspace_manager_->UpdateShelfVisibility();
return;
+ }
- if (child->IsVisible()) {
+ if (child->IsVisible())
workspace_manager_->AddWindow(child);
- }
}
-void WorkspaceLayoutManager::OnWillRemoveWindowFromLayout(
- aura::Window* child) {
+void WorkspaceLayoutManager::OnWillRemoveWindowFromLayout(aura::Window* child) {
workspace_manager_->RemoveWindow(child);
BaseLayoutManager::OnWillRemoveWindowFromLayout(child);
}
+void WorkspaceLayoutManager::OnWindowRemovedFromLayout(aura::Window* child) {
+ workspace_manager_->UpdateShelfVisibility();
+ BaseLayoutManager::OnWindowRemovedFromLayout(child);
+}
+
void WorkspaceLayoutManager::OnChildWindowVisibilityChanged(
aura::Window* child,
bool visible) {
BaseLayoutManager::OnChildWindowVisibilityChanged(child, visible);
- if (!workspace_manager_->IsManagedWindow(child))
+ if (!workspace_manager_->IsManagedWindow(child)) {
+ workspace_manager_->UpdateShelfVisibility();
return;
+ }
+
if (visible)
workspace_manager_->AddWindow(child);
else
@@ -91,13 +100,15 @@ void WorkspaceLayoutManager::ShowStateChanged(
aura::Window* window,
ui::WindowShowState last_show_state) {
if (workspace_manager_->IsManagedWindow(window)) {
- if (wm::IsWindowMinimized(window))
+ if (wm::IsWindowMinimized(window)) {
workspace_manager_->RemoveWindow(window);
- else if ((window->TargetVisibility() ||
- (last_show_state == ui::SHOW_STATE_MINIMIZED)) &&
- !workspace_manager_->IsManagingWindow(window)) {
+ } else if ((window->TargetVisibility() ||
+ last_show_state == ui::SHOW_STATE_MINIMIZED) &&
+ !workspace_manager_->IsManagingWindow(window)) {
workspace_manager_->AddWindow(window);
}
+ } else {
+ workspace_manager_->UpdateShelfVisibility();
}
BaseLayoutManager::ShowStateChanged(window, last_show_state);
workspace_manager_->ShowStateChanged(window);
diff --git a/ash/wm/workspace/workspace_layout_manager.h b/ash/wm/workspace/workspace_layout_manager.h
index 1969c04..7cc962c 100644
--- a/ash/wm/workspace/workspace_layout_manager.h
+++ b/ash/wm/workspace/workspace_layout_manager.h
@@ -43,6 +43,7 @@ class ASH_EXPORT WorkspaceLayoutManager : public BaseLayoutManager {
virtual void OnWindowResized() OVERRIDE;
virtual void OnWindowAddedToLayout(aura::Window* child) OVERRIDE;
virtual void OnWillRemoveWindowFromLayout(aura::Window* child) OVERRIDE;
+ virtual void OnWindowRemovedFromLayout(aura::Window* child) OVERRIDE;
virtual void OnChildWindowVisibilityChanged(aura::Window* child,
bool visibile) OVERRIDE;
virtual void SetChildBounds(aura::Window* child,
diff --git a/ash/wm/workspace/workspace_manager.cc b/ash/wm/workspace/workspace_manager.cc
index e710137..07a3008 100644
--- a/ash/wm/workspace/workspace_manager.cc
+++ b/ash/wm/workspace/workspace_manager.cc
@@ -66,7 +66,8 @@ WorkspaceManager::~WorkspaceManager() {
bool WorkspaceManager::IsManagedWindow(aura::Window* window) const {
return window->type() == aura::client::WINDOW_TYPE_NORMAL &&
- !window->transient_parent() && ash::GetTrackedByWorkspace(window) &&
+ !window->transient_parent() &&
+ ash::GetTrackedByWorkspace(window) &&
!ash::GetPersistsAcrossAllWorkspaces(window);
}
@@ -121,7 +122,6 @@ void WorkspaceManager::RemoveWindow(aura::Window* window) {
return;
workspace->RemoveWindow(window);
CleanupWorkspace(workspace);
- UpdateShelfVisibility();
}
void WorkspaceManager::SetActiveWorkspaceByWindow(aura::Window* window) {
@@ -145,8 +145,6 @@ WorkspaceManager::WindowState WorkspaceManager::GetWindowState() {
bool window_overlaps_launcher = false;
for (aura::Window::Windows::const_iterator i = windows.begin();
i != windows.end(); ++i) {
- if (!IsManagingWindow(*i))
- continue;
ui::Layer* layer = (*i)->layer();
if (!layer->GetTargetVisibility() || layer->GetTargetOpacity() == 0.0f)
continue;
diff --git a/ash/wm/workspace/workspace_manager_unittest.cc b/ash/wm/workspace/workspace_manager_unittest.cc
index a46c35d..0fa1e59 100644
--- a/ash/wm/workspace/workspace_manager_unittest.cc
+++ b/ash/wm/workspace/workspace_manager_unittest.cc
@@ -51,8 +51,7 @@ class WorkspaceManagerTest : public test::AshTestBase {
}
aura::Window* GetViewport() {
- return Shell::GetInstance()->GetContainer(
- internal::kShellWindowId_DefaultContainer);
+ return Shell::GetInstance()->GetContainer(kShellWindowId_DefaultContainer);
}
const std::vector<Workspace*>& workspaces() const {
@@ -84,10 +83,10 @@ class WorkspaceManagerTest : public test::AshTestBase {
}
protected:
- internal::WorkspaceManager* manager_;
+ WorkspaceManager* manager_;
private:
- scoped_ptr<internal::ActivationController> activation_controller_;
+ scoped_ptr<ActivationController> activation_controller_;
DISALLOW_COPY_AND_ASSIGN(WorkspaceManagerTest);
};
@@ -587,5 +586,36 @@ TEST_F(WorkspaceManagerTest, ShowMinimizedPersistWindow) {
EXPECT_TRUE(w1->IsVisible());
}
+// Test that we report we're in the fullscreen state even if the fullscreen
+// window isn't being managed by us (http://crbug.com/123931).
+TEST_F(WorkspaceManagerTest, GetWindowStateWithUnmanagedFullscreenWindow) {
+ ShelfLayoutManager* shelf = Shell::GetInstance()->shelf();
+
+ // We need to create a regular window first so there's an active workspace.
+ scoped_ptr<Window> w1(CreateTestWindow());
+ w1->Show();
+
+ scoped_ptr<Window> w2(CreateTestWindow());
+ w2->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_FULLSCREEN);
+ SetPersistsAcrossAllWorkspaces(
+ w2.get(),
+ WINDOW_PERSISTS_ACROSS_ALL_WORKSPACES_VALUE_YES);
+ w2->Show();
+
+ EXPECT_EQ(ShelfLayoutManager::HIDDEN, shelf->visibility_state());
+ ASSERT_FALSE(manager_->IsManagedWindow(w2.get()));
+ EXPECT_EQ(WorkspaceManager::WINDOW_STATE_FULL_SCREEN,
+ manager_->GetWindowState());
+
+ w2->Hide();
+ EXPECT_EQ(ShelfLayoutManager::VISIBLE, shelf->visibility_state());
+
+ w2->Show();
+ EXPECT_EQ(ShelfLayoutManager::HIDDEN, shelf->visibility_state());
+
+ w2.reset();
+ EXPECT_EQ(ShelfLayoutManager::VISIBLE, shelf->visibility_state());
+}
+
} // namespace internal
} // namespace ash
diff --git a/ui/aura/layout_manager.h b/ui/aura/layout_manager.h
index 591a544..c7ca976 100644
--- a/ui/aura/layout_manager.h
+++ b/ui/aura/layout_manager.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -31,6 +31,9 @@ class AURA_EXPORT LayoutManager {
// Invoked prior to removing |window|.
virtual void OnWillRemoveWindowFromLayout(Window* child) = 0;
+ // Invoked after removing |window|.
+ virtual void OnWindowRemovedFromLayout(Window* child) = 0;
+
// Invoked when the |SetVisible()| is invoked on the window |child|.
// |visible| is the value supplied to |SetVisible()|. If |visible| is true,
// window->IsVisible() may still return false. See description in
diff --git a/ui/aura/window.cc b/ui/aura/window.cc
index e01f2e8..df3e0ca3 100644
--- a/ui/aura/window.cc
+++ b/ui/aura/window.cc
@@ -335,6 +335,8 @@ void Window::RemoveChild(Window* child) {
layer_->Remove(child->layer_);
children_.erase(i);
child->OnParentChanged();
+ if (layout_manager_.get())
+ layout_manager_->OnWindowRemovedFromLayout(child);
}
bool Window::Contains(const Window* other) const {
diff --git a/ui/aura/window_unittest.cc b/ui/aura/window_unittest.cc
index 30c5dd0..d989e68 100644
--- a/ui/aura/window_unittest.cc
+++ b/ui/aura/window_unittest.cc
@@ -1603,6 +1603,7 @@ class StackingMadrigalLayoutManager : public LayoutManager {
virtual void OnWindowResized() OVERRIDE {}
virtual void OnWindowAddedToLayout(Window* child) OVERRIDE {}
virtual void OnWillRemoveWindowFromLayout(Window* child) OVERRIDE {}
+ virtual void OnWindowRemovedFromLayout(Window* child) OVERRIDE {}
virtual void OnChildWindowVisibilityChanged(Window* child,
bool visible) OVERRIDE {
Window::Windows::const_iterator it = root_window_->children().begin();
diff --git a/ui/views/widget/native_widget_aura_unittest.cc b/ui/views/widget/native_widget_aura_unittest.cc
index ecf03e4..51d4bc9 100644
--- a/ui/views/widget/native_widget_aura_unittest.cc
+++ b/ui/views/widget/native_widget_aura_unittest.cc
@@ -113,6 +113,8 @@ class TestLayoutManager : public aura::LayoutManager {
}
virtual void OnWillRemoveWindowFromLayout(aura::Window* child) OVERRIDE {
}
+ virtual void OnWindowRemovedFromLayout(aura::Window* child) OVERRIDE {
+ }
virtual void OnChildWindowVisibilityChanged(aura::Window* child,
bool visible) OVERRIDE {
}