| 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_resizer.h" | 10 #include "ash/wm/window_resizer.h" |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 52 // Wraps a WindowResizer and installs an observer on its target window. When | 52 // Wraps a WindowResizer and installs an observer on its target window. When |
| 53 // the window is destroyed ResizerWindowDestroyed() is invoked back on the | 53 // the window is destroyed ResizerWindowDestroyed() is invoked back on the |
| 54 // ToplevelWindowEventHandler to clean up. | 54 // ToplevelWindowEventHandler to clean up. |
| 55 class ToplevelWindowEventHandler::ScopedWindowResizer | 55 class ToplevelWindowEventHandler::ScopedWindowResizer |
| 56 : public aura::WindowObserver { | 56 : public aura::WindowObserver { |
| 57 public: | 57 public: |
| 58 ScopedWindowResizer(ToplevelWindowEventHandler* handler, | 58 ScopedWindowResizer(ToplevelWindowEventHandler* handler, |
| 59 WindowResizer* resizer); | 59 WindowResizer* resizer); |
| 60 virtual ~ScopedWindowResizer(); | 60 virtual ~ScopedWindowResizer(); |
| 61 | 61 |
| 62 WindowResizer* ReleaseResizer(); |
| 63 |
| 62 WindowResizer* resizer() { return resizer_.get(); } | 64 WindowResizer* resizer() { return resizer_.get(); } |
| 63 | 65 |
| 64 // WindowObserver overrides: | 66 // WindowObserver overrides: |
| 65 virtual void OnWindowPropertyChanged(aura::Window* window, | 67 virtual void OnWindowPropertyChanged(aura::Window* window, |
| 66 const void* key, | 68 const void* key, |
| 67 intptr_t old) OVERRIDE; | 69 intptr_t old) OVERRIDE; |
| 68 virtual void OnWindowDestroying(aura::Window* window) OVERRIDE; | 70 virtual void OnWindowDestroying(aura::Window* window) OVERRIDE; |
| 69 | 71 |
| 70 private: | 72 private: |
| 71 ToplevelWindowEventHandler* handler_; | 73 ToplevelWindowEventHandler* handler_; |
| 72 scoped_ptr<WindowResizer> resizer_; | 74 scoped_ptr<WindowResizer> resizer_; |
| 73 | 75 |
| 74 DISALLOW_COPY_AND_ASSIGN(ScopedWindowResizer); | 76 DISALLOW_COPY_AND_ASSIGN(ScopedWindowResizer); |
| 75 }; | 77 }; |
| 76 | 78 |
| 77 ToplevelWindowEventHandler::ScopedWindowResizer::ScopedWindowResizer( | 79 ToplevelWindowEventHandler::ScopedWindowResizer::ScopedWindowResizer( |
| 78 ToplevelWindowEventHandler* handler, | 80 ToplevelWindowEventHandler* handler, |
| 79 WindowResizer* resizer) | 81 WindowResizer* resizer) |
| 80 : handler_(handler), | 82 : handler_(handler), |
| 81 resizer_(resizer) { | 83 resizer_(resizer) { |
| 82 if (resizer_.get()) | 84 if (resizer_.get()) |
| 83 resizer_->GetTarget()->AddObserver(this); | 85 resizer_->GetTarget()->AddObserver(this); |
| 84 } | 86 } |
| 85 | 87 |
| 86 ToplevelWindowEventHandler::ScopedWindowResizer::~ScopedWindowResizer() { | 88 ToplevelWindowEventHandler::ScopedWindowResizer::~ScopedWindowResizer() { |
| 87 if (resizer_.get()) | 89 if (resizer_.get()) |
| 88 resizer_->GetTarget()->RemoveObserver(this); | 90 resizer_->GetTarget()->RemoveObserver(this); |
| 89 } | 91 } |
| 90 | 92 |
| 93 WindowResizer* |
| 94 ToplevelWindowEventHandler::ScopedWindowResizer::ReleaseResizer() { |
| 95 if (resizer_.get()) |
| 96 resizer_->GetTarget()->RemoveObserver(this); |
| 97 return resizer_.release(); |
| 98 } |
| 99 |
| 91 void ToplevelWindowEventHandler::ScopedWindowResizer::OnWindowPropertyChanged( | 100 void ToplevelWindowEventHandler::ScopedWindowResizer::OnWindowPropertyChanged( |
| 92 aura::Window* window, | 101 aura::Window* window, |
| 93 const void* key, | 102 const void* key, |
| 94 intptr_t old) { | 103 intptr_t old) { |
| 95 if (!wm::IsWindowNormal(window)) | 104 if (!wm::IsWindowNormal(window)) |
| 96 handler_->CompleteDrag(DRAG_COMPLETE, 0); | 105 handler_->CompleteDrag(DRAG_COMPLETE, 0); |
| 97 } | 106 } |
| 98 | 107 |
| 99 void ToplevelWindowEventHandler::ScopedWindowResizer::OnWindowDestroying( | 108 void ToplevelWindowEventHandler::ScopedWindowResizer::OnWindowDestroying( |
| 100 aura::Window* window) { | 109 aura::Window* window) { |
| (...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 316 void ToplevelWindowEventHandler::OnDisplayConfigurationChanging() { | 325 void ToplevelWindowEventHandler::OnDisplayConfigurationChanging() { |
| 317 if (in_move_loop_) { | 326 if (in_move_loop_) { |
| 318 move_cancelled_ = true; | 327 move_cancelled_ = true; |
| 319 EndMoveLoop(); | 328 EndMoveLoop(); |
| 320 } else if (window_resizer_.get()) { | 329 } else if (window_resizer_.get()) { |
| 321 window_resizer_->resizer()->RevertDrag(); | 330 window_resizer_->resizer()->RevertDrag(); |
| 322 window_resizer_.reset(); | 331 window_resizer_.reset(); |
| 323 } | 332 } |
| 324 } | 333 } |
| 325 | 334 |
| 335 void ToplevelWindowEventHandler::PassResizer(WindowResizerOwner* new_owner) { |
| 336 DCHECK(window_resizer_.get()); |
| 337 new_owner->AcceptResizer(window_resizer_->ReleaseResizer(), |
| 338 in_gesture_drag_); |
| 339 window_resizer_.reset(); |
| 340 } |
| 341 |
| 342 void ToplevelWindowEventHandler::AcceptResizer(WindowResizer* resizer, |
| 343 bool in_gesture_drag) { |
| 344 window_resizer_.reset(new ScopedWindowResizer(this, resizer)); |
| 345 in_gesture_drag_ = in_gesture_drag; |
| 346 } |
| 347 |
| 326 void ToplevelWindowEventHandler::CreateScopedWindowResizer( | 348 void ToplevelWindowEventHandler::CreateScopedWindowResizer( |
| 327 aura::Window* window, | 349 aura::Window* window, |
| 328 const gfx::Point& point_in_parent, | 350 const gfx::Point& point_in_parent, |
| 329 int window_component) { | 351 int window_component) { |
| 330 window_resizer_.reset(); | 352 window_resizer_.reset(); |
| 331 WindowResizer* resizer = | 353 WindowResizer* resizer = |
| 332 CreateWindowResizer(window, point_in_parent, window_component).release(); | 354 CreateWindowResizer(this, window, point_in_parent, |
| 355 window_component).release(); |
| 333 if (resizer) | 356 if (resizer) |
| 334 window_resizer_.reset(new ScopedWindowResizer(this, resizer)); | 357 window_resizer_.reset(new ScopedWindowResizer(this, resizer)); |
| 335 } | 358 } |
| 336 | 359 |
| 337 void ToplevelWindowEventHandler::CompleteDrag(DragCompletionStatus status, | 360 void ToplevelWindowEventHandler::CompleteDrag(DragCompletionStatus status, |
| 338 int event_flags) { | 361 int event_flags) { |
| 339 scoped_ptr<ScopedWindowResizer> resizer(window_resizer_.release()); | 362 scoped_ptr<ScopedWindowResizer> resizer(window_resizer_.release()); |
| 340 if (resizer.get()) { | 363 if (resizer.get()) { |
| 341 if (status == DRAG_COMPLETE) | 364 if (status == DRAG_COMPLETE) |
| 342 resizer->resizer()->CompleteDrag(event_flags); | 365 resizer->resizer()->CompleteDrag(event_flags); |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 456 void ToplevelWindowEventHandler::ResizerWindowDestroyed() { | 479 void ToplevelWindowEventHandler::ResizerWindowDestroyed() { |
| 457 // We explicitly don't invoke RevertDrag() since that may do things to window. | 480 // We explicitly don't invoke RevertDrag() since that may do things to window. |
| 458 // Instead we destroy the resizer. | 481 // Instead we destroy the resizer. |
| 459 window_resizer_.reset(); | 482 window_resizer_.reset(); |
| 460 | 483 |
| 461 // End the move loop. This does nothing if we're not in a move loop. | 484 // End the move loop. This does nothing if we're not in a move loop. |
| 462 EndMoveLoop(); | 485 EndMoveLoop(); |
| 463 } | 486 } |
| 464 | 487 |
| 465 } // namespace ash | 488 } // namespace ash |
| OLD | NEW |