summaryrefslogtreecommitdiffstats
path: root/athena/wm
diff options
context:
space:
mode:
authoroshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-08-19 19:41:02 +0000
committeroshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-08-19 19:41:59 +0000
commit7f492e928a8605f66266eb9adedd64734465f9df (patch)
tree3c2031a0959d87282d06ce874632affd59670928 /athena/wm
parentf6cc329795fe0a20c3e092a0117ba3344f2859d6 (diff)
downloadchromium_src-7f492e928a8605f66266eb9adedd64734465f9df.zip
chromium_src-7f492e928a8605f66266eb9adedd64734465f9df.tar.gz
chromium_src-7f492e928a8605f66266eb9adedd64734465f9df.tar.bz2
Add shoftcut (ctrl-f6) to toggle split view
BUG=covered by test. Review URL: https://codereview.chromium.org/465983002 Cr-Commit-Position: refs/heads/master@{#290633} git-svn-id: svn://svn.chromium.org/chrome/trunk/src@290633 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'athena/wm')
-rw-r--r--athena/wm/split_view_controller.cc3
-rw-r--r--athena/wm/window_manager_impl.cc21
-rw-r--r--athena/wm/window_manager_impl.h3
-rw-r--r--athena/wm/window_manager_unittest.cc35
4 files changed, 62 insertions, 0 deletions
diff --git a/athena/wm/split_view_controller.cc b/athena/wm/split_view_controller.cc
index 2329089..cf39f2e 100644
--- a/athena/wm/split_view_controller.cc
+++ b/athena/wm/split_view_controller.cc
@@ -163,6 +163,9 @@ void SplitViewController::SetWindowTransform(aura::Window* window,
}
void SplitViewController::OnAnimationCompleted(aura::Window* window) {
+ // Animation can be cancelled when deactivated.
+ if (left_window_ == NULL)
+ return;
DCHECK(window == left_window_ || window == right_window_);
if (state_ == ACTIVE) {
gfx::Rect window_bounds = gfx::Rect(container_->bounds().size());
diff --git a/athena/wm/window_manager_impl.cc b/athena/wm/window_manager_impl.cc
index bbc8673..d66f2ed 100644
--- a/athena/wm/window_manager_impl.cc
+++ b/athena/wm/window_manager_impl.cc
@@ -192,6 +192,8 @@ void WindowManagerImpl::InstallAccelerators() {
const AcceleratorData accelerator_data[] = {
{TRIGGER_ON_PRESS, ui::VKEY_F6, ui::EF_NONE, CMD_TOGGLE_OVERVIEW,
AF_NONE},
+ {TRIGGER_ON_PRESS, ui::VKEY_F6, ui::EF_CONTROL_DOWN,
+ CMD_TOGGLE_SPLIT_VIEW, AF_NONE},
};
AcceleratorManager::Get()->RegisterAccelerators(
accelerator_data, arraysize(accelerator_data), this);
@@ -217,6 +219,8 @@ void WindowManagerImpl::OnSplitViewMode(aura::Window* left,
}
void WindowManagerImpl::OnWindowAdded(aura::Window* new_window) {
+ // TODO(oshima): Creating a new window should updates the ovewview mode
+ // instead of exitting.
if (new_window->type() == ui::wm::WINDOW_TYPE_NORMAL)
SetInOverview(false);
}
@@ -236,10 +240,27 @@ bool WindowManagerImpl::OnAcceleratorFired(int command_id,
case CMD_TOGGLE_OVERVIEW:
ToggleOverview();
break;
+ case CMD_TOGGLE_SPLIT_VIEW:
+ ToggleSplitview();
+ break;
}
return true;
}
+void WindowManagerImpl::ToggleSplitview() {
+ // TODO(oshima): Figure out what to do.
+ if (IsOverviewModeActive())
+ return;
+
+ if (split_view_controller_->IsSplitViewModeActive()) {
+ split_view_controller_->DeactivateSplitMode();
+ // Relayout so that windows are maximzied.
+ container_->layout_manager()->OnWindowResized();
+ } else if (window_list_provider_->GetWindowList().size() > 1) {
+ split_view_controller_->ActivateSplitMode(NULL, NULL);
+ }
+}
+
aura::Window* WindowManagerImpl::GetWindowBehind(aura::Window* window) {
const aura::Window::Windows& windows = window_list_provider_->GetWindowList();
aura::Window::Windows::const_reverse_iterator iter =
diff --git a/athena/wm/window_manager_impl.h b/athena/wm/window_manager_impl.h
index 2a8d5ac..c8e9038 100644
--- a/athena/wm/window_manager_impl.h
+++ b/athena/wm/window_manager_impl.h
@@ -44,11 +44,14 @@ class WindowManagerImpl : public WindowManager,
enum Command {
CMD_TOGGLE_OVERVIEW,
+ CMD_TOGGLE_SPLIT_VIEW,
};
// Sets whether overview mode is active.
void SetInOverview(bool active);
+ void ToggleSplitview();
+
void InstallAccelerators();
// WindowManager:
diff --git a/athena/wm/window_manager_unittest.cc b/athena/wm/window_manager_unittest.cc
index 705e730..41d949c 100644
--- a/athena/wm/window_manager_unittest.cc
+++ b/athena/wm/window_manager_unittest.cc
@@ -282,4 +282,39 @@ TEST_F(WindowManagerTest, NewWindowBounds) {
wm_api.split_view_controller()->left_window()->bounds().ToString());
}
+TEST_F(WindowManagerTest, SplitModeActivationByShortcut) {
+ WindowManagerImplTestApi wm_api;
+
+ aura::test::TestWindowDelegate delegate;
+ scoped_ptr<aura::Window> w1(CreateTestWindow(&delegate, gfx::Rect()));
+ w1->Show();
+
+ ui::test::EventGenerator generator(root_window());
+
+ // Splitview mode needs at least two windows.
+ generator.PressKey(ui::VKEY_F6, ui::EF_CONTROL_DOWN);
+ generator.ReleaseKey(ui::VKEY_F6, ui::EF_CONTROL_DOWN);
+ EXPECT_FALSE(wm_api.split_view_controller()->IsSplitViewModeActive());
+
+ scoped_ptr<aura::Window> w2(CreateTestWindow(&delegate, gfx::Rect()));
+ w2->Show();
+
+ generator.PressKey(ui::VKEY_F6, ui::EF_CONTROL_DOWN);
+ generator.ReleaseKey(ui::VKEY_F6, ui::EF_CONTROL_DOWN);
+ EXPECT_TRUE(wm_api.split_view_controller()->IsSplitViewModeActive());
+ int width =
+ gfx::Screen::GetNativeScreen()->GetPrimaryDisplay().work_area().width();
+
+ EXPECT_EQ(width / 2, w1->bounds().width());
+ EXPECT_EQ(width / 2, w2->bounds().width());
+
+ // Toggle back to normal mode.
+ generator.PressKey(ui::VKEY_F6, ui::EF_CONTROL_DOWN);
+ generator.ReleaseKey(ui::VKEY_F6, ui::EF_CONTROL_DOWN);
+ EXPECT_FALSE(wm_api.split_view_controller()->IsSplitViewModeActive());
+
+ EXPECT_EQ(width, w1->bounds().width());
+ EXPECT_EQ(width, w2->bounds().width());
+}
+
} // namespace athena