Commit 8de1135a authored by pkotwicz's avatar pkotwicz Committed by Commit bot

Hide windows which were visible in SplitView when new left/right windows are

specified.

BUG=409724
TEST=SplitViewcontrollerTest.SplitModeActivation

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

Cr-Commit-Position: refs/heads/master@{#295158}
parent f267096b
......@@ -65,14 +65,9 @@ void SplitViewController::ActivateSplitMode(aura::Window* left,
aura::Window::Windows windows = window_list_provider_->GetWindowList();
aura::Window::Windows::reverse_iterator iter = windows.rbegin();
if (state_ == ACTIVE) {
if (left_window_ == right)
left_window_ = left;
if (right_window_ == left)
right_window_ = right;
if (!left)
if (!left && left_window_ != right)
left = left_window_;
if (!right)
if (!right && right_window_ != left)
right = right_window_;
}
......@@ -94,6 +89,12 @@ void SplitViewController::ActivateSplitMode(aura::Window* left,
}
}
to_hide_.clear();
if (left_window_ && left_window_ != left && left_window_ != right)
to_hide_.push_back(left_window_);
if (right_window_ && right_window_ != left && right_window_ != right)
to_hide_.push_back(right_window_);
SetState(ACTIVE);
right_window_ = right;
left_window_ = left;
......@@ -229,6 +230,10 @@ void SplitViewController::OnAnimationCompleted() {
return;
UpdateLayout(false);
for (size_t i = 0; i < to_hide_.size(); ++i)
to_hide_[i]->Hide();
to_hide_.clear();
if (state_ == INACTIVE) {
left_window_ = NULL;
right_window_ = NULL;
......
......@@ -105,6 +105,10 @@ class ATHENA_EXPORT SplitViewController
// container_ coordinates (along the x axis).
int separator_position_;
// Windows which should be hidden when the animation initiated by
// UpdateLayout() completes.
std::vector<aura::Window*> to_hide_;
base::WeakPtrFactory<SplitViewController> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(SplitViewController);
......
......@@ -46,6 +46,22 @@ class SplitViewControllerTest : public test::AthenaTestBase {
second_topmost == controller->right_window());
}
// Returns whether only the split view windows are visible.
bool OnlySplitViewWindowsVisible() const {
SplitViewController* controller = api_->GetSplitViewController();
DCHECK(controller->IsSplitViewModeActive());
aura::Window::Windows list =
api_->GetWindowListProvider()->GetWindowList();
for (aura::Window::Windows::const_iterator it = list.begin();
it != list.end(); ++it) {
bool in_split_view = (*it == controller->left_window() ||
*it == controller->right_window());
if (in_split_view != (*it)->IsVisible())
return false;
}
return true;
}
bool IsSplitViewAllowed() const {
return api_->GetSplitViewController()->CanScroll();
}
......@@ -69,8 +85,11 @@ TEST_F(SplitViewControllerTest, SplitModeActivation) {
for (size_t i = 0; i < kNumWindows; ++i) {
scoped_ptr<aura::Window> window = CreateTestWindow(NULL, gfx::Rect());
windows.push_back(window.release());
windows[i]->Hide();
}
windows[kNumWindows - 1]->Show();
SplitViewController* controller = api()->GetSplitViewController();
ASSERT_FALSE(controller->IsSplitViewModeActive());
......@@ -80,6 +99,7 @@ TEST_F(SplitViewControllerTest, SplitModeActivation) {
EXPECT_EQ(windows[kNumWindows - 1], controller->left_window());
EXPECT_EQ(windows[kNumWindows - 2], controller->right_window());
EXPECT_TRUE(SplitViewWindowsTopmost());
EXPECT_TRUE(OnlySplitViewWindowsVisible());
// Select the window that is currently on the left for the right panel. The
// windows should switch.
......@@ -87,11 +107,13 @@ TEST_F(SplitViewControllerTest, SplitModeActivation) {
EXPECT_EQ(windows[kNumWindows - 2], controller->left_window());
EXPECT_EQ(windows[kNumWindows - 1], controller->right_window());
EXPECT_TRUE(SplitViewWindowsTopmost());
EXPECT_TRUE(OnlySplitViewWindowsVisible());
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());
EXPECT_TRUE(OnlySplitViewWindowsVisible());
// Select one of the windows behind the stacks for the right panel. The window
// on the left should remain unchanged.
......@@ -99,21 +121,25 @@ TEST_F(SplitViewControllerTest, SplitModeActivation) {
EXPECT_EQ(windows[kNumWindows - 1], controller->left_window());
EXPECT_EQ(windows[0], controller->right_window());
EXPECT_TRUE(SplitViewWindowsTopmost());
EXPECT_TRUE(OnlySplitViewWindowsVisible());
controller->ActivateSplitMode(windows[1], NULL);
EXPECT_EQ(windows[1], controller->left_window());
EXPECT_EQ(windows[0], controller->right_window());
EXPECT_TRUE(SplitViewWindowsTopmost());
EXPECT_TRUE(OnlySplitViewWindowsVisible());
controller->ActivateSplitMode(windows[4], windows[5]);
EXPECT_EQ(windows[4], controller->left_window());
EXPECT_EQ(windows[5], controller->right_window());
EXPECT_TRUE(SplitViewWindowsTopmost());
EXPECT_TRUE(OnlySplitViewWindowsVisible());
controller->ActivateSplitMode(windows[0], NULL);
EXPECT_EQ(windows[0], controller->left_window());
EXPECT_EQ(windows[5], controller->right_window());
EXPECT_TRUE(SplitViewWindowsTopmost());
EXPECT_TRUE(OnlySplitViewWindowsVisible());
}
TEST_F(SplitViewControllerTest, LandscapeOnly) {
......
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