diff options
-rw-r--r-- | ash/wm/base_layout_manager.cc | 3 | ||||
-rw-r--r-- | ash/wm/base_layout_manager.h | 1 | ||||
-rw-r--r-- | ash/wm/panel_layout_manager.cc | 3 | ||||
-rw-r--r-- | ash/wm/panel_layout_manager.h | 1 | ||||
-rw-r--r-- | ash/wm/root_window_layout_manager.cc | 3 | ||||
-rw-r--r-- | ash/wm/root_window_layout_manager.h | 1 | ||||
-rw-r--r-- | ash/wm/shelf_layout_manager.cc | 3 | ||||
-rw-r--r-- | ash/wm/shelf_layout_manager.h | 1 | ||||
-rw-r--r-- | ash/wm/status_area_layout_manager.cc | 3 | ||||
-rw-r--r-- | ash/wm/status_area_layout_manager.h | 3 | ||||
-rw-r--r-- | ash/wm/system_modal_container_layout_manager.cc | 4 | ||||
-rw-r--r-- | ash/wm/system_modal_container_layout_manager.h | 1 | ||||
-rw-r--r-- | ash/wm/workspace/workspace_layout_manager.cc | 31 | ||||
-rw-r--r-- | ash/wm/workspace/workspace_layout_manager.h | 1 | ||||
-rw-r--r-- | ash/wm/workspace/workspace_manager.cc | 6 | ||||
-rw-r--r-- | ash/wm/workspace/workspace_manager_unittest.cc | 38 | ||||
-rw-r--r-- | ui/aura/layout_manager.h | 5 | ||||
-rw-r--r-- | ui/aura/window.cc | 2 | ||||
-rw-r--r-- | ui/aura/window_unittest.cc | 1 | ||||
-rw-r--r-- | ui/views/widget/native_widget_aura_unittest.cc | 2 |
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 { } |