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/root_window_controller.h" | 8 #include "ash/root_window_controller.h" |
9 #include "ash/screen_util.h" | 9 #include "ash/screen_util.h" |
10 #include "ash/shelf/shelf.h" | 10 #include "ash/shelf/shelf.h" |
(...skipping 19 matching lines...) Expand all Loading... |
30 #include "ui/aura/client/window_tree_client.h" | 30 #include "ui/aura/client/window_tree_client.h" |
31 #include "ui/aura/test/event_generator.h" | 31 #include "ui/aura/test/event_generator.h" |
32 #include "ui/aura/test/test_window_delegate.h" | 32 #include "ui/aura/test/test_window_delegate.h" |
33 #include "ui/aura/window_event_dispatcher.h" | 33 #include "ui/aura/window_event_dispatcher.h" |
34 #include "ui/base/hit_test.h" | 34 #include "ui/base/hit_test.h" |
35 #include "ui/base/ui_base_types.h" | 35 #include "ui/base/ui_base_types.h" |
36 #include "ui/views/widget/widget.h" | 36 #include "ui/views/widget/widget.h" |
37 #include "ui/wm/core/window_util.h" | 37 #include "ui/wm/core/window_util.h" |
38 | 38 |
39 namespace ash { | 39 namespace ash { |
40 namespace internal { | |
41 | 40 |
42 class DockedWindowResizerTest | 41 class DockedWindowResizerTest |
43 : public test::AshTestBase, | 42 : public test::AshTestBase, |
44 public testing::WithParamInterface<ui::wm::WindowType> { | 43 public testing::WithParamInterface<ui::wm::WindowType> { |
45 public: | 44 public: |
46 DockedWindowResizerTest() : model_(NULL), window_type_(GetParam()) {} | 45 DockedWindowResizerTest() : model_(NULL), window_type_(GetParam()) {} |
47 virtual ~DockedWindowResizerTest() {} | 46 virtual ~DockedWindowResizerTest() {} |
48 | 47 |
49 virtual void SetUp() OVERRIDE { | 48 virtual void SetUp() OVERRIDE { |
50 AshTestBase::SetUp(); | 49 AshTestBase::SetUp(); |
(...skipping 25 matching lines...) Expand all Loading... |
76 aura::Window* CreateTestWindow(const gfx::Rect& bounds) { | 75 aura::Window* CreateTestWindow(const gfx::Rect& bounds) { |
77 aura::Window* window = CreateTestWindowInShellWithDelegateAndType( | 76 aura::Window* window = CreateTestWindowInShellWithDelegateAndType( |
78 &delegate_, | 77 &delegate_, |
79 window_type_, | 78 window_type_, |
80 0, | 79 0, |
81 bounds); | 80 bounds); |
82 if (window_type_ == ui::wm::WINDOW_TYPE_PANEL) { | 81 if (window_type_ == ui::wm::WINDOW_TYPE_PANEL) { |
83 test::TestShelfDelegate* shelf_delegate = | 82 test::TestShelfDelegate* shelf_delegate = |
84 test::TestShelfDelegate::instance(); | 83 test::TestShelfDelegate::instance(); |
85 shelf_delegate->AddShelfItem(window); | 84 shelf_delegate->AddShelfItem(window); |
86 PanelLayoutManager* manager = | 85 PanelLayoutManager* manager = static_cast<PanelLayoutManager*>( |
87 static_cast<PanelLayoutManager*>( | 86 Shell::GetContainer(window->GetRootWindow(), |
88 Shell::GetContainer(window->GetRootWindow(), | 87 kShellWindowId_PanelContainer)->layout_manager()); |
89 internal::kShellWindowId_PanelContainer)-> | |
90 layout_manager()); | |
91 manager->Relayout(); | 88 manager->Relayout(); |
92 } | 89 } |
93 return window; | 90 return window; |
94 } | 91 } |
95 | 92 |
96 aura::Window* CreateModalWindow(const gfx::Rect& bounds) { | 93 aura::Window* CreateModalWindow(const gfx::Rect& bounds) { |
97 aura::Window* window = new aura::Window(&delegate_); | 94 aura::Window* window = new aura::Window(&delegate_); |
98 window->SetProperty(aura::client::kModalKey, ui::MODAL_TYPE_SYSTEM); | 95 window->SetProperty(aura::client::kModalKey, ui::MODAL_TYPE_SYSTEM); |
99 window->SetType(ui::wm::WINDOW_TYPE_NORMAL); | 96 window->SetType(ui::wm::WINDOW_TYPE_NORMAL); |
100 window->Init(aura::WINDOW_LAYER_TEXTURED); | 97 window->Init(aura::WINDOW_LAYER_TEXTURED); |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
163 void DragRevert() { | 160 void DragRevert() { |
164 resizer_->RevertDrag(); | 161 resizer_->RevertDrag(); |
165 resizer_.reset(); | 162 resizer_.reset(); |
166 } | 163 } |
167 | 164 |
168 // Panels are parented by panel container during drags. | 165 // Panels are parented by panel container during drags. |
169 // All other windows that are tested here are parented by dock container | 166 // All other windows that are tested here are parented by dock container |
170 // during drags. | 167 // during drags. |
171 int CorrectContainerIdDuringDrag() { | 168 int CorrectContainerIdDuringDrag() { |
172 if (window_type_ == ui::wm::WINDOW_TYPE_PANEL) | 169 if (window_type_ == ui::wm::WINDOW_TYPE_PANEL) |
173 return internal::kShellWindowId_PanelContainer; | 170 return kShellWindowId_PanelContainer; |
174 return internal::kShellWindowId_DockedContainer; | 171 return kShellWindowId_DockedContainer; |
175 } | 172 } |
176 | 173 |
177 // Test dragging the window vertically (to detach if it is a panel) and then | 174 // 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|. | 175 // horizontally to the edge with an added offset from the edge of |dx|. |
179 void DragRelativeToEdge(DockedEdge edge, | 176 void DragRelativeToEdge(DockedEdge edge, |
180 aura::Window* window, | 177 aura::Window* window, |
181 int dx) { | 178 int dx) { |
182 DragVerticallyAndRelativeToEdge( | 179 DragVerticallyAndRelativeToEdge( |
183 edge, | 180 edge, |
184 window, | 181 window, |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
225 dx += work_area.x() - initial_location_in_screen.x(); | 222 dx += work_area.x() - initial_location_in_screen.x(); |
226 else if (edge == DOCKED_EDGE_RIGHT) | 223 else if (edge == DOCKED_EDGE_RIGHT) |
227 dx += work_area.right() - 1 - initial_location_in_screen.x(); | 224 dx += work_area.right() - 1 - initial_location_in_screen.x(); |
228 DragMove(dx, dy); | 225 DragMove(dx, dy); |
229 EXPECT_EQ(CorrectContainerIdDuringDrag(), window->parent()->id()); | 226 EXPECT_EQ(CorrectContainerIdDuringDrag(), window->parent()->id()); |
230 // Release the mouse and the panel should be attached to the dock. | 227 // Release the mouse and the panel should be attached to the dock. |
231 DragEnd(); | 228 DragEnd(); |
232 | 229 |
233 // x-coordinate can get adjusted by snapping or sticking. | 230 // x-coordinate can get adjusted by snapping or sticking. |
234 // y-coordinate could be changed by possible automatic layout if docked. | 231 // y-coordinate could be changed by possible automatic layout if docked. |
235 if (window->parent()->id() != internal::kShellWindowId_DockedContainer && | 232 if (window->parent()->id() != kShellWindowId_DockedContainer && |
236 !wm::GetWindowState(window)->HasRestoreBounds()) { | 233 !wm::GetWindowState(window)->HasRestoreBounds()) { |
237 EXPECT_EQ(initial_bounds.y() + dy, window->GetBoundsInScreen().y()); | 234 EXPECT_EQ(initial_bounds.y() + dy, window->GetBoundsInScreen().y()); |
238 } | 235 } |
239 } | 236 } |
240 | 237 |
241 bool test_panels() const { return window_type_ == ui::wm::WINDOW_TYPE_PANEL; } | 238 bool test_panels() const { return window_type_ == ui::wm::WINDOW_TYPE_PANEL; } |
242 | 239 |
243 aura::test::TestWindowDelegate* delegate() { | 240 aura::test::TestWindowDelegate* delegate() { |
244 return &delegate_; | 241 return &delegate_; |
245 } | 242 } |
(...skipping 18 matching lines...) Expand all Loading... |
264 TEST_P(DockedWindowResizerTest, AttachRightPrecise) { | 261 TEST_P(DockedWindowResizerTest, AttachRightPrecise) { |
265 if (!SupportsHostWindowResize()) | 262 if (!SupportsHostWindowResize()) |
266 return; | 263 return; |
267 | 264 |
268 scoped_ptr<aura::Window> window(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); | 265 scoped_ptr<aura::Window> window(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); |
269 DragRelativeToEdge(DOCKED_EDGE_RIGHT, window.get(), 0); | 266 DragRelativeToEdge(DOCKED_EDGE_RIGHT, window.get(), 0); |
270 | 267 |
271 // The window should be docked at the right edge. | 268 // The window should be docked at the right edge. |
272 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().right(), | 269 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().right(), |
273 window->GetBoundsInScreen().right()); | 270 window->GetBoundsInScreen().right()); |
274 EXPECT_EQ(internal::kShellWindowId_DockedContainer, window->parent()->id()); | 271 EXPECT_EQ(kShellWindowId_DockedContainer, window->parent()->id()); |
275 } | 272 } |
276 | 273 |
277 // Verifies a window can be dragged and attached to the dock | 274 // Verifies a window can be dragged and attached to the dock |
278 // even if pointer overshoots the screen edge by a few pixels (sticky edge) | 275 // even if pointer overshoots the screen edge by a few pixels (sticky edge) |
279 TEST_P(DockedWindowResizerTest, AttachRightOvershoot) { | 276 TEST_P(DockedWindowResizerTest, AttachRightOvershoot) { |
280 if (!SupportsHostWindowResize()) | 277 if (!SupportsHostWindowResize()) |
281 return; | 278 return; |
282 | 279 |
283 scoped_ptr<aura::Window> window(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); | 280 scoped_ptr<aura::Window> window(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); |
284 DragRelativeToEdge(DOCKED_EDGE_RIGHT, window.get(), +4); | 281 DragRelativeToEdge(DOCKED_EDGE_RIGHT, window.get(), +4); |
285 | 282 |
286 // The window should be docked at the right edge. | 283 // The window should be docked at the right edge. |
287 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().right(), | 284 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().right(), |
288 window->GetBoundsInScreen().right()); | 285 window->GetBoundsInScreen().right()); |
289 EXPECT_EQ(internal::kShellWindowId_DockedContainer, window->parent()->id()); | 286 EXPECT_EQ(kShellWindowId_DockedContainer, window->parent()->id()); |
290 } | 287 } |
291 | 288 |
292 // Verifies a window can be dragged and then if a pointer is not quite reaching | 289 // Verifies a window can be dragged and then if a pointer is not quite reaching |
293 // the screen edge the window does not get docked and stays in the desktop. | 290 // the screen edge the window does not get docked and stays in the desktop. |
294 TEST_P(DockedWindowResizerTest, AttachRightUndershoot) { | 291 TEST_P(DockedWindowResizerTest, AttachRightUndershoot) { |
295 if (!SupportsHostWindowResize()) | 292 if (!SupportsHostWindowResize()) |
296 return; | 293 return; |
297 | 294 |
298 scoped_ptr<aura::Window> window(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); | 295 scoped_ptr<aura::Window> window(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); |
299 // Grabbing at 70px ensures that at least 30% of the window is in screen, | 296 // Grabbing at 70px ensures that at least 30% of the window is in screen, |
300 // otherwise the window would be adjusted in | 297 // otherwise the window would be adjusted in |
301 // WorkspaceLayoutManager::AdjustWindowBoundsWhenAdded. | 298 // WorkspaceLayoutManager::AdjustWindowBoundsWhenAdded. |
302 const int kGrabOffsetX = 70; | 299 const int kGrabOffsetX = 70; |
303 const int kUndershootBy = 1; | 300 const int kUndershootBy = 1; |
304 DragVerticallyAndRelativeToEdge(DOCKED_EDGE_RIGHT, | 301 DragVerticallyAndRelativeToEdge(DOCKED_EDGE_RIGHT, |
305 window.get(), | 302 window.get(), |
306 -kUndershootBy, test_panels() ? -100 : 20, | 303 -kUndershootBy, test_panels() ? -100 : 20, |
307 kGrabOffsetX, 5); | 304 kGrabOffsetX, 5); |
308 | 305 |
309 // The window right should be past the screen edge but not docked. | 306 // The window right should be past the screen edge but not docked. |
310 // Initial touch point is 70px to the right which helps to find where the edge | 307 // Initial touch point is 70px to the right which helps to find where the edge |
311 // should be. | 308 // should be. |
312 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().right() + | 309 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().right() + |
313 window->bounds().width() - kGrabOffsetX - kUndershootBy - 1, | 310 window->bounds().width() - kGrabOffsetX - kUndershootBy - 1, |
314 window->GetBoundsInScreen().right()); | 311 window->GetBoundsInScreen().right()); |
315 EXPECT_EQ(internal::kShellWindowId_DefaultContainer, | 312 EXPECT_EQ(kShellWindowId_DefaultContainer, window->parent()->id()); |
316 window->parent()->id()); | |
317 } | 313 } |
318 | 314 |
319 // Verifies a window can be dragged and attached to the dock. | 315 // Verifies a window can be dragged and attached to the dock. |
320 TEST_P(DockedWindowResizerTest, AttachLeftPrecise) { | 316 TEST_P(DockedWindowResizerTest, AttachLeftPrecise) { |
321 if (!SupportsHostWindowResize()) | 317 if (!SupportsHostWindowResize()) |
322 return; | 318 return; |
323 | 319 |
324 scoped_ptr<aura::Window> window(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); | 320 scoped_ptr<aura::Window> window(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); |
325 DragRelativeToEdge(DOCKED_EDGE_LEFT, window.get(), 0); | 321 DragRelativeToEdge(DOCKED_EDGE_LEFT, window.get(), 0); |
326 | 322 |
327 // The window should be docked at the left edge. | 323 // The window should be docked at the left edge. |
328 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().x(), | 324 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().x(), |
329 window->GetBoundsInScreen().x()); | 325 window->GetBoundsInScreen().x()); |
330 EXPECT_EQ(internal::kShellWindowId_DockedContainer, window->parent()->id()); | 326 EXPECT_EQ(kShellWindowId_DockedContainer, window->parent()->id()); |
331 } | 327 } |
332 | 328 |
333 // Verifies a window can be dragged and attached to the dock | 329 // Verifies a window can be dragged and attached to the dock |
334 // even if pointer overshoots the screen edge by a few pixels (sticky edge) | 330 // even if pointer overshoots the screen edge by a few pixels (sticky edge) |
335 TEST_P(DockedWindowResizerTest, AttachLeftOvershoot) { | 331 TEST_P(DockedWindowResizerTest, AttachLeftOvershoot) { |
336 if (!SupportsHostWindowResize()) | 332 if (!SupportsHostWindowResize()) |
337 return; | 333 return; |
338 | 334 |
339 scoped_ptr<aura::Window> window(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); | 335 scoped_ptr<aura::Window> window(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); |
340 DragRelativeToEdge(DOCKED_EDGE_LEFT, window.get(), -4); | 336 DragRelativeToEdge(DOCKED_EDGE_LEFT, window.get(), -4); |
341 | 337 |
342 // The window should be docked at the left edge. | 338 // The window should be docked at the left edge. |
343 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().x(), | 339 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().x(), |
344 window->GetBoundsInScreen().x()); | 340 window->GetBoundsInScreen().x()); |
345 EXPECT_EQ(internal::kShellWindowId_DockedContainer, window->parent()->id()); | 341 EXPECT_EQ(kShellWindowId_DockedContainer, window->parent()->id()); |
346 } | 342 } |
347 | 343 |
348 // Verifies a window can be dragged and then if a pointer is not quite reaching | 344 // Verifies a window can be dragged and then if a pointer is not quite reaching |
349 // the screen edge the window does not get docked and stays in the desktop. | 345 // the screen edge the window does not get docked and stays in the desktop. |
350 TEST_P(DockedWindowResizerTest, AttachLeftUndershoot) { | 346 TEST_P(DockedWindowResizerTest, AttachLeftUndershoot) { |
351 if (!SupportsHostWindowResize()) | 347 if (!SupportsHostWindowResize()) |
352 return; | 348 return; |
353 | 349 |
354 scoped_ptr<aura::Window> window(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); | 350 scoped_ptr<aura::Window> window(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); |
355 gfx::Rect initial_bounds(window->bounds()); | 351 gfx::Rect initial_bounds(window->bounds()); |
356 DragRelativeToEdge(DOCKED_EDGE_LEFT, window.get(), 1); | 352 DragRelativeToEdge(DOCKED_EDGE_LEFT, window.get(), 1); |
357 | 353 |
358 // The window should be crossing the screen edge but not docked. | 354 // The window should be crossing the screen edge but not docked. |
359 int expected_x = initial_bounds.x() - initial_location_in_parent().x() + 1; | 355 int expected_x = initial_bounds.x() - initial_location_in_parent().x() + 1; |
360 EXPECT_EQ(expected_x, window->GetBoundsInScreen().x()); | 356 EXPECT_EQ(expected_x, window->GetBoundsInScreen().x()); |
361 EXPECT_EQ(internal::kShellWindowId_DefaultContainer, | 357 EXPECT_EQ(kShellWindowId_DefaultContainer, window->parent()->id()); |
362 window->parent()->id()); | |
363 } | 358 } |
364 | 359 |
365 // Dock on the right side, change shelf alignment, check that windows move to | 360 // Dock on the right side, change shelf alignment, check that windows move to |
366 // the opposite side. | 361 // the opposite side. |
367 TEST_P(DockedWindowResizerTest, AttachRightChangeShelf) { | 362 TEST_P(DockedWindowResizerTest, AttachRightChangeShelf) { |
368 if (!SupportsHostWindowResize()) | 363 if (!SupportsHostWindowResize()) |
369 return; | 364 return; |
370 | 365 |
371 scoped_ptr<aura::Window> window(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); | 366 scoped_ptr<aura::Window> window(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); |
372 DragRelativeToEdge(DOCKED_EDGE_RIGHT, window.get(), 0); | 367 DragRelativeToEdge(DOCKED_EDGE_RIGHT, window.get(), 0); |
373 | 368 |
374 // The window should be docked at the right edge. | 369 // The window should be docked at the right edge. |
375 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().right(), | 370 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().right(), |
376 window->GetBoundsInScreen().right()); | 371 window->GetBoundsInScreen().right()); |
377 EXPECT_EQ(internal::kShellWindowId_DockedContainer, window->parent()->id()); | 372 EXPECT_EQ(kShellWindowId_DockedContainer, window->parent()->id()); |
378 | 373 |
379 // set launcher shelf to be aligned on the right | 374 // set launcher shelf to be aligned on the right |
380 ash::Shell* shell = ash::Shell::GetInstance(); | 375 ash::Shell* shell = ash::Shell::GetInstance(); |
381 shell->SetShelfAlignment(SHELF_ALIGNMENT_RIGHT, | 376 shell->SetShelfAlignment(SHELF_ALIGNMENT_RIGHT, |
382 shell->GetPrimaryRootWindow()); | 377 shell->GetPrimaryRootWindow()); |
383 // The window should have moved and get attached to the left dock. | 378 // The window should have moved and get attached to the left dock. |
384 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().x(), | 379 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().x(), |
385 window->GetBoundsInScreen().x()); | 380 window->GetBoundsInScreen().x()); |
386 EXPECT_EQ(internal::kShellWindowId_DockedContainer, window->parent()->id()); | 381 EXPECT_EQ(kShellWindowId_DockedContainer, window->parent()->id()); |
387 | 382 |
388 // set launcher shelf to be aligned on the left | 383 // set launcher shelf to be aligned on the left |
389 shell->SetShelfAlignment(SHELF_ALIGNMENT_LEFT, | 384 shell->SetShelfAlignment(SHELF_ALIGNMENT_LEFT, |
390 shell->GetPrimaryRootWindow()); | 385 shell->GetPrimaryRootWindow()); |
391 // The window should have moved and get attached to the right edge. | 386 // The window should have moved and get attached to the right edge. |
392 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().right(), | 387 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().right(), |
393 window->GetBoundsInScreen().right()); | 388 window->GetBoundsInScreen().right()); |
394 EXPECT_EQ(internal::kShellWindowId_DockedContainer, window->parent()->id()); | 389 EXPECT_EQ(kShellWindowId_DockedContainer, window->parent()->id()); |
395 | 390 |
396 // set launcher shelf to be aligned at the bottom | 391 // set launcher shelf to be aligned at the bottom |
397 shell->SetShelfAlignment(SHELF_ALIGNMENT_BOTTOM, | 392 shell->SetShelfAlignment(SHELF_ALIGNMENT_BOTTOM, |
398 shell->GetPrimaryRootWindow()); | 393 shell->GetPrimaryRootWindow()); |
399 // The window should stay in the right edge. | 394 // The window should stay in the right edge. |
400 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().right(), | 395 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().right(), |
401 window->GetBoundsInScreen().right()); | 396 window->GetBoundsInScreen().right()); |
402 EXPECT_EQ(internal::kShellWindowId_DockedContainer, window->parent()->id()); | 397 EXPECT_EQ(kShellWindowId_DockedContainer, window->parent()->id()); |
403 } | 398 } |
404 | 399 |
405 // Dock on the right side, try to undock, then drag more to really undock | 400 // Dock on the right side, try to undock, then drag more to really undock |
406 TEST_P(DockedWindowResizerTest, AttachTryDetach) { | 401 TEST_P(DockedWindowResizerTest, AttachTryDetach) { |
407 if (!SupportsHostWindowResize()) | 402 if (!SupportsHostWindowResize()) |
408 return; | 403 return; |
409 | 404 |
410 scoped_ptr<aura::Window> window(CreateTestWindow( | 405 scoped_ptr<aura::Window> window(CreateTestWindow( |
411 gfx::Rect(0, 0, ideal_width() + 10, 201))); | 406 gfx::Rect(0, 0, ideal_width() + 10, 201))); |
412 DragRelativeToEdge(DOCKED_EDGE_RIGHT, window.get(), 0); | 407 DragRelativeToEdge(DOCKED_EDGE_RIGHT, window.get(), 0); |
413 | 408 |
414 // The window should be docked at the right edge. | 409 // The window should be docked at the right edge. |
415 // Its width should shrink to ideal width. | 410 // Its width should shrink to ideal width. |
416 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().right(), | 411 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().right(), |
417 window->GetBoundsInScreen().right()); | 412 window->GetBoundsInScreen().right()); |
418 EXPECT_EQ(ideal_width(), window->GetBoundsInScreen().width()); | 413 EXPECT_EQ(ideal_width(), window->GetBoundsInScreen().width()); |
419 EXPECT_EQ(internal::kShellWindowId_DockedContainer, window->parent()->id()); | 414 EXPECT_EQ(kShellWindowId_DockedContainer, window->parent()->id()); |
420 | 415 |
421 // Try to detach by dragging left less than kSnapToDockDistance. | 416 // Try to detach by dragging left less than kSnapToDockDistance. |
422 // The window should stay docked. | 417 // The window should stay docked. |
423 ASSERT_NO_FATAL_FAILURE(DragStartAtOffsetFromWindowOrigin( | 418 ASSERT_NO_FATAL_FAILURE(DragStartAtOffsetFromWindowOrigin( |
424 window.get(), 10, 0)); | 419 window.get(), 10, 0)); |
425 DragMove(-4, -10); | 420 DragMove(-4, -10); |
426 // Release the mouse and the window should be still attached to the dock. | 421 // Release the mouse and the window should be still attached to the dock. |
427 DragEnd(); | 422 DragEnd(); |
428 | 423 |
429 // The window should be still attached to the right edge. | 424 // The window should be still attached to the right edge. |
430 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().right(), | 425 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().right(), |
431 window->GetBoundsInScreen().right()); | 426 window->GetBoundsInScreen().right()); |
432 EXPECT_EQ(internal::kShellWindowId_DockedContainer, window->parent()->id()); | 427 EXPECT_EQ(kShellWindowId_DockedContainer, window->parent()->id()); |
433 | 428 |
434 // Try to detach by dragging left by kSnapToDockDistance or more. | 429 // Try to detach by dragging left by kSnapToDockDistance or more. |
435 // The window should get undocked. | 430 // The window should get undocked. |
436 const int left_edge = window->bounds().x(); | 431 const int left_edge = window->bounds().x(); |
437 ASSERT_NO_FATAL_FAILURE(DragStartAtOffsetFromWindowOrigin( | 432 ASSERT_NO_FATAL_FAILURE(DragStartAtOffsetFromWindowOrigin( |
438 window.get(), 10, 0)); | 433 window.get(), 10, 0)); |
439 DragMove(-32, -10); | 434 DragMove(-32, -10); |
440 // Release the mouse and the window should be no longer attached to the dock. | 435 // Release the mouse and the window should be no longer attached to the dock. |
441 DragEnd(); | 436 DragEnd(); |
442 | 437 |
443 // The window should be floating on the desktop again and moved to the left. | 438 // The window should be floating on the desktop again and moved to the left. |
444 EXPECT_EQ(left_edge - 32, window->GetBoundsInScreen().x()); | 439 EXPECT_EQ(left_edge - 32, window->GetBoundsInScreen().x()); |
445 EXPECT_EQ(internal::kShellWindowId_DefaultContainer, | 440 EXPECT_EQ(kShellWindowId_DefaultContainer, window->parent()->id()); |
446 window->parent()->id()); | |
447 } | 441 } |
448 | 442 |
449 // Dock on the right side, and undock by dragging the right edge of the window | 443 // Dock on the right side, and undock by dragging the right edge of the window |
450 // header. This test is useful because both the position of the dragged window | 444 // header. This test is useful because both the position of the dragged window |
451 // and the position of the mouse are used in determining whether a window should | 445 // and the position of the mouse are used in determining whether a window should |
452 // be undocked. | 446 // be undocked. |
453 TEST_P(DockedWindowResizerTest, AttachTryDetachDragRightEdgeOfHeader) { | 447 TEST_P(DockedWindowResizerTest, AttachTryDetachDragRightEdgeOfHeader) { |
454 if (!SupportsHostWindowResize()) | 448 if (!SupportsHostWindowResize()) |
455 return; | 449 return; |
456 | 450 |
457 scoped_ptr<aura::Window> window(CreateTestWindow( | 451 scoped_ptr<aura::Window> window(CreateTestWindow( |
458 gfx::Rect(0, 0, ideal_width() + 10, 201))); | 452 gfx::Rect(0, 0, ideal_width() + 10, 201))); |
459 DragRelativeToEdge(DOCKED_EDGE_RIGHT, window.get(), 0); | 453 DragRelativeToEdge(DOCKED_EDGE_RIGHT, window.get(), 0); |
460 | 454 |
461 // The window should be docked at the right edge. | 455 // The window should be docked at the right edge. |
462 // Its width should shrink to ideal width. | 456 // Its width should shrink to ideal width. |
463 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().right(), | 457 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().right(), |
464 window->GetBoundsInScreen().right()); | 458 window->GetBoundsInScreen().right()); |
465 EXPECT_EQ(ideal_width(), window->GetBoundsInScreen().width()); | 459 EXPECT_EQ(ideal_width(), window->GetBoundsInScreen().width()); |
466 EXPECT_EQ(internal::kShellWindowId_DockedContainer, window->parent()->id()); | 460 EXPECT_EQ(kShellWindowId_DockedContainer, window->parent()->id()); |
467 | 461 |
468 // Try to detach by dragging left less than kSnapToDockDistance. | 462 // Try to detach by dragging left less than kSnapToDockDistance. |
469 // The window should stay docked. | 463 // The window should stay docked. |
470 ASSERT_NO_FATAL_FAILURE(DragStartAtOffsetFromWindowOrigin( | 464 ASSERT_NO_FATAL_FAILURE(DragStartAtOffsetFromWindowOrigin( |
471 window.get(), ideal_width() - 10, 0)); | 465 window.get(), ideal_width() - 10, 0)); |
472 DragMove(-4, -10); | 466 DragMove(-4, -10); |
473 // Release the mouse and the window should be still attached to the dock. | 467 // Release the mouse and the window should be still attached to the dock. |
474 DragEnd(); | 468 DragEnd(); |
475 | 469 |
476 // The window should be still attached to the right edge. | 470 // The window should be still attached to the right edge. |
477 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().right(), | 471 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().right(), |
478 window->GetBoundsInScreen().right()); | 472 window->GetBoundsInScreen().right()); |
479 EXPECT_EQ(internal::kShellWindowId_DockedContainer, window->parent()->id()); | 473 EXPECT_EQ(kShellWindowId_DockedContainer, window->parent()->id()); |
480 | 474 |
481 // Try to detach by dragging left by kSnapToDockDistance or more. | 475 // Try to detach by dragging left by kSnapToDockDistance or more. |
482 // The window should get undocked. | 476 // The window should get undocked. |
483 const int left_edge = window->bounds().x(); | 477 const int left_edge = window->bounds().x(); |
484 ASSERT_NO_FATAL_FAILURE(DragStartAtOffsetFromWindowOrigin( | 478 ASSERT_NO_FATAL_FAILURE(DragStartAtOffsetFromWindowOrigin( |
485 window.get(), ideal_width() - 10, 0)); | 479 window.get(), ideal_width() - 10, 0)); |
486 DragMove(-32, -10); | 480 DragMove(-32, -10); |
487 // Release the mouse and the window should be no longer attached to the dock. | 481 // Release the mouse and the window should be no longer attached to the dock. |
488 DragEnd(); | 482 DragEnd(); |
489 | 483 |
490 // The window should be floating on the desktop again and moved to the left. | 484 // The window should be floating on the desktop again and moved to the left. |
491 EXPECT_EQ(left_edge - 32, window->GetBoundsInScreen().x()); | 485 EXPECT_EQ(left_edge - 32, window->GetBoundsInScreen().x()); |
492 EXPECT_EQ(internal::kShellWindowId_DefaultContainer, | 486 EXPECT_EQ(kShellWindowId_DefaultContainer, window->parent()->id()); |
493 window->parent()->id()); | |
494 } | 487 } |
495 | 488 |
496 // Minimize a docked window, then restore it and check that it is still docked. | 489 // Minimize a docked window, then restore it and check that it is still docked. |
497 TEST_P(DockedWindowResizerTest, AttachMinimizeRestore) { | 490 TEST_P(DockedWindowResizerTest, AttachMinimizeRestore) { |
498 if (!SupportsHostWindowResize()) | 491 if (!SupportsHostWindowResize()) |
499 return; | 492 return; |
500 | 493 |
501 scoped_ptr<aura::Window> window(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); | 494 scoped_ptr<aura::Window> window(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); |
502 DragRelativeToEdge(DOCKED_EDGE_RIGHT, window.get(), 0); | 495 DragRelativeToEdge(DOCKED_EDGE_RIGHT, window.get(), 0); |
503 | 496 |
504 // The window should be docked at the right edge. | 497 // The window should be docked at the right edge. |
505 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().right(), | 498 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().right(), |
506 window->GetBoundsInScreen().right()); | 499 window->GetBoundsInScreen().right()); |
507 EXPECT_EQ(internal::kShellWindowId_DockedContainer, window->parent()->id()); | 500 EXPECT_EQ(kShellWindowId_DockedContainer, window->parent()->id()); |
508 | 501 |
509 wm::WindowState* window_state = wm::GetWindowState(window.get()); | 502 wm::WindowState* window_state = wm::GetWindowState(window.get()); |
510 // Minimize the window, it should be hidden. | 503 // Minimize the window, it should be hidden. |
511 window_state->Minimize(); | 504 window_state->Minimize(); |
512 RunAllPendingInMessageLoop(); | 505 RunAllPendingInMessageLoop(); |
513 EXPECT_FALSE(window->IsVisible()); | 506 EXPECT_FALSE(window->IsVisible()); |
514 EXPECT_TRUE(window_state->IsMinimized()); | 507 EXPECT_TRUE(window_state->IsMinimized()); |
515 // Restore the window; window should be visible. | 508 // Restore the window; window should be visible. |
516 window_state->Restore(); | 509 window_state->Restore(); |
517 RunAllPendingInMessageLoop(); | 510 RunAllPendingInMessageLoop(); |
518 EXPECT_TRUE(window->IsVisible()); | 511 EXPECT_TRUE(window->IsVisible()); |
519 EXPECT_TRUE(window_state->IsNormalStateType()); | 512 EXPECT_TRUE(window_state->IsNormalStateType()); |
520 } | 513 } |
521 | 514 |
522 // Maximize a docked window and check that it is maximized and no longer docked. | 515 // Maximize a docked window and check that it is maximized and no longer docked. |
523 TEST_P(DockedWindowResizerTest, AttachMaximize) { | 516 TEST_P(DockedWindowResizerTest, AttachMaximize) { |
524 if (!SupportsHostWindowResize()) | 517 if (!SupportsHostWindowResize()) |
525 return; | 518 return; |
526 | 519 |
527 scoped_ptr<aura::Window> window(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); | 520 scoped_ptr<aura::Window> window(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); |
528 DragRelativeToEdge(DOCKED_EDGE_RIGHT, window.get(), 0); | 521 DragRelativeToEdge(DOCKED_EDGE_RIGHT, window.get(), 0); |
529 | 522 |
530 // The window should be docked at the right edge. | 523 // The window should be docked at the right edge. |
531 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().right(), | 524 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().right(), |
532 window->GetBoundsInScreen().right()); | 525 window->GetBoundsInScreen().right()); |
533 EXPECT_EQ(internal::kShellWindowId_DockedContainer, window->parent()->id()); | 526 EXPECT_EQ(kShellWindowId_DockedContainer, window->parent()->id()); |
534 | 527 |
535 wm::WindowState* window_state = wm::GetWindowState(window.get()); | 528 wm::WindowState* window_state = wm::GetWindowState(window.get()); |
536 // Maximize the window, it should get undocked and maximized in a desktop. | 529 // Maximize the window, it should get undocked and maximized in a desktop. |
537 window_state->Maximize(); | 530 window_state->Maximize(); |
538 RunAllPendingInMessageLoop(); | 531 RunAllPendingInMessageLoop(); |
539 EXPECT_TRUE(window->IsVisible()); | 532 EXPECT_TRUE(window->IsVisible()); |
540 EXPECT_TRUE(window_state->IsMaximized()); | 533 EXPECT_TRUE(window_state->IsMaximized()); |
541 EXPECT_EQ(internal::kShellWindowId_DefaultContainer, window->parent()->id()); | 534 EXPECT_EQ(kShellWindowId_DefaultContainer, window->parent()->id()); |
542 } | 535 } |
543 | 536 |
544 // Dock two windows, undock one, check that the other one is still docked. | 537 // Dock two windows, undock one, check that the other one is still docked. |
545 TEST_P(DockedWindowResizerTest, AttachTwoWindows) { | 538 TEST_P(DockedWindowResizerTest, AttachTwoWindows) { |
546 if (!SupportsHostWindowResize()) | 539 if (!SupportsHostWindowResize()) |
547 return; | 540 return; |
548 UpdateDisplay("600x600"); | 541 UpdateDisplay("600x600"); |
549 | 542 |
550 scoped_ptr<aura::Window> w1(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); | 543 scoped_ptr<aura::Window> w1(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); |
551 scoped_ptr<aura::Window> w2(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); | 544 scoped_ptr<aura::Window> w2(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); |
552 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w1.get(), 20); | 545 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w1.get(), 20); |
553 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w2.get(), 50); | 546 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w2.get(), 50); |
554 | 547 |
555 // Docking second window should not minimize the first. | 548 // Docking second window should not minimize the first. |
556 wm::WindowState* window_state1 = wm::GetWindowState(w1.get()); | 549 wm::WindowState* window_state1 = wm::GetWindowState(w1.get()); |
557 EXPECT_FALSE(window_state1->IsMinimized()); | 550 EXPECT_FALSE(window_state1->IsMinimized()); |
558 | 551 |
559 // Both windows should be docked at the right edge. | 552 // Both windows should be docked at the right edge. |
560 EXPECT_EQ(w1->GetRootWindow()->GetBoundsInScreen().right(), | 553 EXPECT_EQ(w1->GetRootWindow()->GetBoundsInScreen().right(), |
561 w1->GetBoundsInScreen().right()); | 554 w1->GetBoundsInScreen().right()); |
562 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); | 555 EXPECT_EQ(kShellWindowId_DockedContainer, w1->parent()->id()); |
563 | 556 |
564 EXPECT_EQ(w2->GetRootWindow()->GetBoundsInScreen().right(), | 557 EXPECT_EQ(w2->GetRootWindow()->GetBoundsInScreen().right(), |
565 w2->GetBoundsInScreen().right()); | 558 w2->GetBoundsInScreen().right()); |
566 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w2->parent()->id()); | 559 EXPECT_EQ(kShellWindowId_DockedContainer, w2->parent()->id()); |
567 | 560 |
568 // Detach by dragging left (should get undocked). | 561 // Detach by dragging left (should get undocked). |
569 const int left_edge = w2->bounds().x(); | 562 const int left_edge = w2->bounds().x(); |
570 ASSERT_NO_FATAL_FAILURE(DragStart(w2.get())); | 563 ASSERT_NO_FATAL_FAILURE(DragStart(w2.get())); |
571 // Drag up as well to avoid attaching panels to launcher shelf. | 564 // Drag up as well to avoid attaching panels to launcher shelf. |
572 DragMove(-32, -100); | 565 DragMove(-32, -100); |
573 // Release the mouse and the window should be no longer attached to the edge. | 566 // Release the mouse and the window should be no longer attached to the edge. |
574 DragEnd(); | 567 DragEnd(); |
575 | 568 |
576 // The first window should be still docked. | 569 // The first window should be still docked. |
577 EXPECT_FALSE(window_state1->IsMinimized()); | 570 EXPECT_FALSE(window_state1->IsMinimized()); |
578 EXPECT_EQ(w1->GetRootWindow()->GetBoundsInScreen().right(), | 571 EXPECT_EQ(w1->GetRootWindow()->GetBoundsInScreen().right(), |
579 w1->GetBoundsInScreen().right()); | 572 w1->GetBoundsInScreen().right()); |
580 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); | 573 EXPECT_EQ(kShellWindowId_DockedContainer, w1->parent()->id()); |
581 | 574 |
582 // The window should be floating on the desktop again and moved to the left. | 575 // The window should be floating on the desktop again and moved to the left. |
583 EXPECT_EQ(left_edge - 32, w2->GetBoundsInScreen().x()); | 576 EXPECT_EQ(left_edge - 32, w2->GetBoundsInScreen().x()); |
584 EXPECT_EQ(internal::kShellWindowId_DefaultContainer, | 577 EXPECT_EQ(kShellWindowId_DefaultContainer, w2->parent()->id()); |
585 w2->parent()->id()); | |
586 } | 578 } |
587 | 579 |
588 // Create two windows, dock one and change shelf to auto-hide. | 580 // Create two windows, dock one and change shelf to auto-hide. |
589 TEST_P(DockedWindowResizerTest, AttachOneAutoHideShelf) { | 581 TEST_P(DockedWindowResizerTest, AttachOneAutoHideShelf) { |
590 if (!SupportsHostWindowResize()) | 582 if (!SupportsHostWindowResize()) |
591 return; | 583 return; |
592 | 584 |
593 scoped_ptr<aura::Window> w1(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); | 585 scoped_ptr<aura::Window> w1(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); |
594 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w1.get(), 20); | 586 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w1.get(), 20); |
595 | 587 |
596 // w1 should be docked at the right edge. | 588 // w1 should be docked at the right edge. |
597 EXPECT_EQ(w1->GetRootWindow()->GetBoundsInScreen().right(), | 589 EXPECT_EQ(w1->GetRootWindow()->GetBoundsInScreen().right(), |
598 w1->GetBoundsInScreen().right()); | 590 w1->GetBoundsInScreen().right()); |
599 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); | 591 EXPECT_EQ(kShellWindowId_DockedContainer, w1->parent()->id()); |
600 | 592 |
601 scoped_ptr<aura::Window> w2(CreateTestWindowInShellWithDelegateAndType( | 593 scoped_ptr<aura::Window> w2(CreateTestWindowInShellWithDelegateAndType( |
602 NULL, ui::wm::WINDOW_TYPE_NORMAL, 0, gfx::Rect(20, 20, 150, 20))); | 594 NULL, ui::wm::WINDOW_TYPE_NORMAL, 0, gfx::Rect(20, 20, 150, 20))); |
603 wm::GetWindowState(w2.get())->Maximize(); | 595 wm::GetWindowState(w2.get())->Maximize(); |
604 EXPECT_EQ(internal::kShellWindowId_DefaultContainer, w2->parent()->id()); | 596 EXPECT_EQ(kShellWindowId_DefaultContainer, w2->parent()->id()); |
605 EXPECT_TRUE(wm::GetWindowState(w2.get())->IsMaximized()); | 597 EXPECT_TRUE(wm::GetWindowState(w2.get())->IsMaximized()); |
606 | 598 |
607 gfx::Rect work_area = | 599 gfx::Rect work_area = |
608 Shell::GetScreen()->GetDisplayNearestWindow(w1.get()).work_area(); | 600 Shell::GetScreen()->GetDisplayNearestWindow(w1.get()).work_area(); |
609 DockedWindowLayoutManager* manager = | 601 DockedWindowLayoutManager* manager = |
610 static_cast<DockedWindowLayoutManager*>(w1->parent()->layout_manager()); | 602 static_cast<DockedWindowLayoutManager*>(w1->parent()->layout_manager()); |
611 | 603 |
612 // Docked window should be centered vertically in the work area. | 604 // Docked window should be centered vertically in the work area. |
613 EXPECT_EQ(work_area.CenterPoint().y(), w1->bounds().CenterPoint().y()); | 605 EXPECT_EQ(work_area.CenterPoint().y(), w1->bounds().CenterPoint().y()); |
614 // Docked background should extend to the bottom of work area. | 606 // Docked background should extend to the bottom of work area. |
(...skipping 19 matching lines...) Expand all Loading... |
634 | 626 |
635 scoped_ptr<aura::Window> w1(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); | 627 scoped_ptr<aura::Window> w1(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); |
636 scoped_ptr<aura::Window> w2(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); | 628 scoped_ptr<aura::Window> w2(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); |
637 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w1.get(), 20); | 629 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w1.get(), 20); |
638 gfx::Rect initial_bounds(w2->bounds()); | 630 gfx::Rect initial_bounds(w2->bounds()); |
639 DragToVerticalPositionAndToEdge(DOCKED_EDGE_LEFT, w2.get(), 50); | 631 DragToVerticalPositionAndToEdge(DOCKED_EDGE_LEFT, w2.get(), 50); |
640 | 632 |
641 // The first window should be docked at the right edge. | 633 // The first window should be docked at the right edge. |
642 EXPECT_EQ(w1->GetRootWindow()->GetBoundsInScreen().right(), | 634 EXPECT_EQ(w1->GetRootWindow()->GetBoundsInScreen().right(), |
643 w1->GetBoundsInScreen().right()); | 635 w1->GetBoundsInScreen().right()); |
644 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); | 636 EXPECT_EQ(kShellWindowId_DockedContainer, w1->parent()->id()); |
645 | 637 |
646 // The second window should be near the left edge but not snapped. | 638 // The second window should be near the left edge but not snapped. |
647 // Normal window will get side-maximized while panels will not. | 639 // Normal window will get side-maximized while panels will not. |
648 int expected_x = test_panels() ? | 640 int expected_x = test_panels() ? |
649 (initial_bounds.x() - initial_location_in_parent().x()) : 0; | 641 (initial_bounds.x() - initial_location_in_parent().x()) : 0; |
650 EXPECT_EQ(expected_x, w2->GetBoundsInScreen().x()); | 642 EXPECT_EQ(expected_x, w2->GetBoundsInScreen().x()); |
651 EXPECT_EQ(internal::kShellWindowId_DefaultContainer, w2->parent()->id()); | 643 EXPECT_EQ(kShellWindowId_DefaultContainer, w2->parent()->id()); |
652 } | 644 } |
653 | 645 |
654 // Tests that reverting a drag restores docked state if a window was docked. | 646 // Tests that reverting a drag restores docked state if a window was docked. |
655 TEST_P(DockedWindowResizerTest, RevertDragRestoresAttachment) { | 647 TEST_P(DockedWindowResizerTest, RevertDragRestoresAttachment) { |
656 if (!SupportsHostWindowResize()) | 648 if (!SupportsHostWindowResize()) |
657 return; | 649 return; |
658 | 650 |
659 scoped_ptr<aura::Window> window(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); | 651 scoped_ptr<aura::Window> window(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); |
660 DragRelativeToEdge(DOCKED_EDGE_RIGHT, window.get(), 0); | 652 DragRelativeToEdge(DOCKED_EDGE_RIGHT, window.get(), 0); |
661 | 653 |
662 // The window should be docked at the right edge. | 654 // The window should be docked at the right edge. |
663 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().right(), | 655 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().right(), |
664 window->GetBoundsInScreen().right()); | 656 window->GetBoundsInScreen().right()); |
665 EXPECT_EQ(internal::kShellWindowId_DockedContainer, window->parent()->id()); | 657 EXPECT_EQ(kShellWindowId_DockedContainer, window->parent()->id()); |
666 | 658 |
667 // Drag the window out but revert the drag | 659 // Drag the window out but revert the drag |
668 ASSERT_NO_FATAL_FAILURE(DragStart(window.get())); | 660 ASSERT_NO_FATAL_FAILURE(DragStart(window.get())); |
669 DragMove(-50, 0); | 661 DragMove(-50, 0); |
670 DragRevert(); | 662 DragRevert(); |
671 EXPECT_EQ(internal::kShellWindowId_DockedContainer, window->parent()->id()); | 663 EXPECT_EQ(kShellWindowId_DockedContainer, window->parent()->id()); |
672 | 664 |
673 // Detach window. | 665 // Detach window. |
674 ASSERT_NO_FATAL_FAILURE(DragStart(window.get())); | 666 ASSERT_NO_FATAL_FAILURE(DragStart(window.get())); |
675 DragMove(-50, 0); | 667 DragMove(-50, 0); |
676 DragEnd(); | 668 DragEnd(); |
677 EXPECT_EQ(internal::kShellWindowId_DefaultContainer, | 669 EXPECT_EQ(kShellWindowId_DefaultContainer, window->parent()->id()); |
678 window->parent()->id()); | |
679 } | 670 } |
680 | 671 |
681 // Tests that reverting drag restores undocked state if a window was not docked. | 672 // Tests that reverting drag restores undocked state if a window was not docked. |
682 TEST_P(DockedWindowResizerTest, RevertDockedDragRevertsAttachment) { | 673 TEST_P(DockedWindowResizerTest, RevertDockedDragRevertsAttachment) { |
683 if (!SupportsHostWindowResize()) | 674 if (!SupportsHostWindowResize()) |
684 return; | 675 return; |
685 scoped_ptr<aura::Window> window(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); | 676 scoped_ptr<aura::Window> window(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); |
686 aura::Window* dock_container = Shell::GetContainer( | 677 aura::Window* dock_container = Shell::GetContainer( |
687 window->GetRootWindow(), | 678 window->GetRootWindow(), |
688 kShellWindowId_DockedContainer); | 679 kShellWindowId_DockedContainer); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
732 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); | 723 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
733 EXPECT_EQ(2, static_cast<int>(root_windows.size())); | 724 EXPECT_EQ(2, static_cast<int>(root_windows.size())); |
734 scoped_ptr<aura::Window> window(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); | 725 scoped_ptr<aura::Window> window(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); |
735 gfx::Rect initial_bounds = window->GetBoundsInScreen(); | 726 gfx::Rect initial_bounds = window->GetBoundsInScreen(); |
736 EXPECT_EQ(root_windows[0], window->GetRootWindow()); | 727 EXPECT_EQ(root_windows[0], window->GetRootWindow()); |
737 | 728 |
738 DragRelativeToEdge(DOCKED_EDGE_RIGHT, window.get(), 0); | 729 DragRelativeToEdge(DOCKED_EDGE_RIGHT, window.get(), 0); |
739 // The window should be docked at the right edge. | 730 // The window should be docked at the right edge. |
740 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().right(), | 731 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().right(), |
741 window->GetBoundsInScreen().right()); | 732 window->GetBoundsInScreen().right()); |
742 EXPECT_EQ(internal::kShellWindowId_DockedContainer, window->parent()->id()); | 733 EXPECT_EQ(kShellWindowId_DockedContainer, window->parent()->id()); |
743 | 734 |
744 // Try dragging to the right - enough to get it peeking at the other screen | 735 // Try dragging to the right - enough to get it peeking at the other screen |
745 // but not enough to land in the other screen. | 736 // but not enough to land in the other screen. |
746 // The window should stay on the left screen. | 737 // The window should stay on the left screen. |
747 ASSERT_NO_FATAL_FAILURE(DragStart(window.get())); | 738 ASSERT_NO_FATAL_FAILURE(DragStart(window.get())); |
748 DragMove(100, 0); | 739 DragMove(100, 0); |
749 EXPECT_EQ(CorrectContainerIdDuringDrag(), window->parent()->id()); | 740 EXPECT_EQ(CorrectContainerIdDuringDrag(), window->parent()->id()); |
750 DragEnd(); | 741 DragEnd(); |
751 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().right(), | 742 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().right(), |
752 window->GetBoundsInScreen().right()); | 743 window->GetBoundsInScreen().right()); |
753 EXPECT_EQ(internal::kShellWindowId_DockedContainer, | 744 EXPECT_EQ(kShellWindowId_DockedContainer, window->parent()->id()); |
754 window->parent()->id()); | |
755 EXPECT_EQ(root_windows[0], window->GetRootWindow()); | 745 EXPECT_EQ(root_windows[0], window->GetRootWindow()); |
756 | 746 |
757 // Undock and move to the right - enough to get the mouse pointer past the | 747 // Undock and move to the right - enough to get the mouse pointer past the |
758 // edge of the screen and into the second screen. The window should now be | 748 // edge of the screen and into the second screen. The window should now be |
759 // in the second screen and not docked. | 749 // in the second screen and not docked. |
760 ASSERT_NO_FATAL_FAILURE(DragStartAtOffsetFromWindowOrigin( | 750 ASSERT_NO_FATAL_FAILURE(DragStartAtOffsetFromWindowOrigin( |
761 window.get(), | 751 window.get(), |
762 window->bounds().width()/2 + 10, | 752 window->bounds().width()/2 + 10, |
763 0)); | 753 0)); |
764 DragMove(window->bounds().width()/2 - 5, 0); | 754 DragMove(window->bounds().width()/2 - 5, 0); |
765 EXPECT_EQ(CorrectContainerIdDuringDrag(), window->parent()->id()); | 755 EXPECT_EQ(CorrectContainerIdDuringDrag(), window->parent()->id()); |
766 DragEnd(); | 756 DragEnd(); |
767 EXPECT_NE(window->GetRootWindow()->GetBoundsInScreen().right(), | 757 EXPECT_NE(window->GetRootWindow()->GetBoundsInScreen().right(), |
768 window->GetBoundsInScreen().right()); | 758 window->GetBoundsInScreen().right()); |
769 EXPECT_EQ(internal::kShellWindowId_DefaultContainer, | 759 EXPECT_EQ(kShellWindowId_DefaultContainer, window->parent()->id()); |
770 window->parent()->id()); | |
771 EXPECT_EQ(root_windows[1], window->GetRootWindow()); | 760 EXPECT_EQ(root_windows[1], window->GetRootWindow()); |
772 | 761 |
773 // Keep dragging it to the right until its left edge touches the screen edge. | 762 // Keep dragging it to the right until its left edge touches the screen edge. |
774 // The window should now be in the second screen and not docked. | 763 // The window should now be in the second screen and not docked. |
775 ASSERT_NO_FATAL_FAILURE(DragStartAtOffsetFromWindowOrigin( | 764 ASSERT_NO_FATAL_FAILURE(DragStartAtOffsetFromWindowOrigin( |
776 window.get(), | 765 window.get(), |
777 window->bounds().width()/2 + 10, | 766 window->bounds().width()/2 + 10, |
778 0)); | 767 0)); |
779 DragMove(window->GetRootWindow()->GetBoundsInScreen().x() - | 768 DragMove(window->GetRootWindow()->GetBoundsInScreen().x() - |
780 window->GetBoundsInScreen().x(), | 769 window->GetBoundsInScreen().x(), |
781 0); | 770 0); |
782 EXPECT_EQ(CorrectContainerIdDuringDrag(), window->parent()->id()); | 771 EXPECT_EQ(CorrectContainerIdDuringDrag(), window->parent()->id()); |
783 DragEnd(); | 772 DragEnd(); |
784 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().x(), | 773 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().x(), |
785 window->GetBoundsInScreen().x()); | 774 window->GetBoundsInScreen().x()); |
786 EXPECT_EQ(internal::kShellWindowId_DefaultContainer, window->parent()->id()); | 775 EXPECT_EQ(kShellWindowId_DefaultContainer, window->parent()->id()); |
787 EXPECT_EQ(root_windows[1], window->GetRootWindow()); | 776 EXPECT_EQ(root_windows[1], window->GetRootWindow()); |
788 } | 777 } |
789 | 778 |
790 // Dock two windows, undock one. | 779 // Dock two windows, undock one. |
791 // Test the docked windows area size and default container resizing. | 780 // Test the docked windows area size and default container resizing. |
792 TEST_P(DockedWindowResizerTest, AttachTwoWindowsDetachOne) { | 781 TEST_P(DockedWindowResizerTest, AttachTwoWindowsDetachOne) { |
793 if (!SupportsHostWindowResize()) | 782 if (!SupportsHostWindowResize()) |
794 return; | 783 return; |
795 UpdateDisplay("600x600"); | 784 UpdateDisplay("600x600"); |
796 | 785 |
797 scoped_ptr<aura::Window> w1(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); | 786 scoped_ptr<aura::Window> w1(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); |
798 scoped_ptr<aura::Window> w2(CreateTestWindow(gfx::Rect(0, 0, 210, 201))); | 787 scoped_ptr<aura::Window> w2(CreateTestWindow(gfx::Rect(0, 0, 210, 201))); |
799 // Work area should cover the whole screen. | 788 // Work area should cover the whole screen. |
800 EXPECT_EQ(ScreenUtil::GetDisplayBoundsInParent(w2.get()).width(), | 789 EXPECT_EQ(ScreenUtil::GetDisplayBoundsInParent(w2.get()).width(), |
801 ScreenUtil::GetDisplayWorkAreaBoundsInParent(w2.get()).width()); | 790 ScreenUtil::GetDisplayWorkAreaBoundsInParent(w2.get()).width()); |
802 | 791 |
803 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w1.get(), 20); | 792 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w1.get(), 20); |
804 // A window should be docked at the right edge. | 793 // A window should be docked at the right edge. |
805 EXPECT_EQ(w1->GetRootWindow()->GetBoundsInScreen().right(), | 794 EXPECT_EQ(w1->GetRootWindow()->GetBoundsInScreen().right(), |
806 w1->GetBoundsInScreen().right()); | 795 w1->GetBoundsInScreen().right()); |
807 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); | 796 EXPECT_EQ(kShellWindowId_DockedContainer, w1->parent()->id()); |
808 DockedWindowLayoutManager* manager = | 797 DockedWindowLayoutManager* manager = |
809 static_cast<DockedWindowLayoutManager*>(w1->parent()->layout_manager()); | 798 static_cast<DockedWindowLayoutManager*>(w1->parent()->layout_manager()); |
810 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); | 799 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); |
811 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); | 800 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); |
812 | 801 |
813 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w2.get(), 100); | 802 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w2.get(), 100); |
814 // Both windows should now be docked at the right edge. | 803 // Both windows should now be docked at the right edge. |
815 EXPECT_EQ(w2->GetRootWindow()->GetBoundsInScreen().right(), | 804 EXPECT_EQ(w2->GetRootWindow()->GetBoundsInScreen().right(), |
816 w2->GetBoundsInScreen().right()); | 805 w2->GetBoundsInScreen().right()); |
817 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w2->parent()->id()); | 806 EXPECT_EQ(kShellWindowId_DockedContainer, w2->parent()->id()); |
818 // Dock width should be set to a wider window. | 807 // Dock width should be set to a wider window. |
819 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); | 808 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); |
820 EXPECT_EQ(std::max(w1->bounds().width(), w2->bounds().width()), | 809 EXPECT_EQ(std::max(w1->bounds().width(), w2->bounds().width()), |
821 docked_width(manager)); | 810 docked_width(manager)); |
822 | 811 |
823 // Try to detach by dragging left a bit (should not get undocked). | 812 // Try to detach by dragging left a bit (should not get undocked). |
824 // This would normally detach a single docked window but since we have another | 813 // This would normally detach a single docked window but since we have another |
825 // window and the mouse pointer does not leave the dock area the window | 814 // window and the mouse pointer does not leave the dock area the window |
826 // should stay docked. | 815 // should stay docked. |
827 ASSERT_NO_FATAL_FAILURE(DragStartAtOffsetFromWindowOrigin(w2.get(), 60, 0)); | 816 ASSERT_NO_FATAL_FAILURE(DragStartAtOffsetFromWindowOrigin(w2.get(), 60, 0)); |
828 // Drag up as well as left to avoid attaching panels to launcher shelf. | 817 // Drag up as well as left to avoid attaching panels to launcher shelf. |
829 DragMove(-40, -40); | 818 DragMove(-40, -40); |
830 // Release the mouse and the window should be still attached to the edge. | 819 // Release the mouse and the window should be still attached to the edge. |
831 DragEnd(); | 820 DragEnd(); |
832 | 821 |
833 // The first window should be still docked. | 822 // The first window should be still docked. |
834 EXPECT_EQ(w1->GetRootWindow()->GetBoundsInScreen().right(), | 823 EXPECT_EQ(w1->GetRootWindow()->GetBoundsInScreen().right(), |
835 w1->GetBoundsInScreen().right()); | 824 w1->GetBoundsInScreen().right()); |
836 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); | 825 EXPECT_EQ(kShellWindowId_DockedContainer, w1->parent()->id()); |
837 | 826 |
838 // The second window should be still docked. | 827 // The second window should be still docked. |
839 EXPECT_EQ(w2->GetRootWindow()->GetBoundsInScreen().right(), | 828 EXPECT_EQ(w2->GetRootWindow()->GetBoundsInScreen().right(), |
840 w2->GetBoundsInScreen().right()); | 829 w2->GetBoundsInScreen().right()); |
841 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w2->parent()->id()); | 830 EXPECT_EQ(kShellWindowId_DockedContainer, w2->parent()->id()); |
842 | 831 |
843 // Detach by dragging left more (should get undocked). | 832 // Detach by dragging left more (should get undocked). |
844 const int left_edge = w2->bounds().x(); | 833 const int left_edge = w2->bounds().x(); |
845 ASSERT_NO_FATAL_FAILURE(DragStartAtOffsetFromWindowOrigin( | 834 ASSERT_NO_FATAL_FAILURE(DragStartAtOffsetFromWindowOrigin( |
846 w2.get(), | 835 w2.get(), |
847 w2->bounds().width()/2 + 10, | 836 w2->bounds().width()/2 + 10, |
848 0)); | 837 0)); |
849 // Drag up as well to avoid attaching panels to launcher shelf. | 838 // Drag up as well to avoid attaching panels to launcher shelf. |
850 const int drag_x = -(w2->bounds().width()/2 + 20); | 839 const int drag_x = -(w2->bounds().width()/2 + 20); |
851 DragMove(drag_x, -100); | 840 DragMove(drag_x, -100); |
852 // Release the mouse and the window should be no longer attached to the edge. | 841 // Release the mouse and the window should be no longer attached to the edge. |
853 DragEnd(); | 842 DragEnd(); |
854 | 843 |
855 // The second window should be floating on the desktop again. | 844 // The second window should be floating on the desktop again. |
856 EXPECT_EQ(left_edge + drag_x, w2->bounds().x()); | 845 EXPECT_EQ(left_edge + drag_x, w2->bounds().x()); |
857 EXPECT_EQ(internal::kShellWindowId_DefaultContainer, w2->parent()->id()); | 846 EXPECT_EQ(kShellWindowId_DefaultContainer, w2->parent()->id()); |
858 // Dock width should be set to remaining single docked window. | 847 // Dock width should be set to remaining single docked window. |
859 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); | 848 EXPECT_EQ(kShellWindowId_DockedContainer, w1->parent()->id()); |
860 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); | 849 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); |
861 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); | 850 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); |
862 } | 851 } |
863 | 852 |
864 // Dock one of the windows. Maximize other testing desktop resizing. | 853 // Dock one of the windows. Maximize other testing desktop resizing. |
865 TEST_P(DockedWindowResizerTest, AttachWindowMaximizeOther) { | 854 TEST_P(DockedWindowResizerTest, AttachWindowMaximizeOther) { |
866 if (!SupportsHostWindowResize()) | 855 if (!SupportsHostWindowResize()) |
867 return; | 856 return; |
868 | 857 |
869 scoped_ptr<aura::Window> w1(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); | 858 scoped_ptr<aura::Window> w1(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); |
870 scoped_ptr<aura::Window> w2(CreateTestWindow(gfx::Rect(0, 0, 210, 201))); | 859 scoped_ptr<aura::Window> w2(CreateTestWindow(gfx::Rect(0, 0, 210, 201))); |
871 // Work area should cover the whole screen. | 860 // Work area should cover the whole screen. |
872 EXPECT_EQ(ScreenUtil::GetDisplayBoundsInParent(w2.get()).width(), | 861 EXPECT_EQ(ScreenUtil::GetDisplayBoundsInParent(w2.get()).width(), |
873 ScreenUtil::GetDisplayWorkAreaBoundsInParent(w2.get()).width()); | 862 ScreenUtil::GetDisplayWorkAreaBoundsInParent(w2.get()).width()); |
874 | 863 |
875 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w1.get(), 20); | 864 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w1.get(), 20); |
876 // A window should be docked at the right edge. | 865 // A window should be docked at the right edge. |
877 EXPECT_EQ(w1->GetRootWindow()->GetBoundsInScreen().right(), | 866 EXPECT_EQ(w1->GetRootWindow()->GetBoundsInScreen().right(), |
878 w1->GetBoundsInScreen().right()); | 867 w1->GetBoundsInScreen().right()); |
879 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); | 868 EXPECT_EQ(kShellWindowId_DockedContainer, w1->parent()->id()); |
880 DockedWindowLayoutManager* manager = | 869 DockedWindowLayoutManager* manager = |
881 static_cast<DockedWindowLayoutManager*>(w1->parent()->layout_manager()); | 870 static_cast<DockedWindowLayoutManager*>(w1->parent()->layout_manager()); |
882 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); | 871 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); |
883 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); | 872 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); |
884 | 873 |
885 ASSERT_NO_FATAL_FAILURE(DragStartAtOffsetFromWindowOrigin(w2.get(), 25, 5)); | 874 ASSERT_NO_FATAL_FAILURE(DragStartAtOffsetFromWindowOrigin(w2.get(), 25, 5)); |
886 DragMove(w2->GetRootWindow()->bounds().width() | 875 DragMove(w2->GetRootWindow()->bounds().width() |
887 -w2->bounds().width() | 876 -w2->bounds().width() |
888 -(w2->bounds().width()/2 + 20) | 877 -(w2->bounds().width()/2 + 20) |
889 -w2->bounds().x(), | 878 -w2->bounds().x(), |
890 50 - w2->bounds().y()); | 879 50 - w2->bounds().y()); |
891 DragEnd(); | 880 DragEnd(); |
892 // The first window should be still docked. | 881 // The first window should be still docked. |
893 EXPECT_EQ(w1->GetRootWindow()->GetBoundsInScreen().right(), | 882 EXPECT_EQ(w1->GetRootWindow()->GetBoundsInScreen().right(), |
894 w1->GetBoundsInScreen().right()); | 883 w1->GetBoundsInScreen().right()); |
895 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); | 884 EXPECT_EQ(kShellWindowId_DockedContainer, w1->parent()->id()); |
896 | 885 |
897 // The second window should be floating on the desktop. | 886 // The second window should be floating on the desktop. |
898 EXPECT_EQ(w2->GetRootWindow()->GetBoundsInScreen().right() - | 887 EXPECT_EQ(w2->GetRootWindow()->GetBoundsInScreen().right() - |
899 (w2->bounds().width()/2 + 20), | 888 (w2->bounds().width()/2 + 20), |
900 w2->GetBoundsInScreen().right()); | 889 w2->GetBoundsInScreen().right()); |
901 EXPECT_EQ(internal::kShellWindowId_DefaultContainer, w2->parent()->id()); | 890 EXPECT_EQ(kShellWindowId_DefaultContainer, w2->parent()->id()); |
902 // Dock width should be set to remaining single docked window. | 891 // Dock width should be set to remaining single docked window. |
903 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); | 892 EXPECT_EQ(kShellWindowId_DockedContainer, w1->parent()->id()); |
904 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); | 893 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); |
905 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); | 894 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); |
906 // Desktop work area should now shrink. | 895 // Desktop work area should now shrink. |
907 EXPECT_EQ(ScreenUtil::GetDisplayBoundsInParent(w2.get()).width() - | 896 EXPECT_EQ(ScreenUtil::GetDisplayBoundsInParent(w2.get()).width() - |
908 docked_width(manager) - min_dock_gap(), | 897 docked_width(manager) - min_dock_gap(), |
909 ScreenUtil::GetDisplayWorkAreaBoundsInParent(w2.get()).width()); | 898 ScreenUtil::GetDisplayWorkAreaBoundsInParent(w2.get()).width()); |
910 | 899 |
911 // Maximize the second window - Maximized area should be shrunk. | 900 // Maximize the second window - Maximized area should be shrunk. |
912 const gfx::Rect restored_bounds = w2->bounds(); | 901 const gfx::Rect restored_bounds = w2->bounds(); |
913 wm::WindowState* w2_state = wm::GetWindowState(w2.get()); | 902 wm::WindowState* w2_state = wm::GetWindowState(w2.get()); |
914 w2_state->Maximize(); | 903 w2_state->Maximize(); |
915 EXPECT_EQ(ScreenUtil::GetDisplayBoundsInParent(w2.get()).width() - | 904 EXPECT_EQ(ScreenUtil::GetDisplayBoundsInParent(w2.get()).width() - |
916 docked_width(manager) - min_dock_gap(), | 905 docked_width(manager) - min_dock_gap(), |
917 w2->bounds().width()); | 906 w2->bounds().width()); |
918 | 907 |
919 // Detach the first window (this should require very little drag). | 908 // Detach the first window (this should require very little drag). |
920 ASSERT_NO_FATAL_FAILURE(DragStart(w1.get())); | 909 ASSERT_NO_FATAL_FAILURE(DragStart(w1.get())); |
921 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); | 910 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); |
922 DragMove(-35, 10); | 911 DragMove(-35, 10); |
923 // Alignment is set to "NONE" when drag starts. | 912 // Alignment is set to "NONE" when drag starts. |
924 EXPECT_EQ(DOCKED_ALIGNMENT_NONE, docked_alignment(manager)); | 913 EXPECT_EQ(DOCKED_ALIGNMENT_NONE, docked_alignment(manager)); |
925 // Release the mouse and the window should be no longer attached to the edge. | 914 // Release the mouse and the window should be no longer attached to the edge. |
926 DragEnd(); | 915 DragEnd(); |
927 EXPECT_EQ(DOCKED_ALIGNMENT_NONE, docked_alignment(manager)); | 916 EXPECT_EQ(DOCKED_ALIGNMENT_NONE, docked_alignment(manager)); |
928 // Dock should get shrunk and desktop should get expanded. | 917 // Dock should get shrunk and desktop should get expanded. |
929 EXPECT_EQ(internal::kShellWindowId_DefaultContainer, w1->parent()->id()); | 918 EXPECT_EQ(kShellWindowId_DefaultContainer, w1->parent()->id()); |
930 EXPECT_EQ(internal::kShellWindowId_DefaultContainer, w2->parent()->id()); | 919 EXPECT_EQ(kShellWindowId_DefaultContainer, w2->parent()->id()); |
931 EXPECT_EQ(DOCKED_ALIGNMENT_NONE, docked_alignment(manager)); | 920 EXPECT_EQ(DOCKED_ALIGNMENT_NONE, docked_alignment(manager)); |
932 EXPECT_EQ(0, docked_width(manager)); | 921 EXPECT_EQ(0, docked_width(manager)); |
933 // The second window should now get resized and take up the whole screen. | 922 // The second window should now get resized and take up the whole screen. |
934 EXPECT_EQ(ScreenUtil::GetDisplayBoundsInParent(w2.get()).width(), | 923 EXPECT_EQ(ScreenUtil::GetDisplayBoundsInParent(w2.get()).width(), |
935 w2->bounds().width()); | 924 w2->bounds().width()); |
936 | 925 |
937 // Dock the first window to the left edge. | 926 // Dock the first window to the left edge. |
938 // Click at an offset from origin to prevent snapping. | 927 // Click at an offset from origin to prevent snapping. |
939 ASSERT_NO_FATAL_FAILURE(DragStartAtOffsetFromWindowOrigin(w1.get(), 10, 0)); | 928 ASSERT_NO_FATAL_FAILURE(DragStartAtOffsetFromWindowOrigin(w1.get(), 10, 0)); |
940 // Drag left to get pointer touching the screen edge. | 929 // Drag left to get pointer touching the screen edge. |
941 DragMove(-w1->bounds().x() - 10, 0); | 930 DragMove(-w1->bounds().x() - 10, 0); |
942 // Alignment set to "NONE" during the drag of the window when none are docked. | 931 // Alignment set to "NONE" during the drag of the window when none are docked. |
943 EXPECT_EQ(DOCKED_ALIGNMENT_NONE, docked_alignment(manager)); | 932 EXPECT_EQ(DOCKED_ALIGNMENT_NONE, docked_alignment(manager)); |
944 // Release the mouse and the window should be now attached to the edge. | 933 // Release the mouse and the window should be now attached to the edge. |
945 DragEnd(); | 934 DragEnd(); |
946 // Dock should get expanded and desktop should get shrunk. | 935 // Dock should get expanded and desktop should get shrunk. |
947 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); | 936 EXPECT_EQ(kShellWindowId_DockedContainer, w1->parent()->id()); |
948 EXPECT_EQ(DOCKED_ALIGNMENT_LEFT, docked_alignment(manager)); | 937 EXPECT_EQ(DOCKED_ALIGNMENT_LEFT, docked_alignment(manager)); |
949 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); | 938 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); |
950 // Second window should still be in the desktop. | 939 // Second window should still be in the desktop. |
951 EXPECT_EQ(internal::kShellWindowId_DefaultContainer, w2->parent()->id()); | 940 EXPECT_EQ(kShellWindowId_DefaultContainer, w2->parent()->id()); |
952 // Maximized window should be shrunk. | 941 // Maximized window should be shrunk. |
953 EXPECT_EQ(ScreenUtil::GetDisplayBoundsInParent(w2.get()).width() - | 942 EXPECT_EQ(ScreenUtil::GetDisplayBoundsInParent(w2.get()).width() - |
954 docked_width(manager) - min_dock_gap(), | 943 docked_width(manager) - min_dock_gap(), |
955 w2->bounds().width()); | 944 w2->bounds().width()); |
956 | 945 |
957 // Unmaximize the second window. | 946 // Unmaximize the second window. |
958 w2_state->Restore(); | 947 w2_state->Restore(); |
959 // Its bounds should get restored. | 948 // Its bounds should get restored. |
960 EXPECT_EQ(restored_bounds, w2->bounds()); | 949 EXPECT_EQ(restored_bounds, w2->bounds()); |
961 } | 950 } |
962 | 951 |
963 // Dock one window. Test the sticky behavior near screen or desktop edge. | 952 // Dock one window. Test the sticky behavior near screen or desktop edge. |
964 TEST_P(DockedWindowResizerTest, AttachOneTestSticky) { | 953 TEST_P(DockedWindowResizerTest, AttachOneTestSticky) { |
965 if (!SupportsHostWindowResize()) | 954 if (!SupportsHostWindowResize()) |
966 return; | 955 return; |
967 | 956 |
968 scoped_ptr<aura::Window> w1(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); | 957 scoped_ptr<aura::Window> w1(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); |
969 scoped_ptr<aura::Window> w2(CreateTestWindow(gfx::Rect(0, 0, 210, 201))); | 958 scoped_ptr<aura::Window> w2(CreateTestWindow(gfx::Rect(0, 0, 210, 201))); |
970 // Work area should cover the whole screen. | 959 // Work area should cover the whole screen. |
971 EXPECT_EQ(ScreenUtil::GetDisplayBoundsInParent(w2.get()).width(), | 960 EXPECT_EQ(ScreenUtil::GetDisplayBoundsInParent(w2.get()).width(), |
972 ScreenUtil::GetDisplayWorkAreaBoundsInParent(w2.get()).width()); | 961 ScreenUtil::GetDisplayWorkAreaBoundsInParent(w2.get()).width()); |
973 | 962 |
974 DragToVerticalPositionAndToEdge(DOCKED_EDGE_LEFT, w1.get(), 20); | 963 DragToVerticalPositionAndToEdge(DOCKED_EDGE_LEFT, w1.get(), 20); |
975 // A window should be docked at the left edge. | 964 // A window should be docked at the left edge. |
976 EXPECT_EQ(w1->GetRootWindow()->GetBoundsInScreen().x(), | 965 EXPECT_EQ(w1->GetRootWindow()->GetBoundsInScreen().x(), |
977 w1->GetBoundsInScreen().x()); | 966 w1->GetBoundsInScreen().x()); |
978 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); | 967 EXPECT_EQ(kShellWindowId_DockedContainer, w1->parent()->id()); |
979 DockedWindowLayoutManager* manager = | 968 DockedWindowLayoutManager* manager = |
980 static_cast<DockedWindowLayoutManager*>(w1->parent()->layout_manager()); | 969 static_cast<DockedWindowLayoutManager*>(w1->parent()->layout_manager()); |
981 // The first window should be docked. | 970 // The first window should be docked. |
982 EXPECT_EQ(w1->GetRootWindow()->GetBoundsInScreen().x(), | 971 EXPECT_EQ(w1->GetRootWindow()->GetBoundsInScreen().x(), |
983 w1->GetBoundsInScreen().x()); | 972 w1->GetBoundsInScreen().x()); |
984 // Dock width should be set to that of a single docked window. | 973 // Dock width should be set to that of a single docked window. |
985 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); | 974 EXPECT_EQ(kShellWindowId_DockedContainer, w1->parent()->id()); |
986 EXPECT_EQ(DOCKED_ALIGNMENT_LEFT, docked_alignment(manager)); | 975 EXPECT_EQ(DOCKED_ALIGNMENT_LEFT, docked_alignment(manager)); |
987 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); | 976 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); |
988 | 977 |
989 // Position second window in the desktop 20px to the right of the docked w1. | 978 // Position second window in the desktop 20px to the right of the docked w1. |
990 DragToVerticalPositionRelativeToEdge(DOCKED_EDGE_LEFT, | 979 DragToVerticalPositionRelativeToEdge(DOCKED_EDGE_LEFT, |
991 w2.get(), | 980 w2.get(), |
992 20 + 25 - | 981 20 + 25 - |
993 min_dock_gap(), | 982 min_dock_gap(), |
994 50); | 983 50); |
995 // The second window should be floating on the desktop. | 984 // The second window should be floating on the desktop. |
996 EXPECT_EQ(w2->GetRootWindow()->GetBoundsInScreen().x() + | 985 EXPECT_EQ(w2->GetRootWindow()->GetBoundsInScreen().x() + |
997 (w1->bounds().right() + 20), | 986 (w1->bounds().right() + 20), |
998 w2->GetBoundsInScreen().x()); | 987 w2->GetBoundsInScreen().x()); |
999 EXPECT_EQ(internal::kShellWindowId_DefaultContainer, w2->parent()->id()); | 988 EXPECT_EQ(kShellWindowId_DefaultContainer, w2->parent()->id()); |
1000 // Dock width should be set to that of a single docked window. | 989 // Dock width should be set to that of a single docked window. |
1001 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); | 990 EXPECT_EQ(kShellWindowId_DockedContainer, w1->parent()->id()); |
1002 EXPECT_EQ(DOCKED_ALIGNMENT_LEFT, docked_alignment(manager)); | 991 EXPECT_EQ(DOCKED_ALIGNMENT_LEFT, docked_alignment(manager)); |
1003 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); | 992 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); |
1004 | 993 |
1005 // Drag w2 almost to the dock, the mouse pointer not quite reaching the dock. | 994 // Drag w2 almost to the dock, the mouse pointer not quite reaching the dock. |
1006 ASSERT_NO_FATAL_FAILURE(DragStartAtOffsetFromWindowOrigin(w2.get(), 10, 0)); | 995 ASSERT_NO_FATAL_FAILURE(DragStartAtOffsetFromWindowOrigin(w2.get(), 10, 0)); |
1007 DragMove(1 + docked_width(manager) - w2->bounds().x(), 0); | 996 DragMove(1 + docked_width(manager) - w2->bounds().x(), 0); |
1008 // Alignment set to "LEFT" during the drag because dock has a window in it. | 997 // Alignment set to "LEFT" during the drag because dock has a window in it. |
1009 EXPECT_EQ(DOCKED_ALIGNMENT_LEFT, docked_alignment(manager)); | 998 EXPECT_EQ(DOCKED_ALIGNMENT_LEFT, docked_alignment(manager)); |
1010 // Release the mouse and the window should not be attached to the edge. | 999 // Release the mouse and the window should not be attached to the edge. |
1011 DragEnd(); | 1000 DragEnd(); |
1012 // Dock should still have only one window in it. | 1001 // Dock should still have only one window in it. |
1013 EXPECT_EQ(DOCKED_ALIGNMENT_LEFT, docked_alignment(manager)); | 1002 EXPECT_EQ(DOCKED_ALIGNMENT_LEFT, docked_alignment(manager)); |
1014 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); | 1003 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); |
1015 // The second window should still be in the desktop. | 1004 // The second window should still be in the desktop. |
1016 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); | 1005 EXPECT_EQ(kShellWindowId_DockedContainer, w1->parent()->id()); |
1017 EXPECT_EQ(internal::kShellWindowId_DefaultContainer, w2->parent()->id()); | 1006 EXPECT_EQ(kShellWindowId_DefaultContainer, w2->parent()->id()); |
1018 | 1007 |
1019 // Drag w2 by a bit more - it should resist the drag (stuck edges) | 1008 // Drag w2 by a bit more - it should resist the drag (stuck edges) |
1020 int start_x = w2->bounds().x(); | 1009 int start_x = w2->bounds().x(); |
1021 ASSERT_NO_FATAL_FAILURE(DragStartAtOffsetFromWindowOrigin(w2.get(), 100, 5)); | 1010 ASSERT_NO_FATAL_FAILURE(DragStartAtOffsetFromWindowOrigin(w2.get(), 100, 5)); |
1022 DragMove(-2, 0); | 1011 DragMove(-2, 0); |
1023 // Window should not actually move. | 1012 // Window should not actually move. |
1024 EXPECT_EQ(start_x, w2->bounds().x()); | 1013 EXPECT_EQ(start_x, w2->bounds().x()); |
1025 // Alignment set to "LEFT" during the drag because dock has a window in it. | 1014 // Alignment set to "LEFT" during the drag because dock has a window in it. |
1026 EXPECT_EQ(DOCKED_ALIGNMENT_LEFT, docked_alignment(manager)); | 1015 EXPECT_EQ(DOCKED_ALIGNMENT_LEFT, docked_alignment(manager)); |
1027 // Release the mouse and the window should not be attached to the edge. | 1016 // Release the mouse and the window should not be attached to the edge. |
1028 DragEnd(); | 1017 DragEnd(); |
1029 // Window should be still where it was before the last drag started. | 1018 // Window should be still where it was before the last drag started. |
1030 EXPECT_EQ(start_x, w2->bounds().x()); | 1019 EXPECT_EQ(start_x, w2->bounds().x()); |
1031 // Dock should still have only one window in it | 1020 // Dock should still have only one window in it |
1032 EXPECT_EQ(DOCKED_ALIGNMENT_LEFT, docked_alignment(manager)); | 1021 EXPECT_EQ(DOCKED_ALIGNMENT_LEFT, docked_alignment(manager)); |
1033 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); | 1022 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); |
1034 // The second window should still be in the desktop | 1023 // The second window should still be in the desktop |
1035 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); | 1024 EXPECT_EQ(kShellWindowId_DockedContainer, w1->parent()->id()); |
1036 EXPECT_EQ(internal::kShellWindowId_DefaultContainer, w2->parent()->id()); | 1025 EXPECT_EQ(kShellWindowId_DefaultContainer, w2->parent()->id()); |
1037 | 1026 |
1038 // Drag w2 by more than the stuck threshold and drop it into the dock. | 1027 // Drag w2 by more than the stuck threshold and drop it into the dock. |
1039 ASSERT_NO_FATAL_FAILURE(DragStart(w2.get())); | 1028 ASSERT_NO_FATAL_FAILURE(DragStart(w2.get())); |
1040 DragMove(-100, 0); | 1029 DragMove(-100, 0); |
1041 // Window should actually move. | 1030 // Window should actually move. |
1042 EXPECT_NE(start_x, w2->bounds().x()); | 1031 EXPECT_NE(start_x, w2->bounds().x()); |
1043 // Alignment set to "LEFT" during the drag because dock has a window in it. | 1032 // Alignment set to "LEFT" during the drag because dock has a window in it. |
1044 EXPECT_EQ(DOCKED_ALIGNMENT_LEFT, docked_alignment(manager)); | 1033 EXPECT_EQ(DOCKED_ALIGNMENT_LEFT, docked_alignment(manager)); |
1045 // Release the mouse and the window should be attached to the edge. | 1034 // Release the mouse and the window should be attached to the edge. |
1046 DragEnd(); | 1035 DragEnd(); |
1047 // Both windows are docked now. | 1036 // Both windows are docked now. |
1048 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); | 1037 EXPECT_EQ(kShellWindowId_DockedContainer, w1->parent()->id()); |
1049 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w2->parent()->id()); | 1038 EXPECT_EQ(kShellWindowId_DockedContainer, w2->parent()->id()); |
1050 // Dock should get expanded and desktop should get shrunk. | 1039 // Dock should get expanded and desktop should get shrunk. |
1051 EXPECT_EQ(DOCKED_ALIGNMENT_LEFT, docked_alignment(manager)); | 1040 EXPECT_EQ(DOCKED_ALIGNMENT_LEFT, docked_alignment(manager)); |
1052 EXPECT_EQ(std::max(w1->bounds().width(), w2->bounds().width()), | 1041 EXPECT_EQ(std::max(w1->bounds().width(), w2->bounds().width()), |
1053 docked_width(manager)); | 1042 docked_width(manager)); |
1054 // Desktop work area should now shrink by dock width. | 1043 // Desktop work area should now shrink by dock width. |
1055 EXPECT_EQ(ScreenUtil::GetDisplayBoundsInParent(w2.get()).width() - | 1044 EXPECT_EQ(ScreenUtil::GetDisplayBoundsInParent(w2.get()).width() - |
1056 docked_width(manager) - min_dock_gap(), | 1045 docked_width(manager) - min_dock_gap(), |
1057 ScreenUtil::GetDisplayWorkAreaBoundsInParent(w2.get()).width()); | 1046 ScreenUtil::GetDisplayWorkAreaBoundsInParent(w2.get()).width()); |
1058 } | 1047 } |
1059 | 1048 |
1060 // Dock two windows, resize one. | 1049 // Dock two windows, resize one. |
1061 // Test the docked windows area size and remaining desktop resizing. | 1050 // Test the docked windows area size and remaining desktop resizing. |
1062 TEST_P(DockedWindowResizerTest, ResizeOneOfTwoWindows) { | 1051 TEST_P(DockedWindowResizerTest, ResizeOneOfTwoWindows) { |
1063 if (!SupportsHostWindowResize()) | 1052 if (!SupportsHostWindowResize()) |
1064 return; | 1053 return; |
1065 | 1054 |
1066 // Wider display to start since panels are limited to half the display width. | 1055 // Wider display to start since panels are limited to half the display width. |
1067 UpdateDisplay("1000x600"); | 1056 UpdateDisplay("1000x600"); |
1068 scoped_ptr<aura::Window> w1(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); | 1057 scoped_ptr<aura::Window> w1(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); |
1069 scoped_ptr<aura::Window> w2(CreateTestWindow(gfx::Rect(0, 0, 210, 201))); | 1058 scoped_ptr<aura::Window> w2(CreateTestWindow(gfx::Rect(0, 0, 210, 201))); |
1070 // Work area should cover the whole screen. | 1059 // Work area should cover the whole screen. |
1071 EXPECT_EQ(ScreenUtil::GetDisplayBoundsInParent(w2.get()).width(), | 1060 EXPECT_EQ(ScreenUtil::GetDisplayBoundsInParent(w2.get()).width(), |
1072 ScreenUtil::GetDisplayWorkAreaBoundsInParent(w2.get()).width()); | 1061 ScreenUtil::GetDisplayWorkAreaBoundsInParent(w2.get()).width()); |
1073 | 1062 |
1074 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w1.get(), 20); | 1063 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w1.get(), 20); |
1075 // A window should be docked at the right edge. | 1064 // A window should be docked at the right edge. |
1076 EXPECT_EQ(w1->GetRootWindow()->GetBoundsInScreen().right(), | 1065 EXPECT_EQ(w1->GetRootWindow()->GetBoundsInScreen().right(), |
1077 w1->GetBoundsInScreen().right()); | 1066 w1->GetBoundsInScreen().right()); |
1078 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); | 1067 EXPECT_EQ(kShellWindowId_DockedContainer, w1->parent()->id()); |
1079 DockedWindowLayoutManager* manager = | 1068 DockedWindowLayoutManager* manager = |
1080 static_cast<DockedWindowLayoutManager*>(w1->parent()->layout_manager()); | 1069 static_cast<DockedWindowLayoutManager*>(w1->parent()->layout_manager()); |
1081 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); | 1070 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); |
1082 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); | 1071 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); |
1083 | 1072 |
1084 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w2.get(), 100); | 1073 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w2.get(), 100); |
1085 // Both windows should now be docked at the right edge. | 1074 // Both windows should now be docked at the right edge. |
1086 EXPECT_EQ(w2->GetRootWindow()->GetBoundsInScreen().right(), | 1075 EXPECT_EQ(w2->GetRootWindow()->GetBoundsInScreen().right(), |
1087 w2->GetBoundsInScreen().right()); | 1076 w2->GetBoundsInScreen().right()); |
1088 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w2->parent()->id()); | 1077 EXPECT_EQ(kShellWindowId_DockedContainer, w2->parent()->id()); |
1089 // Dock width should be set to a wider window. | 1078 // Dock width should be set to a wider window. |
1090 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); | 1079 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); |
1091 EXPECT_EQ(std::max(w1->bounds().width(), w2->bounds().width()), | 1080 EXPECT_EQ(std::max(w1->bounds().width(), w2->bounds().width()), |
1092 docked_width(manager)); | 1081 docked_width(manager)); |
1093 | 1082 |
1094 // Resize the first window left by a bit and test that the dock expands. | 1083 // Resize the first window left by a bit and test that the dock expands. |
1095 int previous_width = w1->bounds().width(); | 1084 int previous_width = w1->bounds().width(); |
1096 const int kResizeSpan1 = 30; | 1085 const int kResizeSpan1 = 30; |
1097 ASSERT_NO_FATAL_FAILURE(ResizeStartAtOffsetFromWindowOrigin(w1.get(), | 1086 ASSERT_NO_FATAL_FAILURE(ResizeStartAtOffsetFromWindowOrigin(w1.get(), |
1098 0, 20, | 1087 0, 20, |
1099 HTLEFT)); | 1088 HTLEFT)); |
1100 DragMove(-kResizeSpan1, 0); | 1089 DragMove(-kResizeSpan1, 0); |
1101 // Alignment set to "RIGHT" during the drag because dock has a window in it. | 1090 // Alignment set to "RIGHT" during the drag because dock has a window in it. |
1102 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); | 1091 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); |
1103 // Release the mouse and the window should be attached to the edge. | 1092 // Release the mouse and the window should be attached to the edge. |
1104 DragEnd(); | 1093 DragEnd(); |
1105 // Dock should still have both windows in it. | 1094 // Dock should still have both windows in it. |
1106 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); | 1095 EXPECT_EQ(kShellWindowId_DockedContainer, w1->parent()->id()); |
1107 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w2->parent()->id()); | 1096 EXPECT_EQ(kShellWindowId_DockedContainer, w2->parent()->id()); |
1108 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); | 1097 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); |
1109 // w1 is now wider than before. The dock should expand and be as wide as w1. | 1098 // w1 is now wider than before. The dock should expand and be as wide as w1. |
1110 EXPECT_EQ(previous_width + kResizeSpan1, w1->bounds().width()); | 1099 EXPECT_EQ(previous_width + kResizeSpan1, w1->bounds().width()); |
1111 // Both windows should get resized since they both don't have min/max size. | 1100 // Both windows should get resized since they both don't have min/max size. |
1112 EXPECT_EQ(w1->bounds().width(), w2->bounds().width()); | 1101 EXPECT_EQ(w1->bounds().width(), w2->bounds().width()); |
1113 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); | 1102 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); |
1114 // Desktop work area should shrink. | 1103 // Desktop work area should shrink. |
1115 EXPECT_EQ(ScreenUtil::GetDisplayBoundsInParent(w2.get()).width() - | 1104 EXPECT_EQ(ScreenUtil::GetDisplayBoundsInParent(w2.get()).width() - |
1116 docked_width(manager) - min_dock_gap(), | 1105 docked_width(manager) - min_dock_gap(), |
1117 ScreenUtil::GetDisplayWorkAreaBoundsInParent(w2.get()).width()); | 1106 ScreenUtil::GetDisplayWorkAreaBoundsInParent(w2.get()).width()); |
1118 | 1107 |
1119 // Resize the first window left by more than the dock maximum width. | 1108 // Resize the first window left by more than the dock maximum width. |
1120 // This should cause the window width to be restricted by maximum dock width. | 1109 // This should cause the window width to be restricted by maximum dock width. |
1121 previous_width = w1->bounds().width(); | 1110 previous_width = w1->bounds().width(); |
1122 const int kResizeSpan2 = 250; | 1111 const int kResizeSpan2 = 250; |
1123 ASSERT_NO_FATAL_FAILURE(ResizeStartAtOffsetFromWindowOrigin(w1.get(), | 1112 ASSERT_NO_FATAL_FAILURE(ResizeStartAtOffsetFromWindowOrigin(w1.get(), |
1124 0, 20, | 1113 0, 20, |
1125 HTLEFT)); | 1114 HTLEFT)); |
1126 DragMove(-kResizeSpan2, 0); | 1115 DragMove(-kResizeSpan2, 0); |
1127 // Alignment set to "RIGHT" during the drag because dock has a window in it. | 1116 // Alignment set to "RIGHT" during the drag because dock has a window in it. |
1128 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); | 1117 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); |
1129 // Release the mouse and the window should be attached to the edge. | 1118 // Release the mouse and the window should be attached to the edge. |
1130 DragEnd(); | 1119 DragEnd(); |
1131 // Dock should still have both windows in it. | 1120 // Dock should still have both windows in it. |
1132 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); | 1121 EXPECT_EQ(kShellWindowId_DockedContainer, w1->parent()->id()); |
1133 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w2->parent()->id()); | 1122 EXPECT_EQ(kShellWindowId_DockedContainer, w2->parent()->id()); |
1134 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); | 1123 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); |
1135 // w1 is now as wide as the maximum dock width and the dock should get | 1124 // w1 is now as wide as the maximum dock width and the dock should get |
1136 // resized to the maximum width. | 1125 // resized to the maximum width. |
1137 EXPECT_EQ(max_width(), w1->bounds().width()); | 1126 EXPECT_EQ(max_width(), w1->bounds().width()); |
1138 // Both windows should get resized since they both don't have min/max size. | 1127 // Both windows should get resized since they both don't have min/max size. |
1139 EXPECT_EQ(w1->bounds().width(), w2->bounds().width()); | 1128 EXPECT_EQ(w1->bounds().width(), w2->bounds().width()); |
1140 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); | 1129 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); |
1141 // Desktop work area should shrink. | 1130 // Desktop work area should shrink. |
1142 EXPECT_EQ(ScreenUtil::GetDisplayBoundsInParent(w2.get()).width() - | 1131 EXPECT_EQ(ScreenUtil::GetDisplayBoundsInParent(w2.get()).width() - |
1143 docked_width(manager) - min_dock_gap(), | 1132 docked_width(manager) - min_dock_gap(), |
1144 ScreenUtil::GetDisplayWorkAreaBoundsInParent(w2.get()).width()); | 1133 ScreenUtil::GetDisplayWorkAreaBoundsInParent(w2.get()).width()); |
1145 | 1134 |
1146 // Resize the first window right to get it completely inside the docked area. | 1135 // Resize the first window right to get it completely inside the docked area. |
1147 previous_width = w1->bounds().width(); | 1136 previous_width = w1->bounds().width(); |
1148 const int kResizeSpan3 = 100; | 1137 const int kResizeSpan3 = 100; |
1149 ASSERT_NO_FATAL_FAILURE(ResizeStartAtOffsetFromWindowOrigin(w1.get(), | 1138 ASSERT_NO_FATAL_FAILURE(ResizeStartAtOffsetFromWindowOrigin(w1.get(), |
1150 0, 20, | 1139 0, 20, |
1151 HTLEFT)); | 1140 HTLEFT)); |
1152 DragMove(kResizeSpan3, 0); | 1141 DragMove(kResizeSpan3, 0); |
1153 // Alignment set to "RIGHT" during the drag because dock has a window in it. | 1142 // Alignment set to "RIGHT" during the drag because dock has a window in it. |
1154 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); | 1143 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); |
1155 // Release the mouse and the window should be docked. | 1144 // Release the mouse and the window should be docked. |
1156 DragEnd(); | 1145 DragEnd(); |
1157 // Dock should still have both windows in it. | 1146 // Dock should still have both windows in it. |
1158 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); | 1147 EXPECT_EQ(kShellWindowId_DockedContainer, w1->parent()->id()); |
1159 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w2->parent()->id()); | 1148 EXPECT_EQ(kShellWindowId_DockedContainer, w2->parent()->id()); |
1160 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); | 1149 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); |
1161 // w1 should be narrower than before by the length of the drag. | 1150 // w1 should be narrower than before by the length of the drag. |
1162 EXPECT_EQ(previous_width - kResizeSpan3, w1->bounds().width()); | 1151 EXPECT_EQ(previous_width - kResizeSpan3, w1->bounds().width()); |
1163 // Both windows should get resized since they both don't have min/max size. | 1152 // Both windows should get resized since they both don't have min/max size. |
1164 EXPECT_EQ(w1->bounds().width(), w2->bounds().width()); | 1153 EXPECT_EQ(w1->bounds().width(), w2->bounds().width()); |
1165 // The dock should be as wide as w1 or w2. | 1154 // The dock should be as wide as w1 or w2. |
1166 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); | 1155 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); |
1167 // Desktop work area should shrink. | 1156 // Desktop work area should shrink. |
1168 EXPECT_EQ(ScreenUtil::GetDisplayBoundsInParent(w2.get()).width() - | 1157 EXPECT_EQ(ScreenUtil::GetDisplayBoundsInParent(w2.get()).width() - |
1169 docked_width(manager) - min_dock_gap(), | 1158 docked_width(manager) - min_dock_gap(), |
1170 ScreenUtil::GetDisplayWorkAreaBoundsInParent(w2.get()).width()); | 1159 ScreenUtil::GetDisplayWorkAreaBoundsInParent(w2.get()).width()); |
1171 | 1160 |
1172 // Resize the first window left to be overhang again. | 1161 // Resize the first window left to be overhang again. |
1173 previous_width = w1->bounds().width(); | 1162 previous_width = w1->bounds().width(); |
1174 ASSERT_NO_FATAL_FAILURE(ResizeStartAtOffsetFromWindowOrigin(w1.get(), | 1163 ASSERT_NO_FATAL_FAILURE(ResizeStartAtOffsetFromWindowOrigin(w1.get(), |
1175 0, 20, | 1164 0, 20, |
1176 HTLEFT)); | 1165 HTLEFT)); |
1177 DragMove(-kResizeSpan3, 0); | 1166 DragMove(-kResizeSpan3, 0); |
1178 DragEnd(); | 1167 DragEnd(); |
1179 EXPECT_EQ(previous_width + kResizeSpan3, w1->bounds().width()); | 1168 EXPECT_EQ(previous_width + kResizeSpan3, w1->bounds().width()); |
1180 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); | 1169 EXPECT_EQ(kShellWindowId_DockedContainer, w1->parent()->id()); |
1181 // Docked area should be as wide as possible (maximum) and same as w1. | 1170 // Docked area should be as wide as possible (maximum) and same as w1. |
1182 EXPECT_EQ(max_width(), docked_width(manager)); | 1171 EXPECT_EQ(max_width(), docked_width(manager)); |
1183 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); | 1172 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); |
1184 | 1173 |
1185 // Undock the first window. Docked area should shrink to its ideal size. | 1174 // Undock the first window. Docked area should shrink to its ideal size. |
1186 ASSERT_NO_FATAL_FAILURE(DragStart(w1.get())); | 1175 ASSERT_NO_FATAL_FAILURE(DragStart(w1.get())); |
1187 // Drag up as well to avoid attaching panels to launcher shelf. | 1176 // Drag up as well to avoid attaching panels to launcher shelf. |
1188 DragMove(-(400 - 210), -100); | 1177 DragMove(-(400 - 210), -100); |
1189 // Alignment set to "RIGHT" since we have another window docked. | 1178 // Alignment set to "RIGHT" since we have another window docked. |
1190 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); | 1179 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); |
1191 // Release the mouse and the window should be no longer attached to the edge. | 1180 // Release the mouse and the window should be no longer attached to the edge. |
1192 DragEnd(); | 1181 DragEnd(); |
1193 EXPECT_EQ(internal::kShellWindowId_DefaultContainer, w1->parent()->id()); | 1182 EXPECT_EQ(kShellWindowId_DefaultContainer, w1->parent()->id()); |
1194 // Dock should be as wide as w2 (and same as ideal width). | 1183 // Dock should be as wide as w2 (and same as ideal width). |
1195 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); | 1184 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); |
1196 EXPECT_EQ(ideal_width(), docked_width(manager)); | 1185 EXPECT_EQ(ideal_width(), docked_width(manager)); |
1197 EXPECT_EQ(w2->bounds().width(), docked_width(manager)); | 1186 EXPECT_EQ(w2->bounds().width(), docked_width(manager)); |
1198 // The second window should be still docked. | 1187 // The second window should be still docked. |
1199 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w2->parent()->id()); | 1188 EXPECT_EQ(kShellWindowId_DockedContainer, w2->parent()->id()); |
1200 // Desktop work area should be inset. | 1189 // Desktop work area should be inset. |
1201 EXPECT_EQ(ScreenUtil::GetDisplayBoundsInParent(w1.get()).width() - | 1190 EXPECT_EQ(ScreenUtil::GetDisplayBoundsInParent(w1.get()).width() - |
1202 docked_width(manager) - min_dock_gap(), | 1191 docked_width(manager) - min_dock_gap(), |
1203 ScreenUtil::GetDisplayWorkAreaBoundsInParent(w1.get()).width()); | 1192 ScreenUtil::GetDisplayWorkAreaBoundsInParent(w1.get()).width()); |
1204 } | 1193 } |
1205 | 1194 |
1206 // Dock a window, resize it and test that undocking it preserves the width. | 1195 // Dock a window, resize it and test that undocking it preserves the width. |
1207 TEST_P(DockedWindowResizerTest, ResizingKeepsWidth) { | 1196 TEST_P(DockedWindowResizerTest, ResizingKeepsWidth) { |
1208 if (!SupportsHostWindowResize()) | 1197 if (!SupportsHostWindowResize()) |
1209 return; | 1198 return; |
1210 | 1199 |
1211 // Wider display to start since panels are limited to half the display width. | 1200 // Wider display to start since panels are limited to half the display width. |
1212 UpdateDisplay("1000x600"); | 1201 UpdateDisplay("1000x600"); |
1213 scoped_ptr<aura::Window> w1(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); | 1202 scoped_ptr<aura::Window> w1(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); |
1214 | 1203 |
1215 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w1.get(), 20); | 1204 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w1.get(), 20); |
1216 // Window should be docked at the right edge. | 1205 // Window should be docked at the right edge. |
1217 EXPECT_EQ(w1->GetRootWindow()->GetBoundsInScreen().right(), | 1206 EXPECT_EQ(w1->GetRootWindow()->GetBoundsInScreen().right(), |
1218 w1->GetBoundsInScreen().right()); | 1207 w1->GetBoundsInScreen().right()); |
1219 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); | 1208 EXPECT_EQ(kShellWindowId_DockedContainer, w1->parent()->id()); |
1220 DockedWindowLayoutManager* manager = | 1209 DockedWindowLayoutManager* manager = |
1221 static_cast<DockedWindowLayoutManager*>(w1->parent()->layout_manager()); | 1210 static_cast<DockedWindowLayoutManager*>(w1->parent()->layout_manager()); |
1222 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); | 1211 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); |
1223 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); | 1212 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); |
1224 | 1213 |
1225 // Resize the window left by a bit and test that the dock expands. | 1214 // Resize the window left by a bit and test that the dock expands. |
1226 int previous_width = w1->bounds().width(); | 1215 int previous_width = w1->bounds().width(); |
1227 const int kResizeSpan1 = 30; | 1216 const int kResizeSpan1 = 30; |
1228 ASSERT_NO_FATAL_FAILURE(ResizeStartAtOffsetFromWindowOrigin(w1.get(), | 1217 ASSERT_NO_FATAL_FAILURE(ResizeStartAtOffsetFromWindowOrigin(w1.get(), |
1229 0, 20, | 1218 0, 20, |
1230 HTLEFT)); | 1219 HTLEFT)); |
1231 DragMove(-kResizeSpan1, 0); | 1220 DragMove(-kResizeSpan1, 0); |
1232 // Alignment stays "RIGHT" during the drag because the only docked window | 1221 // Alignment stays "RIGHT" during the drag because the only docked window |
1233 // is being resized. | 1222 // is being resized. |
1234 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); | 1223 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); |
1235 // Release the mouse and the window should be attached to the edge. | 1224 // Release the mouse and the window should be attached to the edge. |
1236 DragEnd(); | 1225 DragEnd(); |
1237 // The window should get docked. | 1226 // The window should get docked. |
1238 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); | 1227 EXPECT_EQ(kShellWindowId_DockedContainer, w1->parent()->id()); |
1239 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); | 1228 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); |
1240 // w1 is now wider and the dock should expand to be as wide as w1. | 1229 // w1 is now wider and the dock should expand to be as wide as w1. |
1241 EXPECT_EQ(previous_width + kResizeSpan1, w1->bounds().width()); | 1230 EXPECT_EQ(previous_width + kResizeSpan1, w1->bounds().width()); |
1242 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); | 1231 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); |
1243 | 1232 |
1244 // Undock by dragging almost to the left edge. | 1233 // Undock by dragging almost to the left edge. |
1245 DragToVerticalPositionRelativeToEdge(DOCKED_EDGE_LEFT, w1.get(), 100, 20); | 1234 DragToVerticalPositionRelativeToEdge(DOCKED_EDGE_LEFT, w1.get(), 100, 20); |
1246 // Width should be preserved. | 1235 // Width should be preserved. |
1247 EXPECT_EQ(previous_width + kResizeSpan1, w1->bounds().width()); | 1236 EXPECT_EQ(previous_width + kResizeSpan1, w1->bounds().width()); |
1248 // Height should be restored to what it was originally. | 1237 // Height should be restored to what it was originally. |
(...skipping 18 matching lines...) Expand all Loading... |
1267 return; | 1256 return; |
1268 | 1257 |
1269 // Wider display to start since panels are limited to half the display width. | 1258 // Wider display to start since panels are limited to half the display width. |
1270 UpdateDisplay("1000x600"); | 1259 UpdateDisplay("1000x600"); |
1271 scoped_ptr<aura::Window> w1(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); | 1260 scoped_ptr<aura::Window> w1(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); |
1272 | 1261 |
1273 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w1.get(), 20); | 1262 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w1.get(), 20); |
1274 // Window should be docked at the right edge. | 1263 // Window should be docked at the right edge. |
1275 EXPECT_EQ(w1->GetRootWindow()->GetBoundsInScreen().right(), | 1264 EXPECT_EQ(w1->GetRootWindow()->GetBoundsInScreen().right(), |
1276 w1->GetBoundsInScreen().right()); | 1265 w1->GetBoundsInScreen().right()); |
1277 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); | 1266 EXPECT_EQ(kShellWindowId_DockedContainer, w1->parent()->id()); |
1278 DockedWindowLayoutManager* manager = | 1267 DockedWindowLayoutManager* manager = |
1279 static_cast<DockedWindowLayoutManager*>(w1->parent()->layout_manager()); | 1268 static_cast<DockedWindowLayoutManager*>(w1->parent()->layout_manager()); |
1280 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); | 1269 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); |
1281 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); | 1270 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); |
1282 | 1271 |
1283 // Resize the window left by a bit and test that the dock expands. | 1272 // Resize the window left by a bit and test that the dock expands. |
1284 int previous_width = w1->bounds().width(); | 1273 int previous_width = w1->bounds().width(); |
1285 const int kResizeSpan1 = 30; | 1274 const int kResizeSpan1 = 30; |
1286 ASSERT_NO_FATAL_FAILURE(ResizeStartAtOffsetFromWindowOrigin( | 1275 ASSERT_NO_FATAL_FAILURE(ResizeStartAtOffsetFromWindowOrigin( |
1287 w1.get(), 0, 20, HTLEFT)); | 1276 w1.get(), 0, 20, HTLEFT)); |
1288 DragMove(-kResizeSpan1, 0); | 1277 DragMove(-kResizeSpan1, 0); |
1289 // Normally alignment would be reset to "NONE" during the drag when there is | 1278 // Normally alignment would be reset to "NONE" during the drag when there is |
1290 // only a single window docked and it is being dragged. However because that | 1279 // only a single window docked and it is being dragged. However because that |
1291 // window is being resized rather than moved the alignment is not changed. | 1280 // window is being resized rather than moved the alignment is not changed. |
1292 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); | 1281 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); |
1293 // Release the mouse and the window should be attached to the edge. | 1282 // Release the mouse and the window should be attached to the edge. |
1294 DragEnd(); | 1283 DragEnd(); |
1295 // The window should stay docked. | 1284 // The window should stay docked. |
1296 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); | 1285 EXPECT_EQ(kShellWindowId_DockedContainer, w1->parent()->id()); |
1297 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); | 1286 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); |
1298 // w1 is now wider and the dock should expand to be as wide as w1. | 1287 // w1 is now wider and the dock should expand to be as wide as w1. |
1299 EXPECT_EQ(previous_width + kResizeSpan1, w1->bounds().width()); | 1288 EXPECT_EQ(previous_width + kResizeSpan1, w1->bounds().width()); |
1300 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); | 1289 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); |
1301 | 1290 |
1302 // Resize the window by dragging its right edge left a bit and test that the | 1291 // Resize the window by dragging its right edge left a bit and test that the |
1303 // window stays docked. | 1292 // window stays docked. |
1304 previous_width = w1->bounds().width(); | 1293 previous_width = w1->bounds().width(); |
1305 const int kResizeSpan2 = 15; | 1294 const int kResizeSpan2 = 15; |
1306 ASSERT_NO_FATAL_FAILURE(ResizeStartAtOffsetFromWindowOrigin( | 1295 ASSERT_NO_FATAL_FAILURE(ResizeStartAtOffsetFromWindowOrigin( |
1307 w1.get(), w1->bounds().width(), 20, HTRIGHT)); | 1296 w1.get(), w1->bounds().width(), 20, HTRIGHT)); |
1308 DragMove(-kResizeSpan2, 0); | 1297 DragMove(-kResizeSpan2, 0); |
1309 // Alignment stays "RIGHT" during the drag because the window is being | 1298 // Alignment stays "RIGHT" during the drag because the window is being |
1310 // resized rather than dragged. | 1299 // resized rather than dragged. |
1311 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); | 1300 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); |
1312 // Release the mouse and the window should be attached to the edge. | 1301 // Release the mouse and the window should be attached to the edge. |
1313 DragEnd(); | 1302 DragEnd(); |
1314 // The window should stay docked. | 1303 // The window should stay docked. |
1315 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); | 1304 EXPECT_EQ(kShellWindowId_DockedContainer, w1->parent()->id()); |
1316 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); | 1305 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); |
1317 // The dock should stay as wide as w1 is now (a bit less than before). | 1306 // The dock should stay as wide as w1 is now (a bit less than before). |
1318 EXPECT_EQ(previous_width - kResizeSpan2, w1->bounds().width()); | 1307 EXPECT_EQ(previous_width - kResizeSpan2, w1->bounds().width()); |
1319 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); | 1308 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); |
1320 } | 1309 } |
1321 | 1310 |
1322 // Dock two windows, resize one. Test the docked windows area size. | 1311 // Dock two windows, resize one. Test the docked windows area size. |
1323 TEST_P(DockedWindowResizerTest, ResizeTwoWindows) { | 1312 TEST_P(DockedWindowResizerTest, ResizeTwoWindows) { |
1324 if (!SupportsHostWindowResize()) | 1313 if (!SupportsHostWindowResize()) |
1325 return; | 1314 return; |
1326 | 1315 |
1327 // Wider display to start since panels are limited to half the display width. | 1316 // Wider display to start since panels are limited to half the display width. |
1328 UpdateDisplay("1000x600"); | 1317 UpdateDisplay("1000x600"); |
1329 scoped_ptr<aura::Window> w1(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); | 1318 scoped_ptr<aura::Window> w1(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); |
1330 scoped_ptr<aura::Window> w2(CreateTestWindow(gfx::Rect(0, 0, 210, 201))); | 1319 scoped_ptr<aura::Window> w2(CreateTestWindow(gfx::Rect(0, 0, 210, 201))); |
1331 | 1320 |
1332 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w1.get(), 20); | 1321 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w1.get(), 20); |
1333 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w2.get(), 100); | 1322 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w2.get(), 100); |
1334 // Both windows should now be docked at the right edge. | 1323 // Both windows should now be docked at the right edge. |
1335 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); | 1324 EXPECT_EQ(kShellWindowId_DockedContainer, w1->parent()->id()); |
1336 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w2->parent()->id()); | 1325 EXPECT_EQ(kShellWindowId_DockedContainer, w2->parent()->id()); |
1337 // Dock width should be set to ideal width. | 1326 // Dock width should be set to ideal width. |
1338 DockedWindowLayoutManager* manager = | 1327 DockedWindowLayoutManager* manager = |
1339 static_cast<DockedWindowLayoutManager*>(w1->parent()->layout_manager()); | 1328 static_cast<DockedWindowLayoutManager*>(w1->parent()->layout_manager()); |
1340 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); | 1329 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); |
1341 EXPECT_EQ(ideal_width(), docked_width(manager)); | 1330 EXPECT_EQ(ideal_width(), docked_width(manager)); |
1342 | 1331 |
1343 // Resize the first window left by a bit and test that the dock expands. | 1332 // Resize the first window left by a bit and test that the dock expands. |
1344 int previous_width = w1->bounds().width(); | 1333 int previous_width = w1->bounds().width(); |
1345 const int kResizeSpan1 = 30; | 1334 const int kResizeSpan1 = 30; |
1346 ASSERT_NO_FATAL_FAILURE(ResizeStartAtOffsetFromWindowOrigin(w1.get(), | 1335 ASSERT_NO_FATAL_FAILURE(ResizeStartAtOffsetFromWindowOrigin(w1.get(), |
(...skipping 15 matching lines...) Expand all Loading... |
1362 DragMove(-kResizeSpan1, 0); | 1351 DragMove(-kResizeSpan1, 0); |
1363 DragEnd(); | 1352 DragEnd(); |
1364 // w2 should get wider since it was resized by a user. | 1353 // w2 should get wider since it was resized by a user. |
1365 EXPECT_EQ(previous_width + kResizeSpan1, w2->bounds().width()); | 1354 EXPECT_EQ(previous_width + kResizeSpan1, w2->bounds().width()); |
1366 // w1 should stay as wide as w2 since both were flush with the dock edge. | 1355 // w1 should stay as wide as w2 since both were flush with the dock edge. |
1367 EXPECT_EQ(w2->bounds().width(), w1->bounds().width()); | 1356 EXPECT_EQ(w2->bounds().width(), w1->bounds().width()); |
1368 EXPECT_EQ(w2->bounds().width(), docked_width(manager)); | 1357 EXPECT_EQ(w2->bounds().width(), docked_width(manager)); |
1369 | 1358 |
1370 // Undock w2 and then dock it back. | 1359 // Undock w2 and then dock it back. |
1371 DragToVerticalPositionRelativeToEdge(DOCKED_EDGE_RIGHT, w2.get(), -400, 100); | 1360 DragToVerticalPositionRelativeToEdge(DOCKED_EDGE_RIGHT, w2.get(), -400, 100); |
1372 EXPECT_EQ(internal::kShellWindowId_DefaultContainer, w2->parent()->id()); | 1361 EXPECT_EQ(kShellWindowId_DefaultContainer, w2->parent()->id()); |
1373 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w2.get(), 100); | 1362 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w2.get(), 100); |
1374 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w2->parent()->id()); | 1363 EXPECT_EQ(kShellWindowId_DockedContainer, w2->parent()->id()); |
1375 // w2 should become same width as w1. | 1364 // w2 should become same width as w1. |
1376 EXPECT_EQ(w1->bounds().width(), w2->bounds().width()); | 1365 EXPECT_EQ(w1->bounds().width(), w2->bounds().width()); |
1377 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); | 1366 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); |
1378 | 1367 |
1379 // Make w1 even wider. | 1368 // Make w1 even wider. |
1380 ASSERT_NO_FATAL_FAILURE(ResizeStartAtOffsetFromWindowOrigin(w1.get(), | 1369 ASSERT_NO_FATAL_FAILURE(ResizeStartAtOffsetFromWindowOrigin(w1.get(), |
1381 0, 20, | 1370 0, 20, |
1382 HTLEFT)); | 1371 HTLEFT)); |
1383 DragMove(-kResizeSpan1, 0); | 1372 DragMove(-kResizeSpan1, 0); |
1384 DragEnd(); | 1373 DragEnd(); |
(...skipping 11 matching lines...) Expand all Loading... |
1396 | 1385 |
1397 scoped_ptr<aura::Window> w1(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); | 1386 scoped_ptr<aura::Window> w1(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); |
1398 // Work area should cover the whole screen. | 1387 // Work area should cover the whole screen. |
1399 EXPECT_EQ(ScreenUtil::GetDisplayBoundsInParent(w1.get()).width(), | 1388 EXPECT_EQ(ScreenUtil::GetDisplayBoundsInParent(w1.get()).width(), |
1400 ScreenUtil::GetDisplayWorkAreaBoundsInParent(w1.get()).width()); | 1389 ScreenUtil::GetDisplayWorkAreaBoundsInParent(w1.get()).width()); |
1401 | 1390 |
1402 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w1.get(), 20); | 1391 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w1.get(), 20); |
1403 // A window should be docked at the right edge. | 1392 // A window should be docked at the right edge. |
1404 EXPECT_EQ(w1->GetRootWindow()->GetBoundsInScreen().right(), | 1393 EXPECT_EQ(w1->GetRootWindow()->GetBoundsInScreen().right(), |
1405 w1->GetBoundsInScreen().right()); | 1394 w1->GetBoundsInScreen().right()); |
1406 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); | 1395 EXPECT_EQ(kShellWindowId_DockedContainer, w1->parent()->id()); |
1407 DockedWindowLayoutManager* manager = | 1396 DockedWindowLayoutManager* manager = |
1408 static_cast<DockedWindowLayoutManager*>(w1->parent()->layout_manager()); | 1397 static_cast<DockedWindowLayoutManager*>(w1->parent()->layout_manager()); |
1409 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); | 1398 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); |
1410 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); | 1399 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); |
1411 | 1400 |
1412 // Detach and drag down to shelf. | 1401 // Detach and drag down to shelf. |
1413 ASSERT_NO_FATAL_FAILURE(DragStart(w1.get())); | 1402 ASSERT_NO_FATAL_FAILURE(DragStart(w1.get())); |
1414 DragMove(-40, 0); | 1403 DragMove(-40, 0); |
1415 // Alignment is set to "NONE" when drag starts. | 1404 // Alignment is set to "NONE" when drag starts. |
1416 EXPECT_EQ(DOCKED_ALIGNMENT_NONE, docked_alignment(manager)); | 1405 EXPECT_EQ(DOCKED_ALIGNMENT_NONE, docked_alignment(manager)); |
(...skipping 29 matching lines...) Expand all Loading... |
1446 scoped_ptr<aura::Window> child(CreateTestWindowInShellWithDelegateAndType( | 1435 scoped_ptr<aura::Window> child(CreateTestWindowInShellWithDelegateAndType( |
1447 NULL, ui::wm::WINDOW_TYPE_NORMAL, 0, gfx::Rect(20, 20, 150, 20))); | 1436 NULL, ui::wm::WINDOW_TYPE_NORMAL, 0, gfx::Rect(20, 20, 150, 20))); |
1448 ::wm::AddTransientChild(window.get(), child.get()); | 1437 ::wm::AddTransientChild(window.get(), child.get()); |
1449 if (window->parent() != child->parent()) | 1438 if (window->parent() != child->parent()) |
1450 window->parent()->AddChild(child.get()); | 1439 window->parent()->AddChild(child.get()); |
1451 EXPECT_EQ(window.get(), ::wm::GetTransientParent(child.get())); | 1440 EXPECT_EQ(window.get(), ::wm::GetTransientParent(child.get())); |
1452 | 1441 |
1453 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, window.get(), 20); | 1442 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, window.get(), 20); |
1454 | 1443 |
1455 // A window should be docked at the right edge. | 1444 // A window should be docked at the right edge. |
1456 EXPECT_EQ(internal::kShellWindowId_DockedContainer, window->parent()->id()); | 1445 EXPECT_EQ(kShellWindowId_DockedContainer, window->parent()->id()); |
1457 EXPECT_EQ(internal::kShellWindowId_DockedContainer, child->parent()->id()); | 1446 EXPECT_EQ(kShellWindowId_DockedContainer, child->parent()->id()); |
1458 | 1447 |
1459 // Drag the child - it should move freely and stay where it is dragged. | 1448 // Drag the child - it should move freely and stay where it is dragged. |
1460 ASSERT_NO_FATAL_FAILURE(DragStart(child.get())); | 1449 ASSERT_NO_FATAL_FAILURE(DragStart(child.get())); |
1461 DragMove(500, 20); | 1450 DragMove(500, 20); |
1462 DragEnd(); | 1451 DragEnd(); |
1463 EXPECT_EQ(gfx::Point(20 + 500, 20 + 20).ToString(), | 1452 EXPECT_EQ(gfx::Point(20 + 500, 20 + 20).ToString(), |
1464 child->GetBoundsInScreen().origin().ToString()); | 1453 child->GetBoundsInScreen().origin().ToString()); |
1465 | 1454 |
1466 // Undock the window by dragging left. | 1455 // Undock the window by dragging left. |
1467 ASSERT_NO_FATAL_FAILURE(DragStart(window.get())); | 1456 ASSERT_NO_FATAL_FAILURE(DragStart(window.get())); |
1468 DragMove(-32, -10); | 1457 DragMove(-32, -10); |
1469 DragEnd(); | 1458 DragEnd(); |
1470 | 1459 |
1471 // The window should be undocked and the transient child should be reparented. | 1460 // The window should be undocked and the transient child should be reparented. |
1472 EXPECT_EQ(internal::kShellWindowId_DefaultContainer, window->parent()->id()); | 1461 EXPECT_EQ(kShellWindowId_DefaultContainer, window->parent()->id()); |
1473 EXPECT_EQ(internal::kShellWindowId_DefaultContainer, child->parent()->id()); | 1462 EXPECT_EQ(kShellWindowId_DefaultContainer, child->parent()->id()); |
1474 // The child should not have moved. | 1463 // The child should not have moved. |
1475 EXPECT_EQ(gfx::Point(20 + 500, 20 + 20).ToString(), | 1464 EXPECT_EQ(gfx::Point(20 + 500, 20 + 20).ToString(), |
1476 child->GetBoundsInScreen().origin().ToString()); | 1465 child->GetBoundsInScreen().origin().ToString()); |
1477 } | 1466 } |
1478 | 1467 |
1479 // Tests that reparenting windows during the drag does not affect system modal | 1468 // Tests that reparenting windows during the drag does not affect system modal |
1480 // windows that are transient children of the dragged windows. | 1469 // windows that are transient children of the dragged windows. |
1481 TEST_P(DockedWindowResizerTest, DragWindowWithModalTransientChild) { | 1470 TEST_P(DockedWindowResizerTest, DragWindowWithModalTransientChild) { |
1482 if (!SupportsHostWindowResize()) | 1471 if (!SupportsHostWindowResize()) |
1483 return; | 1472 return; |
1484 | 1473 |
1485 // Create a window. | 1474 // Create a window. |
1486 scoped_ptr<aura::Window> window(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); | 1475 scoped_ptr<aura::Window> window(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); |
1487 gfx::Rect bounds(window->bounds()); | 1476 gfx::Rect bounds(window->bounds()); |
1488 | 1477 |
1489 // Start dragging the window. | 1478 // Start dragging the window. |
1490 ASSERT_NO_FATAL_FAILURE(DragStart(window.get())); | 1479 ASSERT_NO_FATAL_FAILURE(DragStart(window.get())); |
1491 gfx::Vector2d move_vector(40, test_panels() ? -60 : 60); | 1480 gfx::Vector2d move_vector(40, test_panels() ? -60 : 60); |
1492 DragMove(move_vector.x(), move_vector.y()); | 1481 DragMove(move_vector.x(), move_vector.y()); |
1493 EXPECT_EQ(CorrectContainerIdDuringDrag(), window->parent()->id()); | 1482 EXPECT_EQ(CorrectContainerIdDuringDrag(), window->parent()->id()); |
1494 | 1483 |
1495 // While still dragging create a modal window and make it a transient child of | 1484 // While still dragging create a modal window and make it a transient child of |
1496 // the |window|. | 1485 // the |window|. |
1497 scoped_ptr<aura::Window> child(CreateModalWindow(gfx::Rect(20, 20, 150, 20))); | 1486 scoped_ptr<aura::Window> child(CreateModalWindow(gfx::Rect(20, 20, 150, 20))); |
1498 ::wm::AddTransientChild(window.get(), child.get()); | 1487 ::wm::AddTransientChild(window.get(), child.get()); |
1499 EXPECT_EQ(window.get(), ::wm::GetTransientParent(child.get())); | 1488 EXPECT_EQ(window.get(), ::wm::GetTransientParent(child.get())); |
1500 EXPECT_EQ(internal::kShellWindowId_SystemModalContainer, | 1489 EXPECT_EQ(kShellWindowId_SystemModalContainer, child->parent()->id()); |
1501 child->parent()->id()); | |
1502 | 1490 |
1503 // End the drag, the |window| should have moved (if it is a panel it will | 1491 // End the drag, the |window| should have moved (if it is a panel it will |
1504 // no longer be attached to the shelf since we dragged it above). | 1492 // no longer be attached to the shelf since we dragged it above). |
1505 DragEnd(); | 1493 DragEnd(); |
1506 bounds.Offset(move_vector); | 1494 bounds.Offset(move_vector); |
1507 EXPECT_EQ(bounds.ToString(), window->GetBoundsInScreen().ToString()); | 1495 EXPECT_EQ(bounds.ToString(), window->GetBoundsInScreen().ToString()); |
1508 | 1496 |
1509 // The original |window| should be in the default container (not docked or | 1497 // The original |window| should be in the default container (not docked or |
1510 // attached). | 1498 // attached). |
1511 EXPECT_EQ(internal::kShellWindowId_DefaultContainer, window->parent()->id()); | 1499 EXPECT_EQ(kShellWindowId_DefaultContainer, window->parent()->id()); |
1512 // The transient |child| should still be in system modal container. | 1500 // The transient |child| should still be in system modal container. |
1513 EXPECT_EQ(internal::kShellWindowId_SystemModalContainer, | 1501 EXPECT_EQ(kShellWindowId_SystemModalContainer, child->parent()->id()); |
1514 child->parent()->id()); | |
1515 // The |child| should not have moved. | 1502 // The |child| should not have moved. |
1516 EXPECT_EQ(gfx::Point(20, 20).ToString(), | 1503 EXPECT_EQ(gfx::Point(20, 20).ToString(), |
1517 child->GetBoundsInScreen().origin().ToString()); | 1504 child->GetBoundsInScreen().origin().ToString()); |
1518 // The |child| should still be a transient child of |window|. | 1505 // The |child| should still be a transient child of |window|. |
1519 EXPECT_EQ(window.get(), ::wm::GetTransientParent(child.get())); | 1506 EXPECT_EQ(window.get(), ::wm::GetTransientParent(child.get())); |
1520 } | 1507 } |
1521 | 1508 |
1522 // Tests that side snapping a window undocks it, closes the dock and then snaps. | 1509 // Tests that side snapping a window undocks it, closes the dock and then snaps. |
1523 TEST_P(DockedWindowResizerTest, SideSnapDocked) { | 1510 TEST_P(DockedWindowResizerTest, SideSnapDocked) { |
1524 if (!SupportsHostWindowResize() || test_panels()) | 1511 if (!SupportsHostWindowResize() || test_panels()) |
1525 return; | 1512 return; |
1526 | 1513 |
1527 scoped_ptr<aura::Window> w1(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); | 1514 scoped_ptr<aura::Window> w1(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); |
1528 wm::WindowState* window_state = wm::GetWindowState(w1.get()); | 1515 wm::WindowState* window_state = wm::GetWindowState(w1.get()); |
1529 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w1.get(), 20); | 1516 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w1.get(), 20); |
1530 // A window should be docked at the right edge. | 1517 // A window should be docked at the right edge. |
1531 EXPECT_EQ(w1->GetRootWindow()->GetBoundsInScreen().right(), | 1518 EXPECT_EQ(w1->GetRootWindow()->GetBoundsInScreen().right(), |
1532 w1->GetBoundsInScreen().right()); | 1519 w1->GetBoundsInScreen().right()); |
1533 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); | 1520 EXPECT_EQ(kShellWindowId_DockedContainer, w1->parent()->id()); |
1534 DockedWindowLayoutManager* manager = | 1521 DockedWindowLayoutManager* manager = |
1535 static_cast<DockedWindowLayoutManager*>(w1->parent()->layout_manager()); | 1522 static_cast<DockedWindowLayoutManager*>(w1->parent()->layout_manager()); |
1536 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); | 1523 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); |
1537 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); | 1524 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); |
1538 EXPECT_TRUE(window_state->IsDocked()); | 1525 EXPECT_TRUE(window_state->IsDocked()); |
1539 EXPECT_FALSE(window_state->IsSnapped()); | 1526 EXPECT_FALSE(window_state->IsSnapped()); |
1540 | 1527 |
1541 // Side snap at right edge. | 1528 // Side snap at right edge. |
1542 const wm::WMEvent snap_right(wm::WM_EVENT_SNAP_RIGHT); | 1529 const wm::WMEvent snap_right(wm::WM_EVENT_SNAP_RIGHT); |
1543 window_state->OnWMEvent(&snap_right); | 1530 window_state->OnWMEvent(&snap_right); |
1544 // The window should be snapped at the right edge and the dock should close. | 1531 // The window should be snapped at the right edge and the dock should close. |
1545 gfx::Rect work_area(ScreenUtil::GetDisplayWorkAreaBoundsInParent(w1.get())); | 1532 gfx::Rect work_area(ScreenUtil::GetDisplayWorkAreaBoundsInParent(w1.get())); |
1546 EXPECT_EQ(0, docked_width(manager)); | 1533 EXPECT_EQ(0, docked_width(manager)); |
1547 EXPECT_EQ(work_area.height(), w1->bounds().height()); | 1534 EXPECT_EQ(work_area.height(), w1->bounds().height()); |
1548 EXPECT_EQ(work_area.right(), w1->bounds().right()); | 1535 EXPECT_EQ(work_area.right(), w1->bounds().right()); |
1549 EXPECT_EQ(internal::kShellWindowId_DefaultContainer, w1->parent()->id()); | 1536 EXPECT_EQ(kShellWindowId_DefaultContainer, w1->parent()->id()); |
1550 EXPECT_FALSE(window_state->IsDocked()); | 1537 EXPECT_FALSE(window_state->IsDocked()); |
1551 EXPECT_TRUE(window_state->IsSnapped()); | 1538 EXPECT_TRUE(window_state->IsSnapped()); |
1552 | 1539 |
1553 // Dock again. | 1540 // Dock again. |
1554 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w1.get(), 20); | 1541 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, w1.get(), 20); |
1555 // A window should be docked at the right edge. | 1542 // A window should be docked at the right edge. |
1556 EXPECT_EQ(w1->GetRootWindow()->GetBoundsInScreen().right(), | 1543 EXPECT_EQ(w1->GetRootWindow()->GetBoundsInScreen().right(), |
1557 w1->GetBoundsInScreen().right()); | 1544 w1->GetBoundsInScreen().right()); |
1558 EXPECT_EQ(internal::kShellWindowId_DockedContainer, w1->parent()->id()); | 1545 EXPECT_EQ(kShellWindowId_DockedContainer, w1->parent()->id()); |
1559 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); | 1546 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); |
1560 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); | 1547 EXPECT_EQ(w1->bounds().width(), docked_width(manager)); |
1561 EXPECT_TRUE(window_state->IsDocked()); | 1548 EXPECT_TRUE(window_state->IsDocked()); |
1562 EXPECT_FALSE(window_state->IsSnapped()); | 1549 EXPECT_FALSE(window_state->IsSnapped()); |
1563 | 1550 |
1564 // Side snap at left edge. | 1551 // Side snap at left edge. |
1565 const wm::WMEvent snap_left(wm::WM_EVENT_SNAP_LEFT); | 1552 const wm::WMEvent snap_left(wm::WM_EVENT_SNAP_LEFT); |
1566 window_state->OnWMEvent(&snap_left); | 1553 window_state->OnWMEvent(&snap_left); |
1567 // The window should be snapped at the right edge and the dock should close. | 1554 // The window should be snapped at the right edge and the dock should close. |
1568 EXPECT_EQ(work_area.ToString(), | 1555 EXPECT_EQ(work_area.ToString(), |
1569 ScreenUtil::GetDisplayWorkAreaBoundsInParent(w1.get()).ToString()); | 1556 ScreenUtil::GetDisplayWorkAreaBoundsInParent(w1.get()).ToString()); |
1570 EXPECT_EQ(0, docked_width(manager)); | 1557 EXPECT_EQ(0, docked_width(manager)); |
1571 EXPECT_EQ(work_area.height(), w1->bounds().height()); | 1558 EXPECT_EQ(work_area.height(), w1->bounds().height()); |
1572 EXPECT_EQ(work_area.x(), w1->bounds().x()); | 1559 EXPECT_EQ(work_area.x(), w1->bounds().x()); |
1573 EXPECT_EQ(internal::kShellWindowId_DefaultContainer, w1->parent()->id()); | 1560 EXPECT_EQ(kShellWindowId_DefaultContainer, w1->parent()->id()); |
1574 EXPECT_FALSE(window_state->IsDocked()); | 1561 EXPECT_FALSE(window_state->IsDocked()); |
1575 EXPECT_TRUE(window_state->IsSnapped()); | 1562 EXPECT_TRUE(window_state->IsSnapped()); |
1576 } | 1563 } |
1577 | 1564 |
1578 // Tests that a window is undocked if the window is maximized via a keyboard | 1565 // Tests that a window is undocked if the window is maximized via a keyboard |
1579 // accelerator during a drag. | 1566 // accelerator during a drag. |
1580 TEST_P(DockedWindowResizerTest, MaximizedDuringDrag) { | 1567 TEST_P(DockedWindowResizerTest, MaximizedDuringDrag) { |
1581 if (!SupportsHostWindowResize() || test_panels()) | 1568 if (!SupportsHostWindowResize() || test_panels()) |
1582 return; | 1569 return; |
1583 | 1570 |
1584 scoped_ptr<aura::Window> window(CreateTestWindow( | 1571 scoped_ptr<aura::Window> window(CreateTestWindow( |
1585 gfx::Rect(0, 0, ideal_width(), 201))); | 1572 gfx::Rect(0, 0, ideal_width(), 201))); |
1586 wm::WindowState* window_state = wm::GetWindowState(window.get()); | 1573 wm::WindowState* window_state = wm::GetWindowState(window.get()); |
1587 | 1574 |
1588 // Dock the window to the right edge. | 1575 // Dock the window to the right edge. |
1589 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, window.get(), 20); | 1576 DragToVerticalPositionAndToEdge(DOCKED_EDGE_RIGHT, window.get(), 20); |
1590 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().right(), | 1577 EXPECT_EQ(window->GetRootWindow()->GetBoundsInScreen().right(), |
1591 window->GetBoundsInScreen().right()); | 1578 window->GetBoundsInScreen().right()); |
1592 EXPECT_EQ(internal::kShellWindowId_DockedContainer, window->parent()->id()); | 1579 EXPECT_EQ(kShellWindowId_DockedContainer, window->parent()->id()); |
1593 DockedWindowLayoutManager* manager = | 1580 DockedWindowLayoutManager* manager = |
1594 static_cast<DockedWindowLayoutManager*>( | 1581 static_cast<DockedWindowLayoutManager*>( |
1595 window->parent()->layout_manager()); | 1582 window->parent()->layout_manager()); |
1596 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); | 1583 EXPECT_EQ(DOCKED_ALIGNMENT_RIGHT, docked_alignment(manager)); |
1597 EXPECT_EQ(window->bounds().width(), docked_width(manager)); | 1584 EXPECT_EQ(window->bounds().width(), docked_width(manager)); |
1598 EXPECT_TRUE(window_state->IsDocked()); | 1585 EXPECT_TRUE(window_state->IsDocked()); |
1599 | 1586 |
1600 // Maximize the window while in a real drag. In particular, | 1587 // Maximize the window while in a real drag. In particular, |
1601 // ToplevelWindowEventHandler::ScopedWindowResizer::OnWindowStateTypeChanged() | 1588 // ToplevelWindowEventHandler::ScopedWindowResizer::OnWindowStateTypeChanged() |
1602 // must be called in order for the maximized window's size to be correct. | 1589 // must be called in order for the maximized window's size to be correct. |
1603 delegate()->set_window_component(HTCAPTION); | 1590 delegate()->set_window_component(HTCAPTION); |
1604 aura::test::EventGenerator& generator = GetEventGenerator(); | 1591 aura::test::EventGenerator& generator = GetEventGenerator(); |
1605 generator.MoveMouseTo(window->GetBoundsInScreen().origin()); | 1592 generator.MoveMouseTo(window->GetBoundsInScreen().origin()); |
1606 generator.PressLeftButton(); | 1593 generator.PressLeftButton(); |
1607 generator.MoveMouseBy(10, 10); | 1594 generator.MoveMouseBy(10, 10); |
1608 window_state->Maximize(); | 1595 window_state->Maximize(); |
1609 generator.ReleaseLeftButton(); | 1596 generator.ReleaseLeftButton(); |
1610 | 1597 |
1611 // |window| should get undocked. | 1598 // |window| should get undocked. |
1612 EXPECT_EQ(internal::kShellWindowId_DefaultContainer, window->parent()->id()); | 1599 EXPECT_EQ(kShellWindowId_DefaultContainer, window->parent()->id()); |
1613 EXPECT_EQ(0, docked_width(manager)); | 1600 EXPECT_EQ(0, docked_width(manager)); |
1614 EXPECT_EQ( | 1601 EXPECT_EQ( |
1615 ScreenUtil::GetMaximizedWindowBoundsInParent(window.get()).ToString(), | 1602 ScreenUtil::GetMaximizedWindowBoundsInParent(window.get()).ToString(), |
1616 window->bounds().ToString()); | 1603 window->bounds().ToString()); |
1617 EXPECT_TRUE(window_state->IsMaximized()); | 1604 EXPECT_TRUE(window_state->IsMaximized()); |
1618 } | 1605 } |
1619 | 1606 |
1620 // Tests run twice - on both panels and normal windows | 1607 // Tests run twice - on both panels and normal windows |
1621 INSTANTIATE_TEST_CASE_P(NormalOrPanel, | 1608 INSTANTIATE_TEST_CASE_P(NormalOrPanel, |
1622 DockedWindowResizerTest, | 1609 DockedWindowResizerTest, |
1623 testing::Values(ui::wm::WINDOW_TYPE_NORMAL, | 1610 testing::Values(ui::wm::WINDOW_TYPE_NORMAL, |
1624 ui::wm::WINDOW_TYPE_PANEL)); | 1611 ui::wm::WINDOW_TYPE_PANEL)); |
1625 } // namespace internal | 1612 |
1626 } // namespace ash | 1613 } // namespace ash |
OLD | NEW |