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 { |