Chromium Code Reviews| Index: ash/wm/toplevel_window_event_handler.cc |
| diff --git a/ash/wm/toplevel_window_event_handler.cc b/ash/wm/toplevel_window_event_handler.cc |
| index 610261f9f78b21a0c2fce52c4091a2e9ace5232d..cc0362e0ece038b331aca7a1aba5289937ffb18d 100644 |
| --- a/ash/wm/toplevel_window_event_handler.cc |
| +++ b/ash/wm/toplevel_window_event_handler.cc |
| @@ -110,6 +110,9 @@ class ToplevelWindowEventHandler::ScopedWindowResizer |
| ToplevelWindowEventHandler* handler_; |
| scoped_ptr<WindowResizer> resizer_; |
| + // Whether ScopedWindowResizer grabbed capture. |
| + bool grabbed_capture_; |
| + |
| DISALLOW_COPY_AND_ASSIGN(ScopedWindowResizer); |
| }; |
| @@ -117,14 +120,24 @@ ToplevelWindowEventHandler::ScopedWindowResizer::ScopedWindowResizer( |
| ToplevelWindowEventHandler* handler, |
| WindowResizer* resizer) |
| : handler_(handler), |
| - resizer_(resizer) { |
| - resizer_->GetTarget()->AddObserver(this); |
| - wm::GetWindowState(resizer_->GetTarget())->AddObserver(this); |
| + resizer_(resizer), |
| + grabbed_capture_(false) { |
| + aura::Window* target = resizer_->GetTarget(); |
| + target->AddObserver(this); |
| + wm::GetWindowState(target)->AddObserver(this); |
| + |
| + if (!target->HasCapture()) { |
|
flackr
2014/12/16 21:28:21
If this is to accomodate X11 already having captur
pkotwicz
2014/12/17 04:48:12
The reason that I do this is because I want to enf
flackr
2014/12/17 19:39:15
Acknowledged.
|
| + grabbed_capture_ = true; |
| + target->SetCapture(); |
|
flackr
2014/12/16 21:28:21
Maybe we should also pay attention to capture loss
pkotwicz
2014/12/17 04:48:12
This would be bad. The tab dragging code switches
pkotwicz
2014/12/17 05:18:36
Actually, we already pay attention to loss of capt
flackr
2014/12/17 19:39:15
Acknowledged, my main concern was losing capture t
|
| + } |
| } |
| ToplevelWindowEventHandler::ScopedWindowResizer::~ScopedWindowResizer() { |
| - resizer_->GetTarget()->RemoveObserver(this); |
| - wm::GetWindowState(resizer_->GetTarget())->RemoveObserver(this); |
| + aura::Window* target = resizer_->GetTarget(); |
| + target->RemoveObserver(this); |
| + wm::GetWindowState(target)->RemoveObserver(this); |
| + if (grabbed_capture_) |
| + target->ReleaseCapture(); |
| } |
| bool ToplevelWindowEventHandler::ScopedWindowResizer::IsMove() const { |