| 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/root_window_controller.h" | 9 #include "ash/root_window_controller.h" |
| 10 #include "ash/screen_ash.h" | 10 #include "ash/screen_ash.h" |
| (...skipping 21 matching lines...) Expand all Loading... |
| 32 #include "ui/aura/test/test_window_delegate.h" | 32 #include "ui/aura/test/test_window_delegate.h" |
| 33 #include "ui/base/hit_test.h" | 33 #include "ui/base/hit_test.h" |
| 34 #include "ui/base/ui_base_types.h" | 34 #include "ui/base/ui_base_types.h" |
| 35 #include "ui/views/widget/widget.h" | 35 #include "ui/views/widget/widget.h" |
| 36 | 36 |
| 37 namespace ash { | 37 namespace ash { |
| 38 namespace internal { | 38 namespace internal { |
| 39 | 39 |
| 40 class DockedWindowResizerTest | 40 class DockedWindowResizerTest |
| 41 : public test::AshTestBase, | 41 : public test::AshTestBase, |
| 42 public testing::WithParamInterface<aura::client::WindowType> { | 42 public testing::WithParamInterface<ui::wm::WindowType> { |
| 43 public: | 43 public: |
| 44 DockedWindowResizerTest() : model_(NULL), window_type_(GetParam()) {} | 44 DockedWindowResizerTest() : model_(NULL), window_type_(GetParam()) {} |
| 45 virtual ~DockedWindowResizerTest() {} | 45 virtual ~DockedWindowResizerTest() {} |
| 46 | 46 |
| 47 virtual void SetUp() OVERRIDE { | 47 virtual void SetUp() OVERRIDE { |
| 48 CommandLine::ForCurrentProcess()->AppendSwitch( | 48 CommandLine::ForCurrentProcess()->AppendSwitch( |
| 49 ash::switches::kAshEnableDockedWindows); | 49 ash::switches::kAshEnableDockedWindows); |
| 50 AshTestBase::SetUp(); | 50 AshTestBase::SetUp(); |
| 51 UpdateDisplay("600x400"); | 51 UpdateDisplay("600x400"); |
| 52 test::ShellTestApi test_api(Shell::GetInstance()); | 52 test::ShellTestApi test_api(Shell::GetInstance()); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 72 } | 72 } |
| 73 int docked_alignment(const DockedWindowLayoutManager* layout_manager) const { | 73 int docked_alignment(const DockedWindowLayoutManager* layout_manager) const { |
| 74 return layout_manager->alignment_; | 74 return layout_manager->alignment_; |
| 75 } | 75 } |
| 76 aura::Window* CreateTestWindow(const gfx::Rect& bounds) { | 76 aura::Window* CreateTestWindow(const gfx::Rect& bounds) { |
| 77 aura::Window* window = CreateTestWindowInShellWithDelegateAndType( | 77 aura::Window* window = CreateTestWindowInShellWithDelegateAndType( |
| 78 &delegate_, | 78 &delegate_, |
| 79 window_type_, | 79 window_type_, |
| 80 0, | 80 0, |
| 81 bounds); | 81 bounds); |
| 82 if (window_type_ == aura::client::WINDOW_TYPE_PANEL) { | 82 if (window_type_ == ui::wm::WINDOW_TYPE_PANEL) { |
| 83 test::TestShelfDelegate* shelf_delegate = | 83 test::TestShelfDelegate* shelf_delegate = |
| 84 test::TestShelfDelegate::instance(); | 84 test::TestShelfDelegate::instance(); |
| 85 shelf_delegate->AddLauncherItem(window); | 85 shelf_delegate->AddLauncherItem(window); |
| 86 PanelLayoutManager* manager = | 86 PanelLayoutManager* manager = |
| 87 static_cast<PanelLayoutManager*>( | 87 static_cast<PanelLayoutManager*>( |
| 88 Shell::GetContainer(window->GetRootWindow(), | 88 Shell::GetContainer(window->GetRootWindow(), |
| 89 internal::kShellWindowId_PanelContainer)-> | 89 internal::kShellWindowId_PanelContainer)-> |
| 90 layout_manager()); | 90 layout_manager()); |
| 91 manager->Relayout(); | 91 manager->Relayout(); |
| 92 } | 92 } |
| 93 return window; | 93 return window; |
| 94 } | 94 } |
| 95 | 95 |
| 96 aura::Window* CreateModalWindow(const gfx::Rect& bounds) { | 96 aura::Window* CreateModalWindow(const gfx::Rect& bounds) { |
| 97 aura::Window* window = new aura::Window(&delegate_); | 97 aura::Window* window = new aura::Window(&delegate_); |
| 98 window->SetProperty(aura::client::kModalKey, ui::MODAL_TYPE_SYSTEM); | 98 window->SetProperty(aura::client::kModalKey, ui::MODAL_TYPE_SYSTEM); |
| 99 window->SetType(aura::client::WINDOW_TYPE_NORMAL); | 99 window->SetType(ui::wm::WINDOW_TYPE_NORMAL); |
| 100 window->Init(ui::LAYER_TEXTURED); | 100 window->Init(ui::LAYER_TEXTURED); |
| 101 window->Show(); | 101 window->Show(); |
| 102 | 102 |
| 103 if (bounds.IsEmpty()) { | 103 if (bounds.IsEmpty()) { |
| 104 ParentWindowInPrimaryRootWindow(window); | 104 ParentWindowInPrimaryRootWindow(window); |
| 105 } else { | 105 } else { |
| 106 gfx::Display display = | 106 gfx::Display display = |
| 107 Shell::GetScreen()->GetDisplayMatching(bounds); | 107 Shell::GetScreen()->GetDisplayMatching(bounds); |
| 108 aura::Window* root = ash::Shell::GetInstance()->display_controller()-> | 108 aura::Window* root = ash::Shell::GetInstance()->display_controller()-> |
| 109 GetRootWindowForDisplayId(display.id()); | 109 GetRootWindowForDisplayId(display.id()); |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 162 | 162 |
| 163 void DragRevert() { | 163 void DragRevert() { |
| 164 resizer_->RevertDrag(); | 164 resizer_->RevertDrag(); |
| 165 resizer_.reset(); | 165 resizer_.reset(); |
| 166 } | 166 } |
| 167 | 167 |
| 168 // Panels are parented by panel container during drags. | 168 // Panels are parented by panel container during drags. |
| 169 // All other windows that are tested here are parented by dock container | 169 // All other windows that are tested here are parented by dock container |
| 170 // during drags. | 170 // during drags. |
| 171 int CorrectContainerIdDuringDrag() { | 171 int CorrectContainerIdDuringDrag() { |
| 172 if (window_type_ == aura::client::WINDOW_TYPE_PANEL) | 172 if (window_type_ == ui::wm::WINDOW_TYPE_PANEL) |
| 173 return internal::kShellWindowId_PanelContainer; | 173 return internal::kShellWindowId_PanelContainer; |
| 174 return internal::kShellWindowId_DockedContainer; | 174 return internal::kShellWindowId_DockedContainer; |
| 175 } | 175 } |
| 176 | 176 |
| 177 // Test dragging the window vertically (to detach if it is a panel) and then | 177 // Test dragging the window vertically (to detach if it is a panel) and then |
| 178 // horizontally to the edge with an added offset from the edge of |dx|. | 178 // horizontally to the edge with an added offset from the edge of |dx|. |
| 179 void DragRelativeToEdge(DockedEdge edge, | 179 void DragRelativeToEdge(DockedEdge edge, |
| 180 aura::Window* window, | 180 aura::Window* window, |
| 181 int dx) { | 181 int dx) { |
| 182 DragVerticallyAndRelativeToEdge( | 182 DragVerticallyAndRelativeToEdge( |
| 183 edge, | 183 edge, |
| 184 window, | 184 window, |
| 185 dx, window_type_ == aura::client::WINDOW_TYPE_PANEL ? -100 : 20, | 185 dx, |
| 186 25, 5); | 186 window_type_ == ui::wm::WINDOW_TYPE_PANEL ? -100 : 20, |
| 187 25, |
| 188 5); |
| 187 } | 189 } |
| 188 | 190 |
| 189 void DragToVerticalPositionAndToEdge(DockedEdge edge, | 191 void DragToVerticalPositionAndToEdge(DockedEdge edge, |
| 190 aura::Window* window, | 192 aura::Window* window, |
| 191 int y) { | 193 int y) { |
| 192 DragToVerticalPositionRelativeToEdge(edge, window, 0, y); | 194 DragToVerticalPositionRelativeToEdge(edge, window, 0, y); |
| 193 } | 195 } |
| 194 | 196 |
| 195 void DragToVerticalPositionRelativeToEdge(DockedEdge edge, | 197 void DragToVerticalPositionRelativeToEdge(DockedEdge edge, |
| 196 aura::Window* window, | 198 aura::Window* window, |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 229 DragEnd(); | 231 DragEnd(); |
| 230 | 232 |
| 231 // x-coordinate can get adjusted by snapping or sticking. | 233 // x-coordinate can get adjusted by snapping or sticking. |
| 232 // y-coordinate could be changed by possible automatic layout if docked. | 234 // y-coordinate could be changed by possible automatic layout if docked. |
| 233 if (window->parent()->id() != internal::kShellWindowId_DockedContainer && | 235 if (window->parent()->id() != internal::kShellWindowId_DockedContainer && |
| 234 !wm::GetWindowState(window)->HasRestoreBounds()) { | 236 !wm::GetWindowState(window)->HasRestoreBounds()) { |
| 235 EXPECT_EQ(initial_bounds.y() + dy, window->GetBoundsInScreen().y()); | 237 EXPECT_EQ(initial_bounds.y() + dy, window->GetBoundsInScreen().y()); |
| 236 } | 238 } |
| 237 } | 239 } |
| 238 | 240 |
| 239 bool test_panels() const { | 241 bool test_panels() const { return window_type_ == ui::wm::WINDOW_TYPE_PANEL; } |
| 240 return window_type_ == aura::client::WINDOW_TYPE_PANEL; | |
| 241 } | |
| 242 | 242 |
| 243 const gfx::Point& initial_location_in_parent() const { | 243 const gfx::Point& initial_location_in_parent() const { |
| 244 return initial_location_in_parent_; | 244 return initial_location_in_parent_; |
| 245 } | 245 } |
| 246 | 246 |
| 247 private: | 247 private: |
| 248 scoped_ptr<WindowResizer> resizer_; | 248 scoped_ptr<WindowResizer> resizer_; |
| 249 ShelfModel* model_; | 249 ShelfModel* model_; |
| 250 aura::client::WindowType window_type_; | 250 ui::wm::WindowType window_type_; |
| 251 aura::test::TestWindowDelegate delegate_; | 251 aura::test::TestWindowDelegate delegate_; |
| 252 | 252 |
| 253 // Location at start of the drag in |window->parent()|'s coordinates. | 253 // Location at start of the drag in |window->parent()|'s coordinates. |
| 254 gfx::Point initial_location_in_parent_; | 254 gfx::Point initial_location_in_parent_; |
| 255 | 255 |
| 256 DISALLOW_COPY_AND_ASSIGN(DockedWindowResizerTest); | 256 DISALLOW_COPY_AND_ASSIGN(DockedWindowResizerTest); |
| 257 }; | 257 }; |
| 258 | 258 |
| 259 // Verifies a window can be dragged and attached to the dock. | 259 // Verifies a window can be dragged and attached to the dock. |
| 260 TEST_P(DockedWindowResizerTest, AttachRightPrecise) { | 260 TEST_P(DockedWindowResizerTest, AttachRightPrecise) { |
| (...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 534 | 534 |
| 535 scoped_ptr<aura::Window> w1(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); | 535 scoped_ptr<aura::Window> w1(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); |
| 536 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w1.get(), 20); | 536 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w1.get(), 20); |
| 537 | 537 |
| 538 // w1 should be docked at the right edge. | 538 // w1 should be docked at the right edge. |
| 539 EXPECT_EQ(w1->GetRootWindow()->bounds().right(), | 539 EXPECT_EQ(w1->GetRootWindow()->bounds().right(), |
| 540 w1->GetBoundsInScreen().right()); | 540 w1->GetBoundsInScreen().right()); |
| 541 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); | 541 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); |
| 542 | 542 |
| 543 scoped_ptr<aura::Window> w2(CreateTestWindowInShellWithDelegateAndType( | 543 scoped_ptr<aura::Window> w2(CreateTestWindowInShellWithDelegateAndType( |
| 544 NULL, aura::client::WINDOW_TYPE_NORMAL, 0, gfx::Rect(20, 20, 150, 20))); | 544 NULL, ui::wm::WINDOW_TYPE_NORMAL, 0, gfx::Rect(20, 20, 150, 20))); |
| 545 wm::GetWindowState(w2.get())->Maximize(); | 545 wm::GetWindowState(w2.get())->Maximize(); |
| 546 EXPECT_EQ(internal::kShellWindowId_DefaultContainer, w2->parent()->id()); | 546 EXPECT_EQ(internal::kShellWindowId_DefaultContainer, w2->parent()->id()); |
| 547 EXPECT_TRUE(wm::GetWindowState(w2.get())->IsMaximized()); | 547 EXPECT_TRUE(wm::GetWindowState(w2.get())->IsMaximized()); |
| 548 | 548 |
| 549 gfx::Rect work_area = | 549 gfx::Rect work_area = |
| 550 Shell::GetScreen()->GetDisplayNearestWindow(w1.get()).work_area(); | 550 Shell::GetScreen()->GetDisplayNearestWindow(w1.get()).work_area(); |
| 551 DockedWindowLayoutManager* manager = | 551 DockedWindowLayoutManager* manager = |
| 552 static_cast<DockedWindowLayoutManager*>(w1->parent()->layout_manager()); | 552 static_cast<DockedWindowLayoutManager*>(w1->parent()->layout_manager()); |
| 553 | 553 |
| 554 // Docked window should be centered vertically in the work area. | 554 // Docked window should be centered vertically in the work area. |
| (...skipping 734 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1289 | 1289 |
| 1290 // Tests that docking and undocking a |window| with a transient child properly | 1290 // Tests that docking and undocking a |window| with a transient child properly |
| 1291 // maintains the parent of that transient child to be the same as the |window|. | 1291 // maintains the parent of that transient child to be the same as the |window|. |
| 1292 TEST_P(DockedWindowResizerTest, DragWindowWithTransientChild) { | 1292 TEST_P(DockedWindowResizerTest, DragWindowWithTransientChild) { |
| 1293 if (!SupportsHostWindowResize()) | 1293 if (!SupportsHostWindowResize()) |
| 1294 return; | 1294 return; |
| 1295 | 1295 |
| 1296 // Create a window with a transient child. | 1296 // Create a window with a transient child. |
| 1297 scoped_ptr<aura::Window> window(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); | 1297 scoped_ptr<aura::Window> window(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); |
| 1298 scoped_ptr<aura::Window> child(CreateTestWindowInShellWithDelegateAndType( | 1298 scoped_ptr<aura::Window> child(CreateTestWindowInShellWithDelegateAndType( |
| 1299 NULL, aura::client::WINDOW_TYPE_NORMAL, 0, gfx::Rect(20, 20, 150, 20))); | 1299 NULL, ui::wm::WINDOW_TYPE_NORMAL, 0, gfx::Rect(20, 20, 150, 20))); |
| 1300 window->AddTransientChild(child.get()); | 1300 window->AddTransientChild(child.get()); |
| 1301 if (window->parent() != child->parent()) | 1301 if (window->parent() != child->parent()) |
| 1302 window->parent()->AddChild(child.get()); | 1302 window->parent()->AddChild(child.get()); |
| 1303 EXPECT_EQ(window.get(), child->transient_parent()); | 1303 EXPECT_EQ(window.get(), child->transient_parent()); |
| 1304 | 1304 |
| 1305 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, window.get(), 20); | 1305 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, window.get(), 20); |
| 1306 | 1306 |
| 1307 // A window should be docked at the right edge. | 1307 // A window should be docked at the right edge. |
| 1308 EXPECT_EQ(internal::kShellWindowId_DockedContainer, window->parent()->id()); | 1308 EXPECT_EQ(internal::kShellWindowId_DockedContainer, window->parent()->id()); |
| 1309 EXPECT_EQ(internal::kShellWindowId_DockedContainer, child->parent()->id()); | 1309 EXPECT_EQ(internal::kShellWindowId_DockedContainer, child->parent()->id()); |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1423 EXPECT_EQ(work_area.height(), w1->bounds().height()); | 1423 EXPECT_EQ(work_area.height(), w1->bounds().height()); |
| 1424 EXPECT_EQ(work_area.x(), w1->bounds().x()); | 1424 EXPECT_EQ(work_area.x(), w1->bounds().x()); |
| 1425 EXPECT_EQ(internal::kShellWindowId_DefaultContainer, w1->parent()->id()); | 1425 EXPECT_EQ(internal::kShellWindowId_DefaultContainer, w1->parent()->id()); |
| 1426 EXPECT_FALSE(window_state->IsDocked()); | 1426 EXPECT_FALSE(window_state->IsDocked()); |
| 1427 EXPECT_TRUE(window_state->IsSnapped()); | 1427 EXPECT_TRUE(window_state->IsSnapped()); |
| 1428 } | 1428 } |
| 1429 | 1429 |
| 1430 // Tests run twice - on both panels and normal windows | 1430 // Tests run twice - on both panels and normal windows |
| 1431 INSTANTIATE_TEST_CASE_P(NormalOrPanel, | 1431 INSTANTIATE_TEST_CASE_P(NormalOrPanel, |
| 1432 DockedWindowResizerTest, | 1432 DockedWindowResizerTest, |
| 1433 testing::Values(aura::client::WINDOW_TYPE_NORMAL, | 1433 testing::Values(ui::wm::WINDOW_TYPE_NORMAL, |
| 1434 aura::client::WINDOW_TYPE_PANEL)); | 1434 ui::wm::WINDOW_TYPE_PANEL)); |
| 1435 } // namespace internal | 1435 } // namespace internal |
| 1436 } // namespace ash | 1436 } // namespace ash |
| OLD | NEW |