| 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()) {
|
| + grabbed_capture_ = true;
|
| + target->SetCapture();
|
| + }
|
| }
|
|
|
| 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 {
|
|
|