Commit d3381794 authored by pkotwicz's avatar pkotwicz Committed by Commit bot

Keep the split view activities topmost in z-order in Athena

BUG=409888
TEST=WindowManagerTest.* SplitViewController.*

Review URL: https://codereview.chromium.org/550043002

Cr-Commit-Position: refs/heads/master@{#294665}
parent 1799b72d
......@@ -117,6 +117,7 @@
'wm/window_list_provider_impl.cc',
'wm/window_list_provider_impl.h',
'wm/window_manager_impl.cc',
'wm/window_manager_impl.h',
'wm/window_overview_mode.cc',
'wm/window_overview_mode.h',
],
......
......@@ -95,18 +95,8 @@ void SplitViewController::ActivateSplitMode(aura::Window* left,
}
SetState(ACTIVE);
if (right_window_ != right) {
right_window_ = right;
// Since the |window_list_provider_| controls directly the order of windows,
// it needs to change the window order accordingly.
window_list_provider_->MoveToFront(right_window_);
}
if (left_window_ != left) {
left_window_ = left;
// Since the |window_list_provider_| controls directly the order of windows,
// it needs to change the window order accordingly.
window_list_provider_->MoveToFront(left_window_);
}
right_window_ = right;
left_window_ = left;
UpdateLayout(true);
}
......@@ -179,6 +169,9 @@ void SplitViewController::UpdateLayout(bool animate) {
left_window_->Show();
right_window_->Show();
window_list_provider_->MoveToFront(right_window_);
window_list_provider_->MoveToFront(left_window_);
if (state_ == ACTIVE) {
if (animate) {
gfx::Transform left_transform = GetTargetTransformForBoundsAnimation(
......
......@@ -32,6 +32,20 @@ class SplitViewControllerTest : public test::AthenaTestBase {
test::AthenaTestBase::TearDown();
}
// Returns whether the split view windows are topmost.
bool SplitViewWindowsTopmost() const {
SplitViewController* controller = api_->GetSplitViewController();
DCHECK(controller->IsSplitViewModeActive());
aura::Window::Windows list =
api_->GetWindowListProvider()->GetWindowList();
aura::Window* topmost = *list.rbegin();
aura::Window* second_topmost = *(list.rbegin() + 1);
return (topmost == controller->left_window() ||
topmost == controller->right_window()) &&
(second_topmost == controller->left_window() ||
second_topmost == controller->right_window());
}
bool IsSplitViewAllowed() const {
return api_->GetSplitViewController()->CanScroll();
}
......@@ -58,7 +72,6 @@ TEST_F(SplitViewControllerTest, SplitModeActivation) {
}
SplitViewController* controller = api()->GetSplitViewController();
WindowListProvider* list_provider = api()->GetWindowListProvider();
ASSERT_FALSE(controller->IsSplitViewModeActive());
controller->ActivateSplitMode(NULL, NULL);
......@@ -66,34 +79,41 @@ TEST_F(SplitViewControllerTest, SplitModeActivation) {
// The last two windows should be on the left and right, respectively.
EXPECT_EQ(windows[kNumWindows - 1], controller->left_window());
EXPECT_EQ(windows[kNumWindows - 2], controller->right_window());
EXPECT_TRUE(SplitViewWindowsTopmost());
// Select the window that is currently on the left for the right panel. The
// windows should switch.
controller->ActivateSplitMode(NULL, windows[kNumWindows - 1]);
EXPECT_EQ(windows[kNumWindows - 2], controller->left_window());
EXPECT_EQ(windows[kNumWindows - 1], controller->right_window());
EXPECT_TRUE(SplitViewWindowsTopmost());
controller->ActivateSplitMode(windows[kNumWindows - 1], NULL);
EXPECT_EQ(windows[kNumWindows - 1], controller->left_window());
EXPECT_EQ(windows[kNumWindows - 2], controller->right_window());
EXPECT_TRUE(SplitViewWindowsTopmost());
// Select one of the windows behind the stacks for the right panel. The window
// on the left should remain unchanged.
controller->ActivateSplitMode(NULL, windows[0]);
EXPECT_EQ(windows[kNumWindows - 1], controller->left_window());
EXPECT_EQ(windows[0], controller->right_window());
EXPECT_EQ(windows[0], *list_provider->GetWindowList().rbegin());
EXPECT_TRUE(SplitViewWindowsTopmost());
controller->ActivateSplitMode(windows[1], NULL);
EXPECT_EQ(windows[1], controller->left_window());
EXPECT_EQ(windows[0], controller->right_window());
EXPECT_EQ(windows[1], *list_provider->GetWindowList().rbegin());
EXPECT_TRUE(SplitViewWindowsTopmost());
controller->ActivateSplitMode(windows[4], windows[5]);
EXPECT_EQ(windows[4], controller->left_window());
EXPECT_EQ(windows[5], controller->right_window());
EXPECT_EQ(windows[4], *list_provider->GetWindowList().rbegin());
EXPECT_EQ(windows[5], *(list_provider->GetWindowList().rbegin() + 1));
EXPECT_TRUE(SplitViewWindowsTopmost());
controller->ActivateSplitMode(windows[0], NULL);
EXPECT_EQ(windows[0], controller->left_window());
EXPECT_EQ(windows[5], controller->right_window());
EXPECT_TRUE(SplitViewWindowsTopmost());
}
TEST_F(SplitViewControllerTest, LandscapeOnly) {
......
......@@ -260,8 +260,7 @@ TEST_F(WindowManagerTest, TitleDragSwitchBetweenWindowsInSplitViewMode) {
wm_api.GetWindowListProvider()->GetWindowList();
ASSERT_EQ(4u, windows.size());
EXPECT_EQ(second.get(), windows[3]);
EXPECT_EQ(third.get(), windows[2]);
EXPECT_EQ(fourth.get(), windows[1]);
EXPECT_EQ(fourth.get(), windows[2]);
// Swipe the title of the right window now. It should switch to |third|.
generator.GestureScrollSequence(gfx::Point(x_middle + 20, 10),
......@@ -270,6 +269,10 @@ TEST_F(WindowManagerTest, TitleDragSwitchBetweenWindowsInSplitViewMode) {
5);
EXPECT_EQ(second.get(), wm_api.GetSplitViewController()->left_window());
EXPECT_EQ(third.get(), wm_api.GetSplitViewController()->right_window());
windows = wm_api.GetWindowListProvider()->GetWindowList();
ASSERT_EQ(4u, windows.size());
EXPECT_EQ(second.get(), windows[3]);
EXPECT_EQ(third.get(), windows[2]);
}
TEST_F(WindowManagerTest, NewWindowBounds) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment