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/toplevel_window_event_handler.h" | 5 #include "ash/wm/toplevel_window_event_handler.h" |
6 | 6 |
7 #include "ash/shell.h" | 7 #include "ash/shell.h" |
8 #include "ash/wm/property_util.h" | 8 #include "ash/wm/property_util.h" |
9 #include "ash/wm/resize_shadow_controller.h" | 9 #include "ash/wm/resize_shadow_controller.h" |
10 #include "ash/wm/window_properties.h" | 10 #include "ash/wm/window_properties.h" |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 | 83 |
84 DISALLOW_COPY_AND_ASSIGN(ScopedWindowResizer); | 84 DISALLOW_COPY_AND_ASSIGN(ScopedWindowResizer); |
85 }; | 85 }; |
86 | 86 |
87 ToplevelWindowEventHandler::ScopedWindowResizer::ScopedWindowResizer( | 87 ToplevelWindowEventHandler::ScopedWindowResizer::ScopedWindowResizer( |
88 ToplevelWindowEventHandler* handler, | 88 ToplevelWindowEventHandler* handler, |
89 WindowResizer* resizer) | 89 WindowResizer* resizer) |
90 : handler_(handler), | 90 : handler_(handler), |
91 resizer_(resizer), | 91 resizer_(resizer), |
92 target_container_(NULL) { | 92 target_container_(NULL) { |
93 if (resizer_.get()) | 93 if (resizer_) |
94 resizer_->GetTarget()->AddObserver(this); | 94 resizer_->GetTarget()->AddObserver(this); |
95 } | 95 } |
96 | 96 |
97 ToplevelWindowEventHandler::ScopedWindowResizer::~ScopedWindowResizer() { | 97 ToplevelWindowEventHandler::ScopedWindowResizer::~ScopedWindowResizer() { |
98 RemoveHandlers(); | 98 RemoveHandlers(); |
99 if (resizer_.get()) | 99 if (resizer_) |
100 resizer_->GetTarget()->RemoveObserver(this); | 100 resizer_->GetTarget()->RemoveObserver(this); |
101 } | 101 } |
102 | 102 |
103 void ToplevelWindowEventHandler::ScopedWindowResizer::OnWindowHierarchyChanging( | 103 void ToplevelWindowEventHandler::ScopedWindowResizer::OnWindowHierarchyChanging( |
104 const HierarchyChangeParams& params) { | 104 const HierarchyChangeParams& params) { |
105 if (params.receiver != resizer_->GetTarget()) | 105 if (params.receiver != resizer_->GetTarget()) |
106 return; | 106 return; |
107 | 107 |
108 if (params.receiver->GetProperty(internal::kContinueDragAfterReparent)) { | 108 if (params.receiver->GetProperty(internal::kContinueDragAfterReparent)) { |
109 params.receiver->SetProperty(internal::kContinueDragAfterReparent, false); | 109 params.receiver->SetProperty(internal::kContinueDragAfterReparent, false); |
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
343 in_gesture_drag_ = in_move_loop_ = false; | 343 in_gesture_drag_ = in_move_loop_ = false; |
344 return move_cancelled_ ? aura::client::MOVE_CANCELED : | 344 return move_cancelled_ ? aura::client::MOVE_CANCELED : |
345 aura::client::MOVE_SUCCESSFUL; | 345 aura::client::MOVE_SUCCESSFUL; |
346 } | 346 } |
347 | 347 |
348 void ToplevelWindowEventHandler::EndMoveLoop() { | 348 void ToplevelWindowEventHandler::EndMoveLoop() { |
349 if (!in_move_loop_) | 349 if (!in_move_loop_) |
350 return; | 350 return; |
351 | 351 |
352 in_move_loop_ = false; | 352 in_move_loop_ = false; |
353 if (window_resizer_.get()) { | 353 if (window_resizer_) { |
354 window_resizer_->resizer()->RevertDrag(); | 354 window_resizer_->resizer()->RevertDrag(); |
355 window_resizer_.reset(); | 355 window_resizer_.reset(); |
356 } | 356 } |
357 quit_closure_.Run(); | 357 quit_closure_.Run(); |
358 } | 358 } |
359 | 359 |
360 void ToplevelWindowEventHandler::OnDisplayConfigurationChanging() { | 360 void ToplevelWindowEventHandler::OnDisplayConfigurationChanging() { |
361 if (in_move_loop_) { | 361 if (in_move_loop_) { |
362 move_cancelled_ = true; | 362 move_cancelled_ = true; |
363 EndMoveLoop(); | 363 EndMoveLoop(); |
364 } else if (window_resizer_.get()) { | 364 } else if (window_resizer_) { |
365 window_resizer_->resizer()->RevertDrag(); | 365 window_resizer_->resizer()->RevertDrag(); |
366 window_resizer_.reset(); | 366 window_resizer_.reset(); |
367 } | 367 } |
368 } | 368 } |
369 | 369 |
370 void ToplevelWindowEventHandler::CreateScopedWindowResizer( | 370 void ToplevelWindowEventHandler::CreateScopedWindowResizer( |
371 aura::Window* window, | 371 aura::Window* window, |
372 const gfx::Point& point_in_parent, | 372 const gfx::Point& point_in_parent, |
373 int window_component) { | 373 int window_component) { |
374 window_resizer_.reset(); | 374 window_resizer_.reset(); |
375 WindowResizer* resizer = | 375 WindowResizer* resizer = |
376 CreateWindowResizer(window, point_in_parent, window_component).release(); | 376 CreateWindowResizer(window, point_in_parent, window_component).release(); |
377 if (resizer) | 377 if (resizer) |
378 window_resizer_.reset(new ScopedWindowResizer(this, resizer)); | 378 window_resizer_.reset(new ScopedWindowResizer(this, resizer)); |
379 } | 379 } |
380 | 380 |
381 void ToplevelWindowEventHandler::CompleteDrag(DragCompletionStatus status, | 381 void ToplevelWindowEventHandler::CompleteDrag(DragCompletionStatus status, |
382 int event_flags) { | 382 int event_flags) { |
383 scoped_ptr<ScopedWindowResizer> resizer(window_resizer_.release()); | 383 scoped_ptr<ScopedWindowResizer> resizer(window_resizer_.release()); |
384 if (resizer.get()) { | 384 if (resizer) { |
385 if (status == DRAG_COMPLETE) | 385 if (status == DRAG_COMPLETE) |
386 resizer->resizer()->CompleteDrag(event_flags); | 386 resizer->resizer()->CompleteDrag(event_flags); |
387 else | 387 else |
388 resizer->resizer()->RevertDrag(); | 388 resizer->resizer()->RevertDrag(); |
389 } | 389 } |
390 } | 390 } |
391 | 391 |
392 void ToplevelWindowEventHandler::HandleMousePressed( | 392 void ToplevelWindowEventHandler::HandleMousePressed( |
393 aura::Window* target, | 393 aura::Window* target, |
394 ui::MouseEvent* event) { | 394 ui::MouseEvent* event) { |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
444 // by mouse drag or touch move event. | 444 // by mouse drag or touch move event. |
445 DCHECK(event->type() == ui::ET_MOUSE_DRAGGED || | 445 DCHECK(event->type() == ui::ET_MOUSE_DRAGGED || |
446 event->type() == ui::ET_TOUCH_MOVED || | 446 event->type() == ui::ET_TOUCH_MOVED || |
447 event->type() == ui::ET_GESTURE_SCROLL_UPDATE); | 447 event->type() == ui::ET_GESTURE_SCROLL_UPDATE); |
448 | 448 |
449 // Drag actions are performed pre-target handling to prevent spurious mouse | 449 // Drag actions are performed pre-target handling to prevent spurious mouse |
450 // moves from the move/size operation from being sent to the target. | 450 // moves from the move/size operation from being sent to the target. |
451 if (event->phase() != ui::EP_PRETARGET) | 451 if (event->phase() != ui::EP_PRETARGET) |
452 return; | 452 return; |
453 | 453 |
454 if (!window_resizer_.get()) | 454 if (!window_resizer_) |
455 return; | 455 return; |
456 window_resizer_->resizer()->Drag( | 456 window_resizer_->resizer()->Drag( |
457 ConvertPointToParent(target, event->location()), event->flags()); | 457 ConvertPointToParent(target, event->location()), event->flags()); |
458 event->StopPropagation(); | 458 event->StopPropagation(); |
459 } | 459 } |
460 | 460 |
461 void ToplevelWindowEventHandler::HandleMouseMoved( | 461 void ToplevelWindowEventHandler::HandleMouseMoved( |
462 aura::Window* target, | 462 aura::Window* target, |
463 ui::LocatedEvent* event) { | 463 ui::LocatedEvent* event) { |
464 // Shadow effects are applied after target handling. Note that we don't | 464 // Shadow effects are applied after target handling. Note that we don't |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
500 void ToplevelWindowEventHandler::ResizerWindowDestroyed() { | 500 void ToplevelWindowEventHandler::ResizerWindowDestroyed() { |
501 // We explicitly don't invoke RevertDrag() since that may do things to window. | 501 // We explicitly don't invoke RevertDrag() since that may do things to window. |
502 // Instead we destroy the resizer. | 502 // Instead we destroy the resizer. |
503 window_resizer_.reset(); | 503 window_resizer_.reset(); |
504 | 504 |
505 // End the move loop. This does nothing if we're not in a move loop. | 505 // End the move loop. This does nothing if we're not in a move loop. |
506 EndMoveLoop(); | 506 EndMoveLoop(); |
507 } | 507 } |
508 | 508 |
509 } // namespace ash | 509 } // namespace ash |
OLD | NEW |