| 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/aura/wm_window_aura.h" | 8 #include "ash/wm/aura/wm_window_aura.h" |
| 9 #include "ash/wm/common/wm_event.h" | 9 #include "ash/wm/common/wm_event.h" |
| 10 #include "ash/wm/common/wm_window_observer.h" |
| 10 #include "ash/wm/resize_shadow_controller.h" | 11 #include "ash/wm/resize_shadow_controller.h" |
| 11 #include "ash/wm/window_resizer.h" | 12 #include "ash/wm/window_resizer.h" |
| 12 #include "ash/wm/window_state.h" | 13 #include "ash/wm/window_state.h" |
| 13 #include "ash/wm/window_state_aura.h" | 14 #include "ash/wm/window_state_aura.h" |
| 14 #include "ash/wm/window_state_observer.h" | 15 #include "ash/wm/window_state_observer.h" |
| 15 #include "ash/wm/window_util.h" | 16 #include "ash/wm/window_util.h" |
| 16 #include "base/message_loop/message_loop.h" | 17 #include "base/message_loop/message_loop.h" |
| 17 #include "base/run_loop.h" | 18 #include "base/run_loop.h" |
| 18 #include "ui/aura/client/cursor_client.h" | 19 #include "ui/aura/client/cursor_client.h" |
| 19 #include "ui/aura/env.h" | 20 #include "ui/aura/env.h" |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 82 } | 83 } |
| 83 | 84 |
| 84 } // namespace | 85 } // namespace |
| 85 | 86 |
| 86 // ScopedWindowResizer --------------------------------------------------------- | 87 // ScopedWindowResizer --------------------------------------------------------- |
| 87 | 88 |
| 88 // Wraps a WindowResizer and installs an observer on its target window. When | 89 // Wraps a WindowResizer and installs an observer on its target window. When |
| 89 // the window is destroyed ResizerWindowDestroyed() is invoked back on the | 90 // the window is destroyed ResizerWindowDestroyed() is invoked back on the |
| 90 // ToplevelWindowEventHandler to clean up. | 91 // ToplevelWindowEventHandler to clean up. |
| 91 class ToplevelWindowEventHandler::ScopedWindowResizer | 92 class ToplevelWindowEventHandler::ScopedWindowResizer |
| 92 : public aura::WindowObserver, | 93 : public wm::WmWindowObserver, |
| 93 public wm::WindowStateObserver { | 94 public wm::WindowStateObserver { |
| 94 public: | 95 public: |
| 95 ScopedWindowResizer(ToplevelWindowEventHandler* handler, | 96 ScopedWindowResizer(ToplevelWindowEventHandler* handler, |
| 96 WindowResizer* resizer); | 97 WindowResizer* resizer); |
| 97 ~ScopedWindowResizer() override; | 98 ~ScopedWindowResizer() override; |
| 98 | 99 |
| 99 // Returns true if the drag moves the window and does not resize. | 100 // Returns true if the drag moves the window and does not resize. |
| 100 bool IsMove() const; | 101 bool IsMove() const; |
| 101 | 102 |
| 102 WindowResizer* resizer() { return resizer_.get(); } | 103 WindowResizer* resizer() { return resizer_.get(); } |
| 103 | 104 |
| 104 // WindowObserver overrides: | 105 // WindowObserver overrides: |
| 105 void OnWindowDestroying(aura::Window* window) override; | 106 void OnWindowDestroying(wm::WmWindow* window) override; |
| 106 | 107 |
| 107 // WindowStateObserver overrides: | 108 // WindowStateObserver overrides: |
| 108 void OnPreWindowStateTypeChange(wm::WindowState* window_state, | 109 void OnPreWindowStateTypeChange(wm::WindowState* window_state, |
| 109 wm::WindowStateType type) override; | 110 wm::WindowStateType type) override; |
| 110 | 111 |
| 111 private: | 112 private: |
| 112 ToplevelWindowEventHandler* handler_; | 113 ToplevelWindowEventHandler* handler_; |
| 113 std::unique_ptr<WindowResizer> resizer_; | 114 std::unique_ptr<WindowResizer> resizer_; |
| 114 | 115 |
| 115 // Whether ScopedWindowResizer grabbed capture. | 116 // Whether ScopedWindowResizer grabbed capture. |
| 116 bool grabbed_capture_; | 117 bool grabbed_capture_; |
| 117 | 118 |
| 118 DISALLOW_COPY_AND_ASSIGN(ScopedWindowResizer); | 119 DISALLOW_COPY_AND_ASSIGN(ScopedWindowResizer); |
| 119 }; | 120 }; |
| 120 | 121 |
| 121 ToplevelWindowEventHandler::ScopedWindowResizer::ScopedWindowResizer( | 122 ToplevelWindowEventHandler::ScopedWindowResizer::ScopedWindowResizer( |
| 122 ToplevelWindowEventHandler* handler, | 123 ToplevelWindowEventHandler* handler, |
| 123 WindowResizer* resizer) | 124 WindowResizer* resizer) |
| 124 : handler_(handler), | 125 : handler_(handler), |
| 125 resizer_(resizer), | 126 resizer_(resizer), |
| 126 grabbed_capture_(false) { | 127 grabbed_capture_(false) { |
| 127 aura::Window* target = resizer_->GetAuraTarget(); | 128 wm::WmWindow* target = resizer_->GetTarget(); |
| 128 target->AddObserver(this); | 129 target->AddObserver(this); |
| 129 wm::GetWindowState(target)->AddObserver(this); | 130 target->GetWindowState()->AddObserver(this); |
| 130 | 131 |
| 131 if (!target->HasCapture()) { | 132 if (!target->HasCapture()) { |
| 132 grabbed_capture_ = true; | 133 grabbed_capture_ = true; |
| 133 target->SetCapture(); | 134 target->SetCapture(); |
| 134 } | 135 } |
| 135 } | 136 } |
| 136 | 137 |
| 137 ToplevelWindowEventHandler::ScopedWindowResizer::~ScopedWindowResizer() { | 138 ToplevelWindowEventHandler::ScopedWindowResizer::~ScopedWindowResizer() { |
| 138 aura::Window* target = resizer_->GetAuraTarget(); | 139 wm::WmWindow* target = resizer_->GetTarget(); |
| 139 target->RemoveObserver(this); | 140 target->RemoveObserver(this); |
| 140 wm::GetWindowState(target)->RemoveObserver(this); | 141 target->GetWindowState()->RemoveObserver(this); |
| 141 if (grabbed_capture_) | 142 if (grabbed_capture_) |
| 142 target->ReleaseCapture(); | 143 target->ReleaseCapture(); |
| 143 } | 144 } |
| 144 | 145 |
| 145 bool ToplevelWindowEventHandler::ScopedWindowResizer::IsMove() const { | 146 bool ToplevelWindowEventHandler::ScopedWindowResizer::IsMove() const { |
| 146 return resizer_->details().bounds_change == | 147 return resizer_->details().bounds_change == |
| 147 WindowResizer::kBoundsChange_Repositions; | 148 WindowResizer::kBoundsChange_Repositions; |
| 148 } | 149 } |
| 149 | 150 |
| 150 void | 151 void |
| 151 ToplevelWindowEventHandler::ScopedWindowResizer::OnPreWindowStateTypeChange( | 152 ToplevelWindowEventHandler::ScopedWindowResizer::OnPreWindowStateTypeChange( |
| 152 wm::WindowState* window_state, | 153 wm::WindowState* window_state, |
| 153 wm::WindowStateType old) { | 154 wm::WindowStateType old) { |
| 154 handler_->CompleteDrag(DRAG_COMPLETE); | 155 handler_->CompleteDrag(DRAG_COMPLETE); |
| 155 } | 156 } |
| 156 | 157 |
| 157 void ToplevelWindowEventHandler::ScopedWindowResizer::OnWindowDestroying( | 158 void ToplevelWindowEventHandler::ScopedWindowResizer::OnWindowDestroying( |
| 158 aura::Window* window) { | 159 wm::WmWindow* window) { |
| 159 DCHECK_EQ(resizer_->GetAuraTarget(), window); | 160 DCHECK_EQ(resizer_->GetTarget(), window); |
| 160 handler_->ResizerWindowDestroyed(); | 161 handler_->ResizerWindowDestroyed(); |
| 161 } | 162 } |
| 162 | 163 |
| 163 // ToplevelWindowEventHandler -------------------------------------------------- | 164 // ToplevelWindowEventHandler -------------------------------------------------- |
| 164 | 165 |
| 165 ToplevelWindowEventHandler::ToplevelWindowEventHandler() | 166 ToplevelWindowEventHandler::ToplevelWindowEventHandler() |
| 166 : first_finger_hittest_(HTNOWHERE), | 167 : first_finger_hittest_(HTNOWHERE), |
| 167 in_move_loop_(false), | 168 in_move_loop_(false), |
| 168 in_gesture_drag_(false), | 169 in_gesture_drag_(false), |
| 169 drag_reverted_(false), | 170 drag_reverted_(false), |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 228 if (event->handled()) | 229 if (event->handled()) |
| 229 return; | 230 return; |
| 230 aura::Window* target = static_cast<aura::Window*>(event->target()); | 231 aura::Window* target = static_cast<aura::Window*>(event->target()); |
| 231 if (!target->delegate()) | 232 if (!target->delegate()) |
| 232 return; | 233 return; |
| 233 | 234 |
| 234 if (window_resizer_.get() && !in_gesture_drag_) | 235 if (window_resizer_.get() && !in_gesture_drag_) |
| 235 return; | 236 return; |
| 236 | 237 |
| 237 if (window_resizer_.get() && | 238 if (window_resizer_.get() && |
| 238 window_resizer_->resizer()->GetAuraTarget() != target) { | 239 wm::WmWindowAura::GetAuraWindow( |
| 240 window_resizer_->resizer()->GetTarget()) != target) { |
| 239 return; | 241 return; |
| 240 } | 242 } |
| 241 | 243 |
| 242 if (event->details().touch_points() > 2) { | 244 if (event->details().touch_points() > 2) { |
| 243 if (CompleteDrag(DRAG_COMPLETE)) | 245 if (CompleteDrag(DRAG_COMPLETE)) |
| 244 event->StopPropagation(); | 246 event->StopPropagation(); |
| 245 return; | 247 return; |
| 246 } | 248 } |
| 247 | 249 |
| 248 switch (event->type()) { | 250 switch (event->type()) { |
| (...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 632 default: | 634 default: |
| 633 NOTREACHED(); | 635 NOTREACHED(); |
| 634 } | 636 } |
| 635 } | 637 } |
| 636 | 638 |
| 637 void ToplevelWindowEventHandler::ResizerWindowDestroyed() { | 639 void ToplevelWindowEventHandler::ResizerWindowDestroyed() { |
| 638 CompleteDrag(DRAG_RESIZER_WINDOW_DESTROYED); | 640 CompleteDrag(DRAG_RESIZER_WINDOW_DESTROYED); |
| 639 } | 641 } |
| 640 | 642 |
| 641 } // namespace ash | 643 } // namespace ash |
| OLD | NEW |