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/wm_toplevel_window_event_handler.h" | 5 #include "ash/wm/wm_toplevel_window_event_handler.h" |
6 | 6 |
7 #include "ash/shell_port.h" | 7 #include "ash/shell_port.h" |
8 #include "ash/wm/window_resizer.h" | 8 #include "ash/wm/window_resizer.h" |
9 #include "ash/wm/window_state.h" | 9 #include "ash/wm/window_state.h" |
10 #include "ash/wm/window_state_observer.h" | 10 #include "ash/wm/window_state_observer.h" |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
93 // Whether ScopedWindowResizer grabbed capture. | 93 // Whether ScopedWindowResizer grabbed capture. |
94 bool grabbed_capture_; | 94 bool grabbed_capture_; |
95 | 95 |
96 DISALLOW_COPY_AND_ASSIGN(ScopedWindowResizer); | 96 DISALLOW_COPY_AND_ASSIGN(ScopedWindowResizer); |
97 }; | 97 }; |
98 | 98 |
99 WmToplevelWindowEventHandler::ScopedWindowResizer::ScopedWindowResizer( | 99 WmToplevelWindowEventHandler::ScopedWindowResizer::ScopedWindowResizer( |
100 WmToplevelWindowEventHandler* handler, | 100 WmToplevelWindowEventHandler* handler, |
101 std::unique_ptr<WindowResizer> resizer) | 101 std::unique_ptr<WindowResizer> resizer) |
102 : handler_(handler), resizer_(std::move(resizer)), grabbed_capture_(false) { | 102 : handler_(handler), resizer_(std::move(resizer)), grabbed_capture_(false) { |
103 WmWindow* target = resizer_->GetTarget(); | 103 aura::Window* target = resizer_->GetTarget(); |
104 target->aura_window()->AddObserver(this); | 104 target->AddObserver(this); |
105 target->GetWindowState()->AddObserver(this); | 105 GetWindowState(target)->AddObserver(this); |
106 | 106 |
107 if (!target->HasCapture()) { | 107 if (!target->HasCapture()) { |
108 grabbed_capture_ = true; | 108 grabbed_capture_ = true; |
109 target->SetCapture(); | 109 target->SetCapture(); |
110 } | 110 } |
111 } | 111 } |
112 | 112 |
113 WmToplevelWindowEventHandler::ScopedWindowResizer::~ScopedWindowResizer() { | 113 WmToplevelWindowEventHandler::ScopedWindowResizer::~ScopedWindowResizer() { |
114 WmWindow* target = resizer_->GetTarget(); | 114 aura::Window* target = resizer_->GetTarget(); |
115 target->aura_window()->RemoveObserver(this); | 115 target->RemoveObserver(this); |
116 target->GetWindowState()->RemoveObserver(this); | 116 GetWindowState(target)->RemoveObserver(this); |
117 if (grabbed_capture_) | 117 if (grabbed_capture_) |
118 target->ReleaseCapture(); | 118 target->ReleaseCapture(); |
119 } | 119 } |
120 | 120 |
121 bool WmToplevelWindowEventHandler::ScopedWindowResizer::IsMove() const { | 121 bool WmToplevelWindowEventHandler::ScopedWindowResizer::IsMove() const { |
122 return resizer_->details().bounds_change == | 122 return resizer_->details().bounds_change == |
123 WindowResizer::kBoundsChange_Repositions; | 123 WindowResizer::kBoundsChange_Repositions; |
124 } | 124 } |
125 | 125 |
126 void WmToplevelWindowEventHandler::ScopedWindowResizer:: | 126 void WmToplevelWindowEventHandler::ScopedWindowResizer:: |
127 OnPreWindowStateTypeChange(wm::WindowState* window_state, | 127 OnPreWindowStateTypeChange(wm::WindowState* window_state, |
128 wm::WindowStateType old) { | 128 wm::WindowStateType old) { |
129 handler_->CompleteDrag(DragResult::SUCCESS); | 129 handler_->CompleteDrag(DragResult::SUCCESS); |
130 } | 130 } |
131 | 131 |
132 void WmToplevelWindowEventHandler::ScopedWindowResizer::OnWindowDestroying( | 132 void WmToplevelWindowEventHandler::ScopedWindowResizer::OnWindowDestroying( |
133 aura::Window* window) { | 133 aura::Window* window) { |
134 DCHECK_EQ(resizer_->GetTarget(), WmWindow::Get(window)); | 134 DCHECK_EQ(resizer_->GetTarget(), window); |
135 handler_->ResizerWindowDestroyed(); | 135 handler_->ResizerWindowDestroyed(); |
136 } | 136 } |
137 | 137 |
138 // WmToplevelWindowEventHandler | 138 // WmToplevelWindowEventHandler |
139 // -------------------------------------------------- | 139 // -------------------------------------------------- |
140 | 140 |
141 WmToplevelWindowEventHandler::WmToplevelWindowEventHandler() | 141 WmToplevelWindowEventHandler::WmToplevelWindowEventHandler() |
142 : first_finger_hittest_(HTNOWHERE) { | 142 : first_finger_hittest_(HTNOWHERE) { |
143 ShellPort::Get()->AddDisplayObserver(this); | 143 ShellPort::Get()->AddDisplayObserver(this); |
144 } | 144 } |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
197 WmWindow* target) { | 197 WmWindow* target) { |
198 if (event->handled()) | 198 if (event->handled()) |
199 return; | 199 return; |
200 if (!target->HasNonClientArea()) | 200 if (!target->HasNonClientArea()) |
201 return; | 201 return; |
202 | 202 |
203 if (window_resizer_.get() && !in_gesture_drag_) | 203 if (window_resizer_.get() && !in_gesture_drag_) |
204 return; | 204 return; |
205 | 205 |
206 if (window_resizer_.get() && | 206 if (window_resizer_.get() && |
207 window_resizer_->resizer()->GetTarget() != target) { | 207 window_resizer_->resizer()->GetTarget() != target->aura_window()) { |
208 return; | 208 return; |
209 } | 209 } |
210 | 210 |
211 if (event->details().touch_points() > 2) { | 211 if (event->details().touch_points() > 2) { |
212 if (CompleteDrag(DragResult::SUCCESS)) | 212 if (CompleteDrag(DragResult::SUCCESS)) |
213 event->StopPropagation(); | 213 event->StopPropagation(); |
214 return; | 214 return; |
215 } | 215 } |
216 | 216 |
217 switch (event->type()) { | 217 switch (event->type()) { |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
355 } | 355 } |
356 | 356 |
357 bool WmToplevelWindowEventHandler::AttemptToStartDrag( | 357 bool WmToplevelWindowEventHandler::AttemptToStartDrag( |
358 WmWindow* window, | 358 WmWindow* window, |
359 const gfx::Point& point_in_parent, | 359 const gfx::Point& point_in_parent, |
360 int window_component, | 360 int window_component, |
361 aura::client::WindowMoveSource source, | 361 aura::client::WindowMoveSource source, |
362 const EndClosure& end_closure) { | 362 const EndClosure& end_closure) { |
363 if (window_resizer_.get()) | 363 if (window_resizer_.get()) |
364 return false; | 364 return false; |
365 std::unique_ptr<WindowResizer> resizer( | 365 std::unique_ptr<WindowResizer> resizer(CreateWindowResizer( |
366 CreateWindowResizer(window, point_in_parent, window_component, source)); | 366 window->aura_window(), point_in_parent, window_component, source)); |
367 if (!resizer) | 367 if (!resizer) |
368 return false; | 368 return false; |
369 | 369 |
370 end_closure_ = end_closure; | 370 end_closure_ = end_closure; |
371 window_resizer_.reset(new ScopedWindowResizer(this, std::move(resizer))); | 371 window_resizer_.reset(new ScopedWindowResizer(this, std::move(resizer))); |
372 | 372 |
373 pre_drag_window_bounds_ = window->GetBounds(); | 373 pre_drag_window_bounds_ = window->GetBounds(); |
374 in_gesture_drag_ = (source == aura::client::WINDOW_MOVE_SOURCE_TOUCH); | 374 in_gesture_drag_ = (source == aura::client::WINDOW_MOVE_SOURCE_TOUCH); |
375 return true; | 375 return true; |
376 } | 376 } |
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
541 void WmToplevelWindowEventHandler::ResizerWindowDestroyed() { | 541 void WmToplevelWindowEventHandler::ResizerWindowDestroyed() { |
542 CompleteDrag(DragResult::WINDOW_DESTROYED); | 542 CompleteDrag(DragResult::WINDOW_DESTROYED); |
543 } | 543 } |
544 | 544 |
545 void WmToplevelWindowEventHandler::OnDisplayConfigurationChanging() { | 545 void WmToplevelWindowEventHandler::OnDisplayConfigurationChanging() { |
546 CompleteDrag(DragResult::REVERT); | 546 CompleteDrag(DragResult::REVERT); |
547 } | 547 } |
548 | 548 |
549 } // namespace wm | 549 } // namespace wm |
550 } // namespace ash | 550 } // namespace ash |
OLD | NEW |