summaryrefslogtreecommitdiffstats
path: root/ash
diff options
context:
space:
mode:
authorsky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-03 19:33:50 +0000
committersky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-03 19:33:50 +0000
commitf4bb9fded21dd5595e4d8da54ad2ab4b91ef7e49 (patch)
treebd95d23d19b05670229330197ae5e067ea4297dc /ash
parent688ee168aaeafcf9b7417841a3cf9fee4f47f4af (diff)
downloadchromium_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.gyp1
-rw-r--r--ash/root_window_controller.cc3
-rw-r--r--ash/shell.cc15
-rw-r--r--ash/wm/shelf_layout_manager.cc17
-rw-r--r--ash/wm/shelf_layout_manager.h8
-rw-r--r--ash/wm/workspace/workspace_event_filter_unittest.cc7
-rw-r--r--ash/wm/workspace/workspace_manager.cc13
-rw-r--r--ash/wm/workspace/workspace_manager.h17
-rw-r--r--ash/wm/workspace/workspace_manager_unittest.cc13
-rw-r--r--ash/wm/workspace/workspace_types.h27
-rw-r--r--ash/wm/workspace_controller.cc16
-rw-r--r--ash/wm/workspace_controller.h18
-rw-r--r--ash/wm/workspace_controller_test_helper.h3
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_;