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