| 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 |