OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/workspace/workspace_event_handler.h" | 5 #include "ash/wm/workspace/workspace_event_handler.h" |
6 | 6 |
7 #include "ash/screen_util.h" | 7 #include "ash/screen_util.h" |
8 #include "ash/shell.h" | 8 #include "ash/shell.h" |
9 #include "ash/test/ash_test_base.h" | 9 #include "ash/test/ash_test_base.h" |
10 #include "ash/wm/window_state.h" | 10 #include "ash/wm/window_state.h" |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 std::vector<const void*> properties_changed_; | 96 std::vector<const void*> properties_changed_; |
97 | 97 |
98 DISALLOW_COPY_AND_ASSIGN(WindowPropertyObserver); | 98 DISALLOW_COPY_AND_ASSIGN(WindowPropertyObserver); |
99 }; | 99 }; |
100 | 100 |
101 TEST_F(WorkspaceEventHandlerTest, DoubleClickSingleAxisResizeEdge) { | 101 TEST_F(WorkspaceEventHandlerTest, DoubleClickSingleAxisResizeEdge) { |
102 // Double clicking the vertical resize edge of a window should maximize it | 102 // Double clicking the vertical resize edge of a window should maximize it |
103 // vertically. | 103 // vertically. |
104 gfx::Rect restored_bounds(10, 10, 50, 50); | 104 gfx::Rect restored_bounds(10, 10, 50, 50); |
105 aura::test::TestWindowDelegate delegate; | 105 aura::test::TestWindowDelegate delegate; |
106 scoped_ptr<aura::Window> window(CreateTestWindow(&delegate, restored_bounds)); | 106 std::unique_ptr<aura::Window> window( |
| 107 CreateTestWindow(&delegate, restored_bounds)); |
107 | 108 |
108 wm::ActivateWindow(window.get()); | 109 wm::ActivateWindow(window.get()); |
109 | 110 |
110 gfx::Rect work_area = gfx::Screen::GetScreen() | 111 gfx::Rect work_area = gfx::Screen::GetScreen() |
111 ->GetDisplayNearestWindow(window.get()) | 112 ->GetDisplayNearestWindow(window.get()) |
112 .work_area(); | 113 .work_area(); |
113 | 114 |
114 ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), | 115 ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), |
115 window.get()); | 116 window.get()); |
116 | 117 |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
205 | 206 |
206 // Restore. | 207 // Restore. |
207 generator2.DoubleClickLeftButton(); | 208 generator2.DoubleClickLeftButton(); |
208 EXPECT_EQ(restored_bounds.ToString(), window->GetBoundsInScreen().ToString()); | 209 EXPECT_EQ(restored_bounds.ToString(), window->GetBoundsInScreen().ToString()); |
209 } | 210 } |
210 | 211 |
211 // Tests the behavior when double clicking the border of a side snapped window. | 212 // Tests the behavior when double clicking the border of a side snapped window. |
212 TEST_F(WorkspaceEventHandlerTest, DoubleClickSingleAxisWhenSideSnapped) { | 213 TEST_F(WorkspaceEventHandlerTest, DoubleClickSingleAxisWhenSideSnapped) { |
213 gfx::Rect restored_bounds(10, 10, 50, 50); | 214 gfx::Rect restored_bounds(10, 10, 50, 50); |
214 aura::test::TestWindowDelegate delegate; | 215 aura::test::TestWindowDelegate delegate; |
215 scoped_ptr<aura::Window> window(CreateTestWindow(&delegate, restored_bounds)); | 216 std::unique_ptr<aura::Window> window( |
| 217 CreateTestWindow(&delegate, restored_bounds)); |
216 | 218 |
217 gfx::Rect work_area_in_screen = gfx::Screen::GetScreen() | 219 gfx::Rect work_area_in_screen = gfx::Screen::GetScreen() |
218 ->GetDisplayNearestWindow(window.get()) | 220 ->GetDisplayNearestWindow(window.get()) |
219 .work_area(); | 221 .work_area(); |
220 | 222 |
221 wm::WindowState* window_state = wm::GetWindowState(window.get()); | 223 wm::WindowState* window_state = wm::GetWindowState(window.get()); |
222 const wm::WMEvent snap_event(wm::WM_EVENT_SNAP_LEFT); | 224 const wm::WMEvent snap_event(wm::WM_EVENT_SNAP_LEFT); |
223 window_state->OnWMEvent(&snap_event); | 225 window_state->OnWMEvent(&snap_event); |
224 | 226 |
225 gfx::Rect snapped_bounds_in_screen = window->GetBoundsInScreen(); | 227 gfx::Rect snapped_bounds_in_screen = window->GetBoundsInScreen(); |
(...skipping 19 matching lines...) Expand all Loading... |
245 generator.DoubleClickLeftButton(); | 247 generator.DoubleClickLeftButton(); |
246 EXPECT_TRUE(window_state->IsNormalStateType()); | 248 EXPECT_TRUE(window_state->IsNormalStateType()); |
247 EXPECT_EQ(work_area_in_screen.ToString(), | 249 EXPECT_EQ(work_area_in_screen.ToString(), |
248 window->GetBoundsInScreen().ToString()); | 250 window->GetBoundsInScreen().ToString()); |
249 } | 251 } |
250 | 252 |
251 TEST_F(WorkspaceEventHandlerTest, | 253 TEST_F(WorkspaceEventHandlerTest, |
252 DoubleClickSingleAxisDoesntResizeVerticalEdgeIfConstrained) { | 254 DoubleClickSingleAxisDoesntResizeVerticalEdgeIfConstrained) { |
253 gfx::Rect restored_bounds(10, 10, 50, 50); | 255 gfx::Rect restored_bounds(10, 10, 50, 50); |
254 aura::test::TestWindowDelegate delegate; | 256 aura::test::TestWindowDelegate delegate; |
255 scoped_ptr<aura::Window> window(CreateTestWindow(&delegate, restored_bounds)); | 257 std::unique_ptr<aura::Window> window( |
| 258 CreateTestWindow(&delegate, restored_bounds)); |
256 | 259 |
257 wm::ActivateWindow(window.get()); | 260 wm::ActivateWindow(window.get()); |
258 | 261 |
259 gfx::Rect work_area = gfx::Screen::GetScreen() | 262 gfx::Rect work_area = gfx::Screen::GetScreen() |
260 ->GetDisplayNearestWindow(window.get()) | 263 ->GetDisplayNearestWindow(window.get()) |
261 .work_area(); | 264 .work_area(); |
262 | 265 |
263 delegate.set_maximum_size(gfx::Size(0, 100)); | 266 delegate.set_maximum_size(gfx::Size(0, 100)); |
264 | 267 |
265 ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), | 268 ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), |
266 window.get()); | 269 window.get()); |
267 // Double-click the top resize edge. | 270 // Double-click the top resize edge. |
268 delegate.set_window_component(HTTOP); | 271 delegate.set_window_component(HTTOP); |
269 generator.DoubleClickLeftButton(); | 272 generator.DoubleClickLeftButton(); |
270 | 273 |
271 // The size of the window should be unchanged. | 274 // The size of the window should be unchanged. |
272 EXPECT_EQ(restored_bounds.y(), window->bounds().y()); | 275 EXPECT_EQ(restored_bounds.y(), window->bounds().y()); |
273 EXPECT_EQ(restored_bounds.height(), window->bounds().height()); | 276 EXPECT_EQ(restored_bounds.height(), window->bounds().height()); |
274 } | 277 } |
275 | 278 |
276 TEST_F(WorkspaceEventHandlerTest, | 279 TEST_F(WorkspaceEventHandlerTest, |
277 DoubleClickSingleAxisDoesntResizeHorizontalEdgeIfConstrained) { | 280 DoubleClickSingleAxisDoesntResizeHorizontalEdgeIfConstrained) { |
278 gfx::Rect restored_bounds(10, 10, 50, 50); | 281 gfx::Rect restored_bounds(10, 10, 50, 50); |
279 aura::test::TestWindowDelegate delegate; | 282 aura::test::TestWindowDelegate delegate; |
280 scoped_ptr<aura::Window> window(CreateTestWindow(&delegate, restored_bounds)); | 283 std::unique_ptr<aura::Window> window( |
| 284 CreateTestWindow(&delegate, restored_bounds)); |
281 | 285 |
282 wm::ActivateWindow(window.get()); | 286 wm::ActivateWindow(window.get()); |
283 | 287 |
284 gfx::Rect work_area = gfx::Screen::GetScreen() | 288 gfx::Rect work_area = gfx::Screen::GetScreen() |
285 ->GetDisplayNearestWindow(window.get()) | 289 ->GetDisplayNearestWindow(window.get()) |
286 .work_area(); | 290 .work_area(); |
287 | 291 |
288 delegate.set_maximum_size(gfx::Size(100, 0)); | 292 delegate.set_maximum_size(gfx::Size(100, 0)); |
289 | 293 |
290 ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), | 294 ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), |
291 window.get()); | 295 window.get()); |
292 // Double-click the top resize edge. | 296 // Double-click the top resize edge. |
293 delegate.set_window_component(HTRIGHT); | 297 delegate.set_window_component(HTRIGHT); |
294 generator.DoubleClickLeftButton(); | 298 generator.DoubleClickLeftButton(); |
295 | 299 |
296 // The size of the window should be unchanged. | 300 // The size of the window should be unchanged. |
297 EXPECT_EQ(restored_bounds.x(), window->bounds().x()); | 301 EXPECT_EQ(restored_bounds.x(), window->bounds().x()); |
298 EXPECT_EQ(restored_bounds.width(), window->bounds().width()); | 302 EXPECT_EQ(restored_bounds.width(), window->bounds().width()); |
299 } | 303 } |
300 | 304 |
301 TEST_F(WorkspaceEventHandlerTest, | 305 TEST_F(WorkspaceEventHandlerTest, |
302 DoubleClickOrTapWithModalChildDoesntMaximize) { | 306 DoubleClickOrTapWithModalChildDoesntMaximize) { |
303 aura::test::TestWindowDelegate delegate1; | 307 aura::test::TestWindowDelegate delegate1; |
304 aura::test::TestWindowDelegate delegate2; | 308 aura::test::TestWindowDelegate delegate2; |
305 scoped_ptr<aura::Window> window( | 309 std::unique_ptr<aura::Window> window( |
306 CreateTestWindow(&delegate1, gfx::Rect(10, 20, 30, 40))); | 310 CreateTestWindow(&delegate1, gfx::Rect(10, 20, 30, 40))); |
307 scoped_ptr<aura::Window> child( | 311 std::unique_ptr<aura::Window> child( |
308 CreateTestWindow(&delegate2, gfx::Rect(0, 0, 1, 1))); | 312 CreateTestWindow(&delegate2, gfx::Rect(0, 0, 1, 1))); |
309 window->SetProperty(aura::client::kCanMaximizeKey, true); | 313 window->SetProperty(aura::client::kCanMaximizeKey, true); |
310 delegate1.set_window_component(HTCAPTION); | 314 delegate1.set_window_component(HTCAPTION); |
311 | 315 |
312 child->SetProperty(aura::client::kModalKey, ui::MODAL_TYPE_WINDOW); | 316 child->SetProperty(aura::client::kModalKey, ui::MODAL_TYPE_WINDOW); |
313 ::wm::AddTransientChild(window.get(), child.get()); | 317 ::wm::AddTransientChild(window.get(), child.get()); |
314 | 318 |
315 wm::WindowState* window_state = wm::GetWindowState(window.get()); | 319 wm::WindowState* window_state = wm::GetWindowState(window.get()); |
316 EXPECT_FALSE(window_state->IsMaximized()); | 320 EXPECT_FALSE(window_state->IsMaximized()); |
317 aura::Window* root = Shell::GetPrimaryRootWindow(); | 321 aura::Window* root = Shell::GetPrimaryRootWindow(); |
318 ui::test::EventGenerator generator(root, window.get()); | 322 ui::test::EventGenerator generator(root, window.get()); |
319 generator.DoubleClickLeftButton(); | 323 generator.DoubleClickLeftButton(); |
320 EXPECT_EQ("10,20 30x40", window->bounds().ToString()); | 324 EXPECT_EQ("10,20 30x40", window->bounds().ToString()); |
321 EXPECT_FALSE(window_state->IsMaximized()); | 325 EXPECT_FALSE(window_state->IsMaximized()); |
322 | 326 |
323 generator.GestureTapAt(gfx::Point(25, 25)); | 327 generator.GestureTapAt(gfx::Point(25, 25)); |
324 generator.GestureTapAt(gfx::Point(25, 25)); | 328 generator.GestureTapAt(gfx::Point(25, 25)); |
325 RunAllPendingInMessageLoop(); | 329 RunAllPendingInMessageLoop(); |
326 EXPECT_EQ("10,20 30x40", window->bounds().ToString()); | 330 EXPECT_EQ("10,20 30x40", window->bounds().ToString()); |
327 EXPECT_FALSE(window_state->IsMaximized()); | 331 EXPECT_FALSE(window_state->IsMaximized()); |
328 } | 332 } |
329 | 333 |
330 // Test the behavior as a result of double clicking the window header. | 334 // Test the behavior as a result of double clicking the window header. |
331 TEST_F(WorkspaceEventHandlerTest, DoubleClickCaptionTogglesMaximize) { | 335 TEST_F(WorkspaceEventHandlerTest, DoubleClickCaptionTogglesMaximize) { |
332 aura::test::TestWindowDelegate delegate; | 336 aura::test::TestWindowDelegate delegate; |
333 scoped_ptr<aura::Window> window( | 337 std::unique_ptr<aura::Window> window( |
334 CreateTestWindow(&delegate, gfx::Rect(1, 2, 30, 40))); | 338 CreateTestWindow(&delegate, gfx::Rect(1, 2, 30, 40))); |
335 window->SetProperty(aura::client::kCanMaximizeKey, true); | 339 window->SetProperty(aura::client::kCanMaximizeKey, true); |
336 | 340 |
337 wm::WindowState* window_state = wm::GetWindowState(window.get()); | 341 wm::WindowState* window_state = wm::GetWindowState(window.get()); |
338 gfx::Rect restore_bounds = window->bounds(); | 342 gfx::Rect restore_bounds = window->bounds(); |
339 gfx::Rect work_area_in_parent = ScreenUtil::GetDisplayWorkAreaBoundsInParent( | 343 gfx::Rect work_area_in_parent = ScreenUtil::GetDisplayWorkAreaBoundsInParent( |
340 window.get()); | 344 window.get()); |
341 | 345 |
342 EXPECT_FALSE(window_state->IsMaximized()); | 346 EXPECT_FALSE(window_state->IsMaximized()); |
343 | 347 |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
381 generator.DoubleClickLeftButton(); | 385 generator.DoubleClickLeftButton(); |
382 EXPECT_TRUE(window_state->IsNormalStateType()); | 386 EXPECT_TRUE(window_state->IsNormalStateType()); |
383 EXPECT_EQ(restore_bounds.ToString(), window->bounds().ToString()); | 387 EXPECT_EQ(restore_bounds.ToString(), window->bounds().ToString()); |
384 } | 388 } |
385 | 389 |
386 // Test that double clicking the middle button on the window header does not | 390 // Test that double clicking the middle button on the window header does not |
387 // toggle the maximized state. | 391 // toggle the maximized state. |
388 TEST_F(WorkspaceEventHandlerTest, | 392 TEST_F(WorkspaceEventHandlerTest, |
389 DoubleClickMiddleButtonDoesNotToggleMaximize) { | 393 DoubleClickMiddleButtonDoesNotToggleMaximize) { |
390 aura::test::TestWindowDelegate delegate; | 394 aura::test::TestWindowDelegate delegate; |
391 scoped_ptr<aura::Window> window( | 395 std::unique_ptr<aura::Window> window( |
392 CreateTestWindow(&delegate, gfx::Rect(1, 2, 30, 40))); | 396 CreateTestWindow(&delegate, gfx::Rect(1, 2, 30, 40))); |
393 window->SetProperty(aura::client::kCanMaximizeKey, true); | 397 window->SetProperty(aura::client::kCanMaximizeKey, true); |
394 delegate.set_window_component(HTCAPTION); | 398 delegate.set_window_component(HTCAPTION); |
395 aura::Window* root = Shell::GetPrimaryRootWindow(); | 399 aura::Window* root = Shell::GetPrimaryRootWindow(); |
396 ui::test::EventGenerator generator(root, window.get()); | 400 ui::test::EventGenerator generator(root, window.get()); |
397 | 401 |
398 WindowPropertyObserver observer(window.get()); | 402 WindowPropertyObserver observer(window.get()); |
399 ClickButtonWithFlags(&generator, ui::EF_MIDDLE_MOUSE_BUTTON, ui::EF_NONE); | 403 ClickButtonWithFlags(&generator, ui::EF_MIDDLE_MOUSE_BUTTON, ui::EF_NONE); |
400 ClickButtonWithFlags(&generator, ui::EF_MIDDLE_MOUSE_BUTTON, | 404 ClickButtonWithFlags(&generator, ui::EF_MIDDLE_MOUSE_BUTTON, |
401 ui::EF_IS_DOUBLE_CLICK); | 405 ui::EF_IS_DOUBLE_CLICK); |
402 | 406 |
403 EXPECT_FALSE(wm::GetWindowState(window.get())->IsMaximized()); | 407 EXPECT_FALSE(wm::GetWindowState(window.get())->IsMaximized()); |
404 EXPECT_EQ("1,2 30x40", window->bounds().ToString()); | 408 EXPECT_EQ("1,2 30x40", window->bounds().ToString()); |
405 EXPECT_FALSE(observer.DidPropertyChange(aura::client::kShowStateKey)); | 409 EXPECT_FALSE(observer.DidPropertyChange(aura::client::kShowStateKey)); |
406 } | 410 } |
407 | 411 |
408 TEST_F(WorkspaceEventHandlerTest, DoubleTapCaptionTogglesMaximize) { | 412 TEST_F(WorkspaceEventHandlerTest, DoubleTapCaptionTogglesMaximize) { |
409 aura::test::TestWindowDelegate delegate; | 413 aura::test::TestWindowDelegate delegate; |
410 gfx::Rect bounds(10, 20, 30, 40); | 414 gfx::Rect bounds(10, 20, 30, 40); |
411 scoped_ptr<aura::Window> window(CreateTestWindow(&delegate, bounds)); | 415 std::unique_ptr<aura::Window> window(CreateTestWindow(&delegate, bounds)); |
412 window->SetProperty(aura::client::kCanMaximizeKey, true); | 416 window->SetProperty(aura::client::kCanMaximizeKey, true); |
413 delegate.set_window_component(HTCAPTION); | 417 delegate.set_window_component(HTCAPTION); |
414 | 418 |
415 wm::WindowState* window_state = wm::GetWindowState(window.get()); | 419 wm::WindowState* window_state = wm::GetWindowState(window.get()); |
416 EXPECT_FALSE(window_state->IsMaximized()); | 420 EXPECT_FALSE(window_state->IsMaximized()); |
417 ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), | 421 ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), |
418 window.get()); | 422 window.get()); |
419 generator.GestureTapAt(gfx::Point(25, 25)); | 423 generator.GestureTapAt(gfx::Point(25, 25)); |
420 generator.GestureTapAt(gfx::Point(25, 25)); | 424 generator.GestureTapAt(gfx::Point(25, 25)); |
421 RunAllPendingInMessageLoop(); | 425 RunAllPendingInMessageLoop(); |
422 EXPECT_NE(bounds.ToString(), window->bounds().ToString()); | 426 EXPECT_NE(bounds.ToString(), window->bounds().ToString()); |
423 EXPECT_TRUE(window_state->IsMaximized()); | 427 EXPECT_TRUE(window_state->IsMaximized()); |
424 | 428 |
425 generator.GestureTapAt(gfx::Point(5, 5)); | 429 generator.GestureTapAt(gfx::Point(5, 5)); |
426 generator.GestureTapAt(gfx::Point(10, 10)); | 430 generator.GestureTapAt(gfx::Point(10, 10)); |
427 | 431 |
428 EXPECT_FALSE(window_state->IsMaximized()); | 432 EXPECT_FALSE(window_state->IsMaximized()); |
429 EXPECT_EQ(bounds.ToString(), window->bounds().ToString()); | 433 EXPECT_EQ(bounds.ToString(), window->bounds().ToString()); |
430 } | 434 } |
431 | 435 |
432 // Verifies deleting the window while dragging doesn't crash. | 436 // Verifies deleting the window while dragging doesn't crash. |
433 TEST_F(WorkspaceEventHandlerTest, DeleteWhenDragging) { | 437 TEST_F(WorkspaceEventHandlerTest, DeleteWhenDragging) { |
434 // Create a large window in the background. This is necessary so that when we | 438 // Create a large window in the background. This is necessary so that when we |
435 // delete |window| WorkspaceEventHandler is still the active event handler. | 439 // delete |window| WorkspaceEventHandler is still the active event handler. |
436 aura::test::TestWindowDelegate delegate2; | 440 aura::test::TestWindowDelegate delegate2; |
437 scoped_ptr<aura::Window> window2( | 441 std::unique_ptr<aura::Window> window2( |
438 CreateTestWindow(&delegate2, gfx::Rect(0, 0, 500, 500))); | 442 CreateTestWindow(&delegate2, gfx::Rect(0, 0, 500, 500))); |
439 | 443 |
440 aura::test::TestWindowDelegate delegate; | 444 aura::test::TestWindowDelegate delegate; |
441 const gfx::Rect bounds(10, 20, 30, 40); | 445 const gfx::Rect bounds(10, 20, 30, 40); |
442 scoped_ptr<aura::Window> window(CreateTestWindow(&delegate, bounds)); | 446 std::unique_ptr<aura::Window> window(CreateTestWindow(&delegate, bounds)); |
443 delegate.set_window_component(HTCAPTION); | 447 delegate.set_window_component(HTCAPTION); |
444 ui::test::EventGenerator generator(window->GetRootWindow()); | 448 ui::test::EventGenerator generator(window->GetRootWindow()); |
445 generator.MoveMouseToCenterOf(window.get()); | 449 generator.MoveMouseToCenterOf(window.get()); |
446 generator.PressLeftButton(); | 450 generator.PressLeftButton(); |
447 generator.MoveMouseTo(generator.current_location() + gfx::Vector2d(50, 50)); | 451 generator.MoveMouseTo(generator.current_location() + gfx::Vector2d(50, 50)); |
448 DCHECK_NE(bounds.origin().ToString(), window->bounds().origin().ToString()); | 452 DCHECK_NE(bounds.origin().ToString(), window->bounds().origin().ToString()); |
449 window.reset(); | 453 window.reset(); |
450 generator.MoveMouseTo(generator.current_location() + gfx::Vector2d(50, 50)); | 454 generator.MoveMouseTo(generator.current_location() + gfx::Vector2d(50, 50)); |
451 } | 455 } |
452 | 456 |
453 // Verifies deleting the window while in a run loop doesn't crash. | 457 // Verifies deleting the window while in a run loop doesn't crash. |
454 TEST_F(WorkspaceEventHandlerTest, DeleteWhileInRunLoop) { | 458 TEST_F(WorkspaceEventHandlerTest, DeleteWhileInRunLoop) { |
455 aura::test::TestWindowDelegate delegate; | 459 aura::test::TestWindowDelegate delegate; |
456 const gfx::Rect bounds(10, 20, 30, 40); | 460 const gfx::Rect bounds(10, 20, 30, 40); |
457 scoped_ptr<aura::Window> window(CreateTestWindow(&delegate, bounds)); | 461 std::unique_ptr<aura::Window> window(CreateTestWindow(&delegate, bounds)); |
458 delegate.set_window_component(HTCAPTION); | 462 delegate.set_window_component(HTCAPTION); |
459 | 463 |
460 ASSERT_TRUE(aura::client::GetWindowMoveClient(window->GetRootWindow())); | 464 ASSERT_TRUE(aura::client::GetWindowMoveClient(window->GetRootWindow())); |
461 base::ThreadTaskRunnerHandle::Get()->DeleteSoon(FROM_HERE, window.get()); | 465 base::ThreadTaskRunnerHandle::Get()->DeleteSoon(FROM_HERE, window.get()); |
462 aura::client::GetWindowMoveClient(window->GetRootWindow()) | 466 aura::client::GetWindowMoveClient(window->GetRootWindow()) |
463 ->RunMoveLoop(window.release(), | 467 ->RunMoveLoop(window.release(), |
464 gfx::Vector2d(), | 468 gfx::Vector2d(), |
465 aura::client::WINDOW_MOVE_SOURCE_MOUSE); | 469 aura::client::WINDOW_MOVE_SOURCE_MOUSE); |
466 } | 470 } |
467 | 471 |
468 // Verifies that double clicking in the header does not maximize if the target | 472 // Verifies that double clicking in the header does not maximize if the target |
469 // component has changed. | 473 // component has changed. |
470 TEST_F(WorkspaceEventHandlerTest, | 474 TEST_F(WorkspaceEventHandlerTest, |
471 DoubleClickTwoDifferentTargetsDoesntMaximize) { | 475 DoubleClickTwoDifferentTargetsDoesntMaximize) { |
472 aura::test::TestWindowDelegate delegate; | 476 aura::test::TestWindowDelegate delegate; |
473 scoped_ptr<aura::Window> window( | 477 std::unique_ptr<aura::Window> window( |
474 CreateTestWindow(&delegate, gfx::Rect(1, 2, 30, 40))); | 478 CreateTestWindow(&delegate, gfx::Rect(1, 2, 30, 40))); |
475 window->SetProperty(aura::client::kCanMaximizeKey, true); | 479 window->SetProperty(aura::client::kCanMaximizeKey, true); |
476 | 480 |
477 wm::WindowState* window_state = wm::GetWindowState(window.get()); | 481 wm::WindowState* window_state = wm::GetWindowState(window.get()); |
478 gfx::Rect restore_bounds = window->bounds(); | 482 gfx::Rect restore_bounds = window->bounds(); |
479 gfx::Rect work_area_in_parent = ScreenUtil::GetDisplayWorkAreaBoundsInParent( | 483 gfx::Rect work_area_in_parent = ScreenUtil::GetDisplayWorkAreaBoundsInParent( |
480 window.get()); | 484 window.get()); |
481 | 485 |
482 EXPECT_FALSE(window_state->IsMaximized()); | 486 EXPECT_FALSE(window_state->IsMaximized()); |
483 | 487 |
484 // First click will go to a client | 488 // First click will go to a client |
485 delegate.set_window_component(HTCLIENT); | 489 delegate.set_window_component(HTCLIENT); |
486 aura::Window* root = Shell::GetPrimaryRootWindow(); | 490 aura::Window* root = Shell::GetPrimaryRootWindow(); |
487 ui::test::EventGenerator generator(root, window.get()); | 491 ui::test::EventGenerator generator(root, window.get()); |
488 generator.ClickLeftButton(); | 492 generator.ClickLeftButton(); |
489 EXPECT_FALSE(window_state->IsMaximized()); | 493 EXPECT_FALSE(window_state->IsMaximized()); |
490 | 494 |
491 // Second click will go to the header | 495 // Second click will go to the header |
492 delegate.set_window_component(HTCAPTION); | 496 delegate.set_window_component(HTCAPTION); |
493 ClickButtonWithFlags(&generator, ui::EF_LEFT_MOUSE_BUTTON, | 497 ClickButtonWithFlags(&generator, ui::EF_LEFT_MOUSE_BUTTON, |
494 ui::EF_IS_DOUBLE_CLICK); | 498 ui::EF_IS_DOUBLE_CLICK); |
495 EXPECT_FALSE(window_state->IsMaximized()); | 499 EXPECT_FALSE(window_state->IsMaximized()); |
496 } | 500 } |
497 | 501 |
498 // Verifies that double tapping in the header does not maximize if the target | 502 // Verifies that double tapping in the header does not maximize if the target |
499 // component has changed. | 503 // component has changed. |
500 TEST_F(WorkspaceEventHandlerTest, DoubleTapTwoDifferentTargetsDoesntMaximize) { | 504 TEST_F(WorkspaceEventHandlerTest, DoubleTapTwoDifferentTargetsDoesntMaximize) { |
501 aura::test::TestWindowDelegate delegate; | 505 aura::test::TestWindowDelegate delegate; |
502 scoped_ptr<aura::Window> window( | 506 std::unique_ptr<aura::Window> window( |
503 CreateTestWindow(&delegate, gfx::Rect(1, 2, 30, 40))); | 507 CreateTestWindow(&delegate, gfx::Rect(1, 2, 30, 40))); |
504 window->SetProperty(aura::client::kCanMaximizeKey, true); | 508 window->SetProperty(aura::client::kCanMaximizeKey, true); |
505 | 509 |
506 wm::WindowState* window_state = wm::GetWindowState(window.get()); | 510 wm::WindowState* window_state = wm::GetWindowState(window.get()); |
507 gfx::Rect restore_bounds = window->bounds(); | 511 gfx::Rect restore_bounds = window->bounds(); |
508 gfx::Rect work_area_in_parent = ScreenUtil::GetDisplayWorkAreaBoundsInParent( | 512 gfx::Rect work_area_in_parent = ScreenUtil::GetDisplayWorkAreaBoundsInParent( |
509 window.get()); | 513 window.get()); |
510 | 514 |
511 EXPECT_FALSE(window_state->IsMaximized()); | 515 EXPECT_FALSE(window_state->IsMaximized()); |
512 | 516 |
513 // First tap will go to a client | 517 // First tap will go to a client |
514 delegate.set_window_component(HTCLIENT); | 518 delegate.set_window_component(HTCLIENT); |
515 aura::Window* root = Shell::GetPrimaryRootWindow(); | 519 aura::Window* root = Shell::GetPrimaryRootWindow(); |
516 ui::test::EventGenerator generator(root, window.get()); | 520 ui::test::EventGenerator generator(root, window.get()); |
517 generator.GestureTapAt(gfx::Point(25, 25)); | 521 generator.GestureTapAt(gfx::Point(25, 25)); |
518 EXPECT_FALSE(window_state->IsMaximized()); | 522 EXPECT_FALSE(window_state->IsMaximized()); |
519 | 523 |
520 // Second tap will go to the header | 524 // Second tap will go to the header |
521 delegate.set_window_component(HTCAPTION); | 525 delegate.set_window_component(HTCAPTION); |
522 generator.GestureTapAt(gfx::Point(25, 25)); | 526 generator.GestureTapAt(gfx::Point(25, 25)); |
523 EXPECT_FALSE(window_state->IsMaximized()); | 527 EXPECT_FALSE(window_state->IsMaximized()); |
524 } | 528 } |
525 | 529 |
526 TEST_F(WorkspaceEventHandlerTest, | 530 TEST_F(WorkspaceEventHandlerTest, |
527 RightClickDuringDoubleClickDoesntMaximize) { | 531 RightClickDuringDoubleClickDoesntMaximize) { |
528 aura::test::TestWindowDelegate delegate; | 532 aura::test::TestWindowDelegate delegate; |
529 scoped_ptr<aura::Window> window( | 533 std::unique_ptr<aura::Window> window( |
530 CreateTestWindow(&delegate, gfx::Rect(1, 2, 30, 40))); | 534 CreateTestWindow(&delegate, gfx::Rect(1, 2, 30, 40))); |
531 window->SetProperty(aura::client::kCanMaximizeKey, true); | 535 window->SetProperty(aura::client::kCanMaximizeKey, true); |
532 | 536 |
533 wm::WindowState* window_state = wm::GetWindowState(window.get()); | 537 wm::WindowState* window_state = wm::GetWindowState(window.get()); |
534 gfx::Rect restore_bounds = window->bounds(); | 538 gfx::Rect restore_bounds = window->bounds(); |
535 gfx::Rect work_area_in_parent = ScreenUtil::GetDisplayWorkAreaBoundsInParent( | 539 gfx::Rect work_area_in_parent = ScreenUtil::GetDisplayWorkAreaBoundsInParent( |
536 window.get()); | 540 window.get()); |
537 | 541 |
538 EXPECT_FALSE(window_state->IsMaximized()); | 542 EXPECT_FALSE(window_state->IsMaximized()); |
539 | 543 |
540 // First click will go to a client | 544 // First click will go to a client |
541 delegate.set_window_component(HTCLIENT); | 545 delegate.set_window_component(HTCLIENT); |
542 aura::Window* root = Shell::GetPrimaryRootWindow(); | 546 aura::Window* root = Shell::GetPrimaryRootWindow(); |
543 ui::test::EventGenerator generator(root, window.get()); | 547 ui::test::EventGenerator generator(root, window.get()); |
544 generator.ClickLeftButton(); | 548 generator.ClickLeftButton(); |
545 EXPECT_FALSE(window_state->IsMaximized()); | 549 EXPECT_FALSE(window_state->IsMaximized()); |
546 | 550 |
547 // Second click will go to the header | 551 // Second click will go to the header |
548 delegate.set_window_component(HTCAPTION); | 552 delegate.set_window_component(HTCAPTION); |
549 generator.PressRightButton(); | 553 generator.PressRightButton(); |
550 generator.ReleaseRightButton(); | 554 generator.ReleaseRightButton(); |
551 EXPECT_FALSE(window_state->IsMaximized()); | 555 EXPECT_FALSE(window_state->IsMaximized()); |
552 ClickButtonWithFlags(&generator, ui::EF_LEFT_MOUSE_BUTTON, | 556 ClickButtonWithFlags(&generator, ui::EF_LEFT_MOUSE_BUTTON, |
553 ui::EF_IS_DOUBLE_CLICK); | 557 ui::EF_IS_DOUBLE_CLICK); |
554 EXPECT_FALSE(window_state->IsMaximized()); | 558 EXPECT_FALSE(window_state->IsMaximized()); |
555 } | 559 } |
556 | 560 |
557 } // namespace ash | 561 } // namespace ash |
OLD | NEW |