Chromium Code Reviews| 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(); | |
| 62 WindowResizer* resizer() { return resizer_.get(); } | 63 WindowResizer* resizer() { return resizer_.get(); } |
| 63 | 64 |
| 64 // WindowObserver overrides: | 65 // WindowObserver overrides: |
| 65 virtual void OnWindowPropertyChanged(aura::Window* window, | 66 virtual void OnWindowPropertyChanged(aura::Window* window, |
| 66 const void* key, | 67 const void* key, |
| 67 intptr_t old) OVERRIDE; | 68 intptr_t old) OVERRIDE; |
| 68 virtual void OnWindowDestroying(aura::Window* window) OVERRIDE; | 69 virtual void OnWindowDestroying(aura::Window* window) OVERRIDE; |
| 69 | 70 |
| 70 private: | 71 private: |
| 71 ToplevelWindowEventHandler* handler_; | 72 ToplevelWindowEventHandler* handler_; |
| 72 scoped_ptr<WindowResizer> resizer_; | 73 scoped_ptr<WindowResizer> resizer_; |
| 73 | 74 |
| 74 DISALLOW_COPY_AND_ASSIGN(ScopedWindowResizer); | 75 DISALLOW_COPY_AND_ASSIGN(ScopedWindowResizer); |
| 75 }; | 76 }; |
| 76 | 77 |
| 77 ToplevelWindowEventHandler::ScopedWindowResizer::ScopedWindowResizer( | 78 ToplevelWindowEventHandler::ScopedWindowResizer::ScopedWindowResizer( |
| 78 ToplevelWindowEventHandler* handler, | 79 ToplevelWindowEventHandler* handler, |
| 79 WindowResizer* resizer) | 80 WindowResizer* resizer) |
| 80 : handler_(handler), | 81 : handler_(handler), |
| 81 resizer_(resizer) { | 82 resizer_(resizer) { |
| 82 if (resizer_.get()) | 83 if (resizer_.get()) |
| 83 resizer_->GetTarget()->AddObserver(this); | 84 resizer_->GetTarget()->AddObserver(this); |
| 84 } | 85 } |
| 85 | 86 |
| 86 ToplevelWindowEventHandler::ScopedWindowResizer::~ScopedWindowResizer() { | 87 ToplevelWindowEventHandler::ScopedWindowResizer::~ScopedWindowResizer() { |
| 87 if (resizer_.get()) | 88 if (resizer_.get()) |
| 88 resizer_->GetTarget()->RemoveObserver(this); | 89 resizer_->GetTarget()->RemoveObserver(this); |
| 89 } | 90 } |
| 90 | 91 |
| 92 WindowResizer* | |
| 93 ToplevelWindowEventHandler::ScopedWindowResizer::ReleaseResizer() { | |
| 94 if (resizer_.get()) | |
| 95 resizer_->GetTarget()->RemoveObserver(this); | |
| 96 return resizer_.release(); | |
| 97 } | |
| 98 | |
| 91 void ToplevelWindowEventHandler::ScopedWindowResizer::OnWindowPropertyChanged( | 99 void ToplevelWindowEventHandler::ScopedWindowResizer::OnWindowPropertyChanged( |
| 92 aura::Window* window, | 100 aura::Window* window, |
| 93 const void* key, | 101 const void* key, |
| 94 intptr_t old) { | 102 intptr_t old) { |
| 95 if (!wm::IsWindowNormal(window)) | 103 if (!wm::IsWindowNormal(window)) |
| 96 handler_->CompleteDrag(DRAG_COMPLETE, 0); | 104 handler_->CompleteDrag(DRAG_COMPLETE, 0); |
| 97 } | 105 } |
| 98 | 106 |
| 99 void ToplevelWindowEventHandler::ScopedWindowResizer::OnWindowDestroying( | 107 void ToplevelWindowEventHandler::ScopedWindowResizer::OnWindowDestroying( |
| 100 aura::Window* window) { | 108 aura::Window* window) { |
| (...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 316 void ToplevelWindowEventHandler::OnDisplayConfigurationChanging() { | 324 void ToplevelWindowEventHandler::OnDisplayConfigurationChanging() { |
| 317 if (in_move_loop_) { | 325 if (in_move_loop_) { |
| 318 move_cancelled_ = true; | 326 move_cancelled_ = true; |
| 319 EndMoveLoop(); | 327 EndMoveLoop(); |
| 320 } else if (window_resizer_.get()) { | 328 } else if (window_resizer_.get()) { |
| 321 window_resizer_->resizer()->RevertDrag(); | 329 window_resizer_->resizer()->RevertDrag(); |
| 322 window_resizer_.reset(); | 330 window_resizer_.reset(); |
| 323 } | 331 } |
| 324 } | 332 } |
| 325 | 333 |
| 334 void ToplevelWindowEventHandler::PassResizer( | |
| 335 ToplevelWindowEventHandler* new_owner) { | |
| 336 if (!window_resizer_.get()) | |
|
flackr
2013/03/14 20:02:15
Needed because in panel_window_resizer_unittest.cc
| |
| 337 return; | |
| 338 new_owner->AcceptResizer(window_resizer_->ReleaseResizer(), | |
| 339 in_gesture_drag_); | |
| 340 window_resizer_.reset(); | |
| 341 } | |
| 342 | |
| 343 void ToplevelWindowEventHandler::AcceptResizer(WindowResizer* resizer, | |
| 344 bool in_gesture_drag) { | |
| 345 window_resizer_.reset(new ScopedWindowResizer(this, resizer)); | |
| 346 in_gesture_drag_ = in_gesture_drag; | |
| 347 } | |
| 348 | |
| 326 void ToplevelWindowEventHandler::CreateScopedWindowResizer( | 349 void ToplevelWindowEventHandler::CreateScopedWindowResizer( |
| 327 aura::Window* window, | 350 aura::Window* window, |
| 328 const gfx::Point& point_in_parent, | 351 const gfx::Point& point_in_parent, |
| 329 int window_component) { | 352 int window_component) { |
| 330 window_resizer_.reset(); | 353 window_resizer_.reset(); |
| 331 WindowResizer* resizer = | 354 WindowResizer* resizer = |
| 332 CreateWindowResizer(window, point_in_parent, window_component).release(); | 355 CreateWindowResizer(window, point_in_parent, 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 } |
| (...skipping 120 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 |