diff options
author | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-03 19:33:50 +0000 |
---|---|---|
committer | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-03 19:33:50 +0000 |
commit | f4bb9fded21dd5595e4d8da54ad2ab4b91ef7e49 (patch) | |
tree | bd95d23d19b05670229330197ae5e067ea4297dc /ash | |
parent | 688ee168aaeafcf9b7417841a3cf9fee4f47f4af (diff) | |
download | chromium_src-f4bb9fded21dd5595e4d8da54ad2ab4b91ef7e49.zip chromium_src-f4bb9fded21dd5595e4d8da54ad2ab4b91ef7e49.tar.gz chromium_src-f4bb9fded21dd5595e4d8da54ad2ab4b91ef7e49.tar.bz2 |
Changes all non-workspace code to talk to WorkspaceManager via
WorkspaceController. This is a precursor to making WorkspaceManager
an interface and adding a new WorkspaceManager variant for the new
window heurisics.
BUG=137342
TEST=none
R=ben@chromium.org
Review URL: https://chromiumcodereview.appspot.com/10852003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@149890 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ash')
-rw-r--r-- | ash/ash.gyp | 1 | ||||
-rw-r--r-- | ash/root_window_controller.cc | 3 | ||||
-rw-r--r-- | ash/shell.cc | 15 | ||||
-rw-r--r-- | ash/wm/shelf_layout_manager.cc | 17 | ||||
-rw-r--r-- | ash/wm/shelf_layout_manager.h | 8 | ||||
-rw-r--r-- | ash/wm/workspace/workspace_event_filter_unittest.cc | 7 | ||||
-rw-r--r-- | ash/wm/workspace/workspace_manager.cc | 13 | ||||
-rw-r--r-- | ash/wm/workspace/workspace_manager.h | 17 | ||||
-rw-r--r-- | ash/wm/workspace/workspace_manager_unittest.cc | 13 | ||||
-rw-r--r-- | ash/wm/workspace/workspace_types.h | 27 | ||||
-rw-r--r-- | ash/wm/workspace_controller.cc | 16 | ||||
-rw-r--r-- | ash/wm/workspace_controller.h | 18 | ||||
-rw-r--r-- | ash/wm/workspace_controller_test_helper.h | 3 |
13 files changed, 99 insertions, 59 deletions
diff --git a/ash/ash.gyp b/ash/ash.gyp index e05efd6..191e540 100644 --- a/ash/ash.gyp +++ b/ash/ash.gyp @@ -341,6 +341,7 @@ 'wm/workspace/workspace_layout_manager.h', 'wm/workspace/workspace_manager.cc', 'wm/workspace/workspace_manager.h', + 'wm/workspace/workspace_types.h', 'wm/workspace/workspace_window_resizer.cc', 'wm/workspace/workspace_window_resizer.h', ], diff --git a/ash/root_window_controller.cc b/ash/root_window_controller.cc index f2abcc5..33420b4 100644 --- a/ash/root_window_controller.cc +++ b/ash/root_window_controller.cc @@ -19,7 +19,6 @@ #include "ash/wm/toplevel_window_event_filter.h" #include "ash/wm/visibility_controller.h" #include "ash/wm/window_properties.h" -#include "ash/wm/workspace/workspace_manager.h" #include "ash/wm/workspace_controller.h" #include "ui/aura/client/activation_client.h" #include "ui/aura/client/aura_constants.h" @@ -289,7 +288,7 @@ void RootWindowController::CloseChildWindows() { } bool RootWindowController::IsInMaximizedMode() const { - return workspace_controller_->workspace_manager()->IsInMaximizedMode(); + return workspace_controller_->IsInMaximizedMode(); } void RootWindowController::MoveWindowsTo(aura::RootWindow* dst) { diff --git a/ash/shell.cc b/ash/shell.cc index 2e55736..805191e 100644 --- a/ash/shell.cc +++ b/ash/shell.cc @@ -65,7 +65,6 @@ #include "ash/wm/window_properties.h" #include "ash/wm/workspace/workspace_event_filter.h" #include "ash/wm/workspace/workspace_layout_manager.h" -#include "ash/wm/workspace/workspace_manager.h" #include "ash/wm/workspace_controller.h" #include "base/bind.h" #include "base/command_line.h" @@ -661,8 +660,8 @@ SystemTray* Shell::system_tray() { } int Shell::GetGridSize() const { - return GetPrimaryRootWindowController()->workspace_controller()-> - workspace_manager()->grid_size(); + return + GetPrimaryRootWindowController()->workspace_controller()->GetGridSize(); } void Shell::InitRootWindowForSecondaryDisplay(aura::RootWindow* root) { @@ -753,12 +752,11 @@ void Shell::InitLayoutManagersForPrimaryDisplay( controller->GetContainer(internal::kShellWindowId_StatusContainer)-> SetLayoutManager(status_area_layout_manager); - shelf_layout_manager->set_workspace_manager( - controller->workspace_controller()->workspace_manager()); + shelf_layout_manager->set_workspace_controller( + controller->workspace_controller()); // TODO(oshima): Support multiple displays. - controller->workspace_controller()->workspace_manager()-> - set_shelf(shelf()); + controller->workspace_controller()->SetShelf(shelf()); // Create Panel layout manager aura::Window* panel_container = GetContainer( @@ -772,11 +770,12 @@ void Shell::InitLayoutManagersForPrimaryDisplay( panel_container->SetLayoutManager(panel_layout_manager_); } +// TODO: this is only used in tests, move with test. void Shell::DisableWorkspaceGridLayout() { RootWindowControllerList controllers = GetAllRootWindowControllers(); for (RootWindowControllerList::iterator iter = controllers.begin(); iter != controllers.end(); ++iter) - (*iter)->workspace_controller()->workspace_manager()->set_grid_size(0); + (*iter)->workspace_controller()->SetGridSize(0); } void Shell::SetCursor(gfx::NativeCursor cursor) { diff --git a/ash/wm/shelf_layout_manager.cc b/ash/wm/shelf_layout_manager.cc index 717425d..81d6e39 100644 --- a/ash/wm/shelf_layout_manager.cc +++ b/ash/wm/shelf_layout_manager.cc @@ -14,7 +14,7 @@ #include "ash/system/status_area_widget.h" #include "ash/system/tray/system_tray.h" #include "ash/system/web_notification/web_notification_tray.h" -#include "ash/wm/workspace/workspace_manager.h" +#include "ash/wm/workspace_controller.h" #include "base/auto_reset.h" #include "base/i18n/rtl.h" #include "ui/aura/client/activation_client.h" @@ -129,7 +129,7 @@ ShelfLayoutManager::ShelfLayoutManager(views::Widget* status) alignment_(SHELF_ALIGNMENT_BOTTOM), launcher_(NULL), status_(status), - workspace_manager_(NULL), + workspace_controller_(NULL), window_overlaps_shelf_(false) { Shell::GetInstance()->AddShellObserver(this); aura::client::GetActivationClient(root_window_)->AddObserver(this); @@ -231,24 +231,23 @@ void ShelfLayoutManager::UpdateVisibilityState() { if (delegate && delegate->IsScreenLocked()) { SetState(VISIBLE); } else { - WorkspaceManager::WindowState window_state( - workspace_manager_->GetWindowState()); + WorkspaceWindowState window_state(workspace_controller_->GetWindowState()); switch (window_state) { - case WorkspaceManager::WINDOW_STATE_FULL_SCREEN: + case WORKSPACE_WINDOW_STATE_FULL_SCREEN: SetState(HIDDEN); break; - case WorkspaceManager::WINDOW_STATE_MAXIMIZED: + case WORKSPACE_WINDOW_STATE_MAXIMIZED: SetState(auto_hide_behavior_ != SHELF_AUTO_HIDE_BEHAVIOR_NEVER ? AUTO_HIDE : VISIBLE); break; - case WorkspaceManager::WINDOW_STATE_WINDOW_OVERLAPS_SHELF: - case WorkspaceManager::WINDOW_STATE_DEFAULT: + case WORKSPACE_WINDOW_STATE_WINDOW_OVERLAPS_SHELF: + case WORKSPACE_WINDOW_STATE_DEFAULT: SetState(auto_hide_behavior_ == SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS ? AUTO_HIDE : VISIBLE); SetWindowOverlapsShelf(window_state == - WorkspaceManager::WINDOW_STATE_WINDOW_OVERLAPS_SHELF); + WORKSPACE_WINDOW_STATE_WINDOW_OVERLAPS_SHELF); } } } diff --git a/ash/wm/shelf_layout_manager.h b/ash/wm/shelf_layout_manager.h index a61c2db..5797a59 100644 --- a/ash/wm/shelf_layout_manager.h +++ b/ash/wm/shelf_layout_manager.h @@ -32,7 +32,7 @@ class ScreenAsh; namespace internal { class ShelfLayoutManagerTest; -class WorkspaceManager; +class WorkspaceController; // ShelfLayoutManager is the layout manager responsible for the launcher and // status widgets. The launcher is given the total available width and told the @@ -98,8 +98,8 @@ class ASH_EXPORT ShelfLayoutManager : bool SetAlignment(ShelfAlignment alignment); ShelfAlignment alignment() const { return alignment_; } - void set_workspace_manager(WorkspaceManager* manager) { - workspace_manager_ = manager; + void set_workspace_controller(WorkspaceController* controller) { + workspace_controller_ = controller; } views::Widget* launcher_widget() { @@ -261,7 +261,7 @@ class ASH_EXPORT ShelfLayoutManager : Launcher* launcher_; views::Widget* status_; - WorkspaceManager* workspace_manager_; + WorkspaceController* workspace_controller_; // Do any windows overlap the shelf? This is maintained by WorkspaceManager. bool window_overlaps_shelf_; diff --git a/ash/wm/workspace/workspace_event_filter_unittest.cc b/ash/wm/workspace/workspace_event_filter_unittest.cc index 3965e93..9aafb1f 100644 --- a/ash/wm/workspace/workspace_event_filter_unittest.cc +++ b/ash/wm/workspace/workspace_event_filter_unittest.cc @@ -7,6 +7,7 @@ #include "ash/shell.h" #include "ash/test/ash_test_base.h" #include "ash/wm/window_util.h" +#include "ash/wm/workspace_controller_test_helper.h" #include "ash/wm/workspace/workspace_manager.h" #include "ash/wm/workspace_controller.h" #include "ui/aura/test/event_generator.h" @@ -40,9 +41,9 @@ class WorkspaceEventFilterTest : public test::AshTestBase { }; TEST_F(WorkspaceEventFilterTest, DoubleClickSingleAxisResizeEdge) { - Shell::TestApi shell_test(Shell::GetInstance()); - WorkspaceManager* manager = - shell_test.workspace_controller()->workspace_manager(); + WorkspaceControllerTestHelper workspace_helper( + Shell::TestApi(Shell::GetInstance()).workspace_controller()); + WorkspaceManager* manager = workspace_helper.workspace_manager(); manager->set_grid_size(0); // Double clicking the vertical resize edge of a window should maximize it diff --git a/ash/wm/workspace/workspace_manager.cc b/ash/wm/workspace/workspace_manager.cc index fd5f66e..aac67bc 100644 --- a/ash/wm/workspace/workspace_manager.cc +++ b/ash/wm/workspace/workspace_manager.cc @@ -139,9 +139,9 @@ void WorkspaceManager::UpdateShelfVisibility() { shelf_->UpdateVisibilityState(); } -WorkspaceManager::WindowState WorkspaceManager::GetWindowState() { +WorkspaceWindowState WorkspaceManager::GetWindowState() const { if (!shelf_ || !active_workspace_) - return WINDOW_STATE_DEFAULT; + return WORKSPACE_WINDOW_STATE_DEFAULT; // TODO: this code needs to be made multi-display aware. gfx::Rect shelf_bounds(shelf_->GetIdealBounds()); @@ -158,16 +158,17 @@ WorkspaceManager::WindowState WorkspaceManager::GetWindowState() { // we hit a maximized window. has_maximized_window = true; } else if (wm::IsWindowFullscreen(*i)) { - return WINDOW_STATE_FULL_SCREEN; + return WORKSPACE_WINDOW_STATE_FULL_SCREEN; } if (!window_overlaps_launcher && (*i)->bounds().Intersects(shelf_bounds)) window_overlaps_launcher = true; } if (has_maximized_window) - return WINDOW_STATE_MAXIMIZED; + return WORKSPACE_WINDOW_STATE_MAXIMIZED; - return window_overlaps_launcher ? WINDOW_STATE_WINDOW_OVERLAPS_SHELF : - WINDOW_STATE_DEFAULT; + return window_overlaps_launcher ? + WORKSPACE_WINDOW_STATE_WINDOW_OVERLAPS_SHELF : + WORKSPACE_WINDOW_STATE_DEFAULT; } void WorkspaceManager::ShowStateChanged(aura::Window* window) { diff --git a/ash/wm/workspace/workspace_manager.h b/ash/wm/workspace/workspace_manager.h index 16ed477..bb685b8 100644 --- a/ash/wm/workspace/workspace_manager.h +++ b/ash/wm/workspace/workspace_manager.h @@ -9,6 +9,7 @@ #include "ash/ash_export.h" #include "ash/wm/workspace/workspace.h" +#include "ash/wm/workspace/workspace_types.h" #include "base/basictypes.h" #include "base/compiler_specific.h" #include "ui/gfx/insets.h" @@ -32,20 +33,6 @@ class WorkspaceManagerTest; // WorkspaceManager manages multiple workspaces in the desktop. class ASH_EXPORT WorkspaceManager { public: - enum WindowState { - // There's a full screen window. - WINDOW_STATE_FULL_SCREEN, - - // There's a maximized window. - WINDOW_STATE_MAXIMIZED, - - // At least one window overlaps the shelf. - WINDOW_STATE_WINDOW_OVERLAPS_SHELF, - - // None of the windows are fullscreen, maximized or touch the shelf. - WINDOW_STATE_DEFAULT, - }; - explicit WorkspaceManager(aura::Window* viewport); virtual ~WorkspaceManager(); @@ -88,7 +75,7 @@ class ASH_EXPORT WorkspaceManager { void UpdateShelfVisibility(); // Returns the current window state. - WindowState GetWindowState(); + WorkspaceWindowState GetWindowState() const; // Invoked when the show state of the specified window changes. void ShowStateChanged(aura::Window* window); diff --git a/ash/wm/workspace/workspace_manager_unittest.cc b/ash/wm/workspace/workspace_manager_unittest.cc index 4f6a5f8..c1f2e9f 100644 --- a/ash/wm/workspace/workspace_manager_unittest.cc +++ b/ash/wm/workspace/workspace_manager_unittest.cc @@ -14,7 +14,7 @@ #include "ash/wm/window_util.h" #include "ash/wm/workspace/workspace.h" #include "ash/wm/workspace/workspace_layout_manager.h" -#include "ash/wm/workspace_controller.h" +#include "ash/wm/workspace_controller_test_helper.h" #include "ui/aura/client/aura_constants.h" #include "ui/aura/root_window.h" #include "ui/aura/test/event_generator.h" @@ -75,8 +75,9 @@ class WorkspaceManagerTest : public test::AshTestBase { // Overridden from AshTestBase: virtual void SetUp() OVERRIDE { test::AshTestBase::SetUp(); - Shell::TestApi shell_test(Shell::GetInstance()); - manager_ = shell_test.workspace_controller()->workspace_manager(); + WorkspaceControllerTestHelper workspace_helper( + Shell::TestApi(Shell::GetInstance()).workspace_controller()); + manager_ = workspace_helper.workspace_manager(); manager_->set_grid_size(0); } virtual void TearDown() OVERRIDE { @@ -607,7 +608,7 @@ TEST_F(WorkspaceManagerTest, GetWindowStateWithUnmanagedFullscreenWindow) { EXPECT_EQ(ShelfLayoutManager::HIDDEN, shelf->visibility_state()); ASSERT_FALSE(manager_->ShouldManageWindow(w2.get())); - EXPECT_EQ(WorkspaceManager::WINDOW_STATE_FULL_SCREEN, + EXPECT_EQ(WORKSPACE_WINDOW_STATE_FULL_SCREEN, manager_->GetWindowState()); w2->Hide(); @@ -643,7 +644,7 @@ TEST_F(WorkspaceManagerTest, // to hide. EXPECT_EQ(ShelfLayoutManager::HIDDEN, shelf->visibility_state()); ASSERT_FALSE(manager_->ShouldManageWindow(w2.get())); - EXPECT_EQ(WorkspaceManager::WINDOW_STATE_FULL_SCREEN, + EXPECT_EQ(WORKSPACE_WINDOW_STATE_FULL_SCREEN, manager_->GetWindowState()); w2->Hide(); @@ -651,7 +652,7 @@ TEST_F(WorkspaceManagerTest, w2->Show(); EXPECT_EQ(ShelfLayoutManager::HIDDEN, shelf->visibility_state()); - EXPECT_EQ(WorkspaceManager::WINDOW_STATE_FULL_SCREEN, + EXPECT_EQ(WORKSPACE_WINDOW_STATE_FULL_SCREEN, manager_->GetWindowState()); w2.reset(); diff --git a/ash/wm/workspace/workspace_types.h b/ash/wm/workspace/workspace_types.h new file mode 100644 index 0000000..9572a32 --- /dev/null +++ b/ash/wm/workspace/workspace_types.h @@ -0,0 +1,27 @@ +// 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. + +#ifndef ASH_WM_WORKSPACE_WORKSPACE_TYPES_H_ +#define ASH_WM_WORKSPACE_WORKSPACE_TYPES_H_ + +namespace ash { + +// Enumeration of the possible window states. +enum WorkspaceWindowState { + // There's a full screen window. + WORKSPACE_WINDOW_STATE_FULL_SCREEN, + + // There's a maximized window. + WORKSPACE_WINDOW_STATE_MAXIMIZED, + + // At least one window overlaps the shelf. + WORKSPACE_WINDOW_STATE_WINDOW_OVERLAPS_SHELF, + + // None of the windows are fullscreen, maximized or touch the shelf. + WORKSPACE_WINDOW_STATE_DEFAULT, +}; + +} // namespace ash + +#endif // ASH_WM_WORKSPACE_WORKSPACE_TYPES_H_ diff --git a/ash/wm/workspace_controller.cc b/ash/wm/workspace_controller.cc index 13327ac..ea2262c 100644 --- a/ash/wm/workspace_controller.cc +++ b/ash/wm/workspace_controller.cc @@ -46,11 +46,27 @@ WorkspaceController::~WorkspaceController() { viewport_->SetLayoutManager(NULL); } +bool WorkspaceController::IsInMaximizedMode() const { + return workspace_manager_->IsInMaximizedMode(); +} + void WorkspaceController::SetGridSize(int grid_size) { workspace_manager_->set_grid_size(grid_size); event_filter_->set_grid_size(grid_size); } +int WorkspaceController::GetGridSize() const { + return workspace_manager_->grid_size(); +} + +WorkspaceWindowState WorkspaceController::GetWindowState() const { + return workspace_manager_->GetWindowState(); +} + +void WorkspaceController::SetShelf(ShelfLayoutManager* shelf) { + workspace_manager_->set_shelf(shelf); +} + void WorkspaceController::OnWindowActivated(aura::Window* window, aura::Window* old_active) { workspace_manager_->SetActiveWorkspaceByWindow(window); diff --git a/ash/wm/workspace_controller.h b/ash/wm/workspace_controller.h index d7d6316..ea7710e 100644 --- a/ash/wm/workspace_controller.h +++ b/ash/wm/workspace_controller.h @@ -6,6 +6,7 @@ #define ASH_WM_WORKSPACE_CONTROLLER_H_ #include "ash/ash_export.h" +#include "ash/wm/workspace/workspace_types.h" #include "base/basictypes.h" #include "base/memory/scoped_ptr.h" #include "ui/aura/client/activation_change_observer.h" @@ -17,6 +18,7 @@ class Window; namespace ash { namespace internal { +class ShelfLayoutManager; class WorkspaceControllerTestHelper; class WorkspaceEventFilter; class WorkspaceLayoutManager; @@ -25,19 +27,23 @@ class WorkspaceManager; // WorkspaceController acts as a central place that ties together all the // various workspace pieces: WorkspaceManager, WorkspaceLayoutManager and // WorkspaceEventFilter. -class ASH_EXPORT WorkspaceController : - public aura::client::ActivationChangeObserver { +class ASH_EXPORT WorkspaceController + : public aura::client::ActivationChangeObserver { public: explicit WorkspaceController(aura::Window* viewport); virtual ~WorkspaceController(); - // Returns the workspace manager that this controller owns. - WorkspaceManager* workspace_manager() { - return workspace_manager_.get(); - } + // Returns true if in maximized or fullscreen mode. + bool IsInMaximizedMode() const; // Sets the size of the grid. void SetGridSize(int grid_size); + int GetGridSize() const; + + // Returns the current window state. + WorkspaceWindowState GetWindowState() const; + + void SetShelf(ShelfLayoutManager* shelf); // aura::client::ActivationChangeObserver overrides: virtual void OnWindowActivated(aura::Window* window, diff --git a/ash/wm/workspace_controller_test_helper.h b/ash/wm/workspace_controller_test_helper.h index 547c1f4..04b1943 100644 --- a/ash/wm/workspace_controller_test_helper.h +++ b/ash/wm/workspace_controller_test_helper.h @@ -20,6 +20,9 @@ class WorkspaceControllerTestHelper { WorkspaceEventFilter* filter() { return controller_->event_filter_; } MultiWindowResizeController* GetMultiWindowResizeController(); + WorkspaceManager* workspace_manager() { + return controller_->workspace_manager_.get(); + } private: WorkspaceController* controller_; |