| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ash/wm/dock/docked_window_resizer.h" | 5 #include "ash/wm/dock/docked_window_resizer.h" |
| 6 | 6 |
| 7 #include "ash/ash_switches.h" | 7 #include "ash/ash_switches.h" |
| 8 #include "ash/launcher/launcher.h" | 8 #include "ash/launcher/launcher.h" |
| 9 #include "ash/launcher/launcher_model.h" | 9 #include "ash/launcher/launcher_model.h" |
| 10 #include "ash/root_window_controller.h" | 10 #include "ash/root_window_controller.h" |
| (...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 217 if (edge == DOCKED_EDGE_LEFT) | 217 if (edge == DOCKED_EDGE_LEFT) |
| 218 dx += window->GetRootWindow()->bounds().x() - initial_bounds.x(); | 218 dx += window->GetRootWindow()->bounds().x() - initial_bounds.x(); |
| 219 else if (edge == DOCKED_EDGE_RIGHT) | 219 else if (edge == DOCKED_EDGE_RIGHT) |
| 220 dx += window->GetRootWindow()->bounds().right() - initial_bounds.right(); | 220 dx += window->GetRootWindow()->bounds().right() - initial_bounds.right(); |
| 221 DragMove(dx, window_type_ == aura::client::WINDOW_TYPE_PANEL ? 0 : dy); | 221 DragMove(dx, window_type_ == aura::client::WINDOW_TYPE_PANEL ? 0 : dy); |
| 222 EXPECT_EQ(CorrectContainerIdDuringDrag(UNDOCKED), window->parent()->id()); | 222 EXPECT_EQ(CorrectContainerIdDuringDrag(UNDOCKED), window->parent()->id()); |
| 223 // Release the mouse and the panel should be attached to the dock. | 223 // Release the mouse and the panel should be attached to the dock. |
| 224 DragEnd(); | 224 DragEnd(); |
| 225 | 225 |
| 226 // x-coordinate can get adjusted by snapping or sticking. | 226 // x-coordinate can get adjusted by snapping or sticking. |
| 227 // y-coordinate should not change by possible docking. | 227 // y-coordinate could be changed by possible automatic layout if docked. |
| 228 EXPECT_EQ(initial_bounds.y() + dy, window->GetBoundsInScreen().y()); | 228 if (window->parent()->id() != internal::kShellWindowId_DockedContainer) |
| 229 EXPECT_EQ(initial_bounds.y() + dy, window->GetBoundsInScreen().y()); |
| 229 } | 230 } |
| 230 | 231 |
| 231 bool test_panels() const { | 232 bool test_panels() const { |
| 232 return window_type_ == aura::client::WINDOW_TYPE_PANEL; | 233 return window_type_ == aura::client::WINDOW_TYPE_PANEL; |
| 233 } | 234 } |
| 234 | 235 |
| 235 private: | 236 private: |
| 236 scoped_ptr<WindowResizer> resizer_; | 237 scoped_ptr<WindowResizer> resizer_; |
| 237 LauncherModel* model_; | 238 LauncherModel* model_; |
| 238 aura::client::WindowType window_type_; | 239 aura::client::WindowType window_type_; |
| (...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 447 | 448 |
| 448 // Both windows should be attached and snapped to the right edge. | 449 // Both windows should be attached and snapped to the right edge. |
| 449 EXPECT_EQ(w1->GetRootWindow()->bounds().right(), | 450 EXPECT_EQ(w1->GetRootWindow()->bounds().right(), |
| 450 w1->GetBoundsInScreen().right()); | 451 w1->GetBoundsInScreen().right()); |
| 451 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); | 452 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); |
| 452 | 453 |
| 453 EXPECT_EQ(w2->GetRootWindow()->bounds().right(), | 454 EXPECT_EQ(w2->GetRootWindow()->bounds().right(), |
| 454 w2->GetBoundsInScreen().right()); | 455 w2->GetBoundsInScreen().right()); |
| 455 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w2->parent()->id()); | 456 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w2->parent()->id()); |
| 456 | 457 |
| 457 // Detach by dragging left (should get undocked) | 458 // Detach by dragging left (should get undocked). |
| 458 ASSERT_NO_FATAL_FAILURE(DragStart(w2.get())); | 459 ASSERT_NO_FATAL_FAILURE(DragStart(w2.get())); |
| 459 DragMove(-32, -10); | 460 // Drag up as well to avoid attaching panels to launcher shelf. |
| 461 DragMove(-32, -100); |
| 460 // Release the mouse and the window should be no longer attached to the edge. | 462 // Release the mouse and the window should be no longer attached to the edge. |
| 461 DragEnd(); | 463 DragEnd(); |
| 462 | 464 |
| 463 // The first window should be still docked. | 465 // The first window should be still docked. |
| 464 EXPECT_EQ(w1->GetRootWindow()->bounds().right(), | 466 EXPECT_EQ(w1->GetRootWindow()->bounds().right(), |
| 465 w1->GetBoundsInScreen().right()); | 467 w1->GetBoundsInScreen().right()); |
| 466 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); | 468 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); |
| 467 | 469 |
| 468 // The second window should be floating on a workspace again. | 470 // The second window should be floating on a workspace again. |
| 469 EXPECT_EQ(w2->GetRootWindow()->bounds().right() - 32, | 471 EXPECT_EQ(w2->GetRootWindow()->bounds().right() - 32, |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 644 // The second window should be still docked. | 646 // The second window should be still docked. |
| 645 EXPECT_EQ(w2->GetRootWindow()->bounds().right(), | 647 EXPECT_EQ(w2->GetRootWindow()->bounds().right(), |
| 646 w2->GetBoundsInScreen().right()); | 648 w2->GetBoundsInScreen().right()); |
| 647 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w2->parent()->id()); | 649 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w2->parent()->id()); |
| 648 | 650 |
| 649 // Detach by dragging left more (should get undocked). | 651 // Detach by dragging left more (should get undocked). |
| 650 ASSERT_NO_FATAL_FAILURE(DragStartAtOffsetFromwindowOrigin( | 652 ASSERT_NO_FATAL_FAILURE(DragStartAtOffsetFromwindowOrigin( |
| 651 w2.get(), | 653 w2.get(), |
| 652 w2->bounds().width()/2 + 10, | 654 w2->bounds().width()/2 + 10, |
| 653 0)); | 655 0)); |
| 654 DragMove(-(w2->bounds().width()/2 + 20), 10); | 656 // Drag up as well to avoid attaching panels to launcher shelf. |
| 657 DragMove(-(w2->bounds().width()/2 + 20), -100); |
| 655 // Release the mouse and the window should be no longer attached to the edge. | 658 // Release the mouse and the window should be no longer attached to the edge. |
| 656 DragEnd(); | 659 DragEnd(); |
| 657 | 660 |
| 658 // The second window should be floating on a workspace again. | 661 // The second window should be floating on a workspace again. |
| 659 EXPECT_EQ(w2->GetRootWindow()->bounds().right() - | 662 EXPECT_EQ(w2->GetRootWindow()->bounds().right() - |
| 660 (w2->bounds().width()/2 + 20), | 663 (w2->bounds().width()/2 + 20), |
| 661 w2->GetBoundsInScreen().right()); | 664 w2->GetBoundsInScreen().right()); |
| 662 EXPECT_EQ(internal::kShellWindowId_WorkspaceContainer, w2->parent()->id()); | 665 EXPECT_EQ(internal::kShellWindowId_WorkspaceContainer, w2->parent()->id()); |
| 663 // Dock width should be set to remaining single docked window. | 666 // Dock width should be set to remaining single docked window. |
| 664 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); | 667 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); |
| (...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 978 HTLEFT)); | 981 HTLEFT)); |
| 979 DragMove(-kResizeSpan3, 0); | 982 DragMove(-kResizeSpan3, 0); |
| 980 DragEnd(); | 983 DragEnd(); |
| 981 EXPECT_EQ(previous_width + kResizeSpan3, w1->bounds().width()); | 984 EXPECT_EQ(previous_width + kResizeSpan3, w1->bounds().width()); |
| 982 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); | 985 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); |
| 983 // Docked area should be as wide as the second window - the first is too wide. | 986 // Docked area should be as wide as the second window - the first is too wide. |
| 984 EXPECT_EQ(w2->bounds().width(), manager->docked_width_); | 987 EXPECT_EQ(w2->bounds().width(), manager->docked_width_); |
| 985 | 988 |
| 986 // Undock the second window. Docked area should shrink to its minimum size. | 989 // Undock the second window. Docked area should shrink to its minimum size. |
| 987 ASSERT_NO_FATAL_FAILURE(DragStart(w2.get())); | 990 ASSERT_NO_FATAL_FAILURE(DragStart(w2.get())); |
| 988 DragMove(-40, 10); | 991 // Drag up as well to avoid attaching panels to launcher shelf. |
| 992 DragMove(-40, -100); |
| 989 // Alignment set to "RIGHT" since we have another window docked. | 993 // Alignment set to "RIGHT" since we have another window docked. |
| 990 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, manager->alignment_); | 994 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, manager->alignment_); |
| 991 // Release the mouse and the window should be no longer attached to the edge. | 995 // Release the mouse and the window should be no longer attached to the edge. |
| 992 DragEnd(); | 996 DragEnd(); |
| 993 EXPECT_EQ(internal::kShellWindowId_WorkspaceContainer, w2->parent()->id()); | 997 EXPECT_EQ(internal::kShellWindowId_WorkspaceContainer, w2->parent()->id()); |
| 994 // Dock should get shrunk to minimum size. | 998 // Dock should get shrunk to minimum size. |
| 995 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, manager->alignment_); | 999 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, manager->alignment_); |
| 996 EXPECT_EQ(manager->kMinDockWidth, manager->docked_width_); | 1000 EXPECT_EQ(manager->kMinDockWidth, manager->docked_width_); |
| 997 // The first window should be still docked. | 1001 // The first window should be still docked. |
| 998 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); | 1002 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1049 } | 1053 } |
| 1050 } | 1054 } |
| 1051 | 1055 |
| 1052 // Tests run twice - on both panels and normal windows | 1056 // Tests run twice - on both panels and normal windows |
| 1053 INSTANTIATE_TEST_CASE_P(NormalOrPanel, | 1057 INSTANTIATE_TEST_CASE_P(NormalOrPanel, |
| 1054 DockedWindowResizerTest, | 1058 DockedWindowResizerTest, |
| 1055 testing::Values(aura::client::WINDOW_TYPE_NORMAL, | 1059 testing::Values(aura::client::WINDOW_TYPE_NORMAL, |
| 1056 aura::client::WINDOW_TYPE_PANEL)); | 1060 aura::client::WINDOW_TYPE_PANEL)); |
| 1057 } // namespace internal | 1061 } // namespace internal |
| 1058 } // namespace ash | 1062 } // namespace ash |
| OLD | NEW |