Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(313)

Side by Side Diff: ash/wm/toplevel_window_event_handler.cc

Issue 778043004: Set capture to the window being dragged when dragging a window on Ash (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@fix_capture
Patch Set: Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ash/wm/system_gesture_event_filter_unittest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/toplevel_window_event_handler.h" 5 #include "ash/wm/toplevel_window_event_handler.h"
6 6
7 #include "ash/shell.h" 7 #include "ash/shell.h"
8 #include "ash/wm/resize_shadow_controller.h" 8 #include "ash/wm/resize_shadow_controller.h"
9 #include "ash/wm/window_resizer.h" 9 #include "ash/wm/window_resizer.h"
10 #include "ash/wm/window_state.h" 10 #include "ash/wm/window_state.h"
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
103 void OnWindowDestroying(aura::Window* window) override; 103 void OnWindowDestroying(aura::Window* window) override;
104 104
105 // WindowStateObserver overrides: 105 // WindowStateObserver overrides:
106 void OnPreWindowStateTypeChange(wm::WindowState* window_state, 106 void OnPreWindowStateTypeChange(wm::WindowState* window_state,
107 wm::WindowStateType type) override; 107 wm::WindowStateType type) override;
108 108
109 private: 109 private:
110 ToplevelWindowEventHandler* handler_; 110 ToplevelWindowEventHandler* handler_;
111 scoped_ptr<WindowResizer> resizer_; 111 scoped_ptr<WindowResizer> resizer_;
112 112
113 // Whether ScopedWindowResizer grabbed capture.
114 bool grabbed_capture_;
115
113 DISALLOW_COPY_AND_ASSIGN(ScopedWindowResizer); 116 DISALLOW_COPY_AND_ASSIGN(ScopedWindowResizer);
114 }; 117 };
115 118
116 ToplevelWindowEventHandler::ScopedWindowResizer::ScopedWindowResizer( 119 ToplevelWindowEventHandler::ScopedWindowResizer::ScopedWindowResizer(
117 ToplevelWindowEventHandler* handler, 120 ToplevelWindowEventHandler* handler,
118 WindowResizer* resizer) 121 WindowResizer* resizer)
119 : handler_(handler), 122 : handler_(handler),
120 resizer_(resizer) { 123 resizer_(resizer),
121 resizer_->GetTarget()->AddObserver(this); 124 grabbed_capture_(false) {
122 wm::GetWindowState(resizer_->GetTarget())->AddObserver(this); 125 aura::Window* target = resizer_->GetTarget();
126 target->AddObserver(this);
127 wm::GetWindowState(target)->AddObserver(this);
128
129 if (!target->HasCapture()) {
130 grabbed_capture_ = true;
131 target->SetCapture();
132 }
123 } 133 }
124 134
125 ToplevelWindowEventHandler::ScopedWindowResizer::~ScopedWindowResizer() { 135 ToplevelWindowEventHandler::ScopedWindowResizer::~ScopedWindowResizer() {
126 resizer_->GetTarget()->RemoveObserver(this); 136 aura::Window* target = resizer_->GetTarget();
127 wm::GetWindowState(resizer_->GetTarget())->RemoveObserver(this); 137 target->RemoveObserver(this);
138 wm::GetWindowState(target)->RemoveObserver(this);
139 if (grabbed_capture_)
140 target->ReleaseCapture();
128 } 141 }
129 142
130 bool ToplevelWindowEventHandler::ScopedWindowResizer::IsMove() const { 143 bool ToplevelWindowEventHandler::ScopedWindowResizer::IsMove() const {
131 return resizer_->details().bounds_change == 144 return resizer_->details().bounds_change ==
132 WindowResizer::kBoundsChange_Repositions; 145 WindowResizer::kBoundsChange_Repositions;
133 } 146 }
134 147
135 void 148 void
136 ToplevelWindowEventHandler::ScopedWindowResizer::OnPreWindowStateTypeChange( 149 ToplevelWindowEventHandler::ScopedWindowResizer::OnPreWindowStateTypeChange(
137 wm::WindowState* window_state, 150 wm::WindowState* window_state,
(...skipping 466 matching lines...) Expand 10 before | Expand all | Expand 10 after
604 default: 617 default:
605 NOTREACHED(); 618 NOTREACHED();
606 } 619 }
607 } 620 }
608 621
609 void ToplevelWindowEventHandler::ResizerWindowDestroyed() { 622 void ToplevelWindowEventHandler::ResizerWindowDestroyed() {
610 CompleteDrag(DRAG_RESIZER_WINDOW_DESTROYED); 623 CompleteDrag(DRAG_RESIZER_WINDOW_DESTROYED);
611 } 624 }
612 625
613 } // namespace ash 626 } // namespace ash
OLDNEW
« no previous file with comments | « ash/wm/system_gesture_event_filter_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698