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

Side by Side Diff: ash/wm/dock/docked_window_resizer.cc

Issue 23431009: Windows docking should get triggered by pressing against the screen edge (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Windows docking should get triggered by pressing against the screen edge Created 7 years, 3 months 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/dock/docked_window_resizer.h" 5 #include "ash/wm/dock/docked_window_resizer.h"
6 6
7 #include "ash/ash_switches.h" 7 #include "ash/ash_switches.h"
8 #include "ash/display/display_controller.h"
8 #include "ash/launcher/launcher.h" 9 #include "ash/launcher/launcher.h"
9 #include "ash/root_window_controller.h" 10 #include "ash/root_window_controller.h"
10 #include "ash/screen_ash.h" 11 #include "ash/screen_ash.h"
11 #include "ash/shelf/shelf_types.h" 12 #include "ash/shelf/shelf_types.h"
12 #include "ash/shelf/shelf_widget.h" 13 #include "ash/shelf/shelf_widget.h"
13 #include "ash/shell.h" 14 #include "ash/shell.h"
14 #include "ash/shell_window_ids.h" 15 #include "ash/shell_window_ids.h"
15 #include "ash/wm/coordinate_conversion.h" 16 #include "ash/wm/coordinate_conversion.h"
16 #include "ash/wm/dock/docked_window_layout_manager.h" 17 #include "ash/wm/dock/docked_window_layout_manager.h"
17 #include "ash/wm/property_util.h" 18 #include "ash/wm/property_util.h"
18 #include "ash/wm/window_properties.h" 19 #include "ash/wm/window_properties.h"
19 #include "ash/wm/workspace/magnetism_matcher.h" 20 #include "ash/wm/workspace/magnetism_matcher.h"
20 #include "ash/wm/workspace/phantom_window_controller.h"
21 #include "ash/wm/workspace/workspace_window_resizer.h" 21 #include "ash/wm/workspace/workspace_window_resizer.h"
22 #include "base/command_line.h" 22 #include "base/command_line.h"
23 #include "ui/aura/client/aura_constants.h" 23 #include "ui/aura/client/aura_constants.h"
24 #include "ui/aura/env.h" 24 #include "ui/aura/env.h"
25 #include "ui/aura/root_window.h" 25 #include "ui/aura/root_window.h"
26 #include "ui/aura/window.h" 26 #include "ui/aura/window.h"
27 #include "ui/aura/window_delegate.h" 27 #include "ui/aura/window_delegate.h"
28 #include "ui/base/hit_test.h" 28 #include "ui/base/hit_test.h"
29 #include "ui/base/ui_base_types.h" 29 #include "ui/base/ui_base_types.h"
30 #include "ui/gfx/screen.h" 30 #include "ui/gfx/screen.h"
31 #include "ui/views/widget/widget.h" 31 #include "ui/views/widget/widget.h"
32 32
33 namespace ash { 33 namespace ash {
34 namespace internal { 34 namespace internal {
35 35
36 namespace { 36 namespace {
37 37
38 DockedWindowLayoutManager* GetDockedLayoutManagerAtPoint( 38 DockedWindowLayoutManager* GetDockedLayoutManagerAtPoint(
39 const gfx::Point& point) { 39 const gfx::Point& point) {
40 gfx::Display display = ScreenAsh::FindDisplayContainingPoint(point);
41 if (!display.is_valid())
42 return NULL;
43 aura::RootWindow* root = Shell::GetInstance()->display_controller()->
44 GetRootWindowForDisplayId(display.id());
40 aura::Window* dock_container = Shell::GetContainer( 45 aura::Window* dock_container = Shell::GetContainer(
41 wm::GetRootWindowAt(point), 46 root, kShellWindowId_DockedContainer);
42 kShellWindowId_DockedContainer);
43 return static_cast<DockedWindowLayoutManager*>( 47 return static_cast<DockedWindowLayoutManager*>(
44 dock_container->layout_manager()); 48 dock_container->layout_manager());
45 } 49 }
46 50
47 } // namespace 51 } // namespace
48 52
49 DockedWindowResizer::~DockedWindowResizer() { 53 DockedWindowResizer::~DockedWindowResizer() {
50 if (destroyed_) 54 if (destroyed_)
51 *destroyed_ = true; 55 *destroyed_ = true;
52 } 56 }
(...skipping 13 matching lines...) Expand all
66 void DockedWindowResizer::Drag(const gfx::Point& location, int event_flags) { 70 void DockedWindowResizer::Drag(const gfx::Point& location, int event_flags) {
67 last_location_ = location; 71 last_location_ = location;
68 wm::ConvertPointToScreen(GetTarget()->parent(), &last_location_); 72 wm::ConvertPointToScreen(GetTarget()->parent(), &last_location_);
69 bool destroyed = false; 73 bool destroyed = false;
70 if (!did_move_or_resize_) { 74 if (!did_move_or_resize_) {
71 did_move_or_resize_ = true; 75 did_move_or_resize_ = true;
72 StartedDragging(); 76 StartedDragging();
73 } 77 }
74 gfx::Point offset; 78 gfx::Point offset;
75 gfx::Rect bounds(CalculateBoundsForDrag(details_, location)); 79 gfx::Rect bounds(CalculateBoundsForDrag(details_, location));
80 LOG(INFO) << "Drag to " << bounds.ToString();
76 bool set_tracked_by_workspace = MaybeSnapToEdge(bounds, &offset); 81 bool set_tracked_by_workspace = MaybeSnapToEdge(bounds, &offset);
77 82
78 // Temporarily clear kWindowTrackedByWorkspaceKey for windows that are snapped 83 // Temporarily clear kWindowTrackedByWorkspaceKey for windows that are snapped
79 // to screen edges e.g. when they are docked. This prevents the windows from 84 // to screen edges e.g. when they are docked. This prevents the windows from
80 // getting snapped to other nearby windows during the drag. 85 // getting snapped to other nearby windows during the drag.
81 bool tracked_by_workspace = GetTrackedByWorkspace(GetTarget()); 86 bool tracked_by_workspace = GetTrackedByWorkspace(GetTarget());
82 if (set_tracked_by_workspace) 87 if (set_tracked_by_workspace)
83 SetTrackedByWorkspace(GetTarget(), false); 88 SetTrackedByWorkspace(GetTarget(), false);
84 gfx::Point modified_location(location.x() + offset.x(), 89 gfx::Point modified_location(location.x() + offset.x(),
85 location.y() + offset.y()); 90 location.y() + offset.y());
86 destroyed_ = &destroyed; 91 destroyed_ = &destroyed;
87 next_window_resizer_->Drag(modified_location, event_flags); 92 next_window_resizer_->Drag(modified_location, event_flags);
88 93
89 // TODO(varkha): Refactor the way WindowResizer calls into other window 94 // TODO(varkha): Refactor the way WindowResizer calls into other window
90 // resizers to avoid the awkward pattern here for checking if 95 // resizers to avoid the awkward pattern here for checking if
91 // next_window_resizer_ destroys the resizer object. 96 // next_window_resizer_ destroys the resizer object.
92 if (destroyed) 97 if (destroyed)
93 return; 98 return;
94 destroyed_ = NULL; 99 destroyed_ = NULL;
95 if (set_tracked_by_workspace) 100 if (set_tracked_by_workspace)
96 SetTrackedByWorkspace(GetTarget(), tracked_by_workspace); 101 SetTrackedByWorkspace(GetTarget(), tracked_by_workspace);
97 102
98 DockedWindowLayoutManager* new_dock_layout = 103 DockedWindowLayoutManager* new_dock_layout =
99 GetDockedLayoutManagerAtPoint(last_location_); 104 GetDockedLayoutManagerAtPoint(last_location_);
100 if (new_dock_layout != dock_layout_) { 105 if (new_dock_layout && new_dock_layout != dock_layout_) {
101 // The window is being dragged to a new display. If the previous 106 // The window is being dragged to a new display. If the previous
102 // container is the current parent of the window it will be informed of 107 // container is the current parent of the window it will be informed of
103 // the end of drag when the window is reparented, otherwise let the 108 // the end of drag when the window is reparented, otherwise let the
104 // previous container know the drag is complete. If we told the 109 // previous container know the drag is complete. If we told the
105 // window's parent that the drag was complete it would begin 110 // window's parent that the drag was complete it would begin
106 // positioning the window. 111 // positioning the window.
107 if (is_docked_) 112 if (is_docked_)
108 dock_layout_->UndockDraggedWindow(); 113 dock_layout_->UndockDraggedWindow();
109 if (dock_layout_ != initial_dock_layout_) 114 if (dock_layout_ != initial_dock_layout_)
110 dock_layout_->FinishDragging(); 115 dock_layout_->FinishDragging();
111 is_docked_ = false; 116 is_docked_ = false;
112 dock_layout_ = new_dock_layout; 117 dock_layout_ = new_dock_layout;
113 // The window's initial layout manager already knows that the drag is 118 // The window's initial layout manager already knows that the drag is
114 // in progress for this window. 119 // in progress for this window.
115 if (new_dock_layout != initial_dock_layout_) 120 if (new_dock_layout != initial_dock_layout_)
116 new_dock_layout->StartDragging(GetTarget()); 121 new_dock_layout->StartDragging(GetTarget());
117 } 122 }
118 123 // Window could get marked as docked by the SnapSizer, so update the state.
119 // Show snapping animation when a window touches a screen edge or when 124 is_docked_ = dock_layout_->is_dragged_window_docked();
120 // it is about to get docked.
121 DockedAlignment new_docked_alignment = GetDraggedWindowAlignment();
122 if (new_docked_alignment != DOCKED_ALIGNMENT_NONE) {
123 if (!is_docked_) {
124 dock_layout_->DockDraggedWindow(GetTarget());
125 is_docked_ = true;
126 }
127 UpdateSnapPhantomWindow();
128 } else {
129 if (is_docked_) {
130 dock_layout_->UndockDraggedWindow();
131 is_docked_ = false;
132 }
133 // Clear phantom window when a window gets undocked.
134 snap_phantom_window_controller_.reset();
135 }
136 } 125 }
137 126
138 void DockedWindowResizer::CompleteDrag(int event_flags) { 127 void DockedWindowResizer::CompleteDrag(int event_flags) {
139 snap_phantom_window_controller_.reset();
140
141 // Temporarily clear kWindowTrackedByWorkspaceKey for panels so that they 128 // Temporarily clear kWindowTrackedByWorkspaceKey for panels so that they
142 // don't get forced into the workspace that may be shrunken because of docked 129 // don't get forced into the workspace that may be shrunken because of docked
143 // windows. 130 // windows.
144 bool tracked_by_workspace = GetTrackedByWorkspace(GetTarget()); 131 bool tracked_by_workspace = GetTrackedByWorkspace(GetTarget());
145 bool set_tracked_by_workspace = was_docked_; 132 bool set_tracked_by_workspace = was_docked_;
146 if (set_tracked_by_workspace) 133 if (set_tracked_by_workspace)
147 SetTrackedByWorkspace(GetTarget(), false); 134 SetTrackedByWorkspace(GetTarget(), false);
148 // The root window can change when dragging into a different screen. 135 // The root window can change when dragging into a different screen.
149 next_window_resizer_->CompleteDrag(event_flags); 136 next_window_resizer_->CompleteDrag(event_flags);
150 FinishedDragging(); 137 FinishedDragging();
151 if (set_tracked_by_workspace) 138 if (set_tracked_by_workspace)
152 SetTrackedByWorkspace(GetTarget(), tracked_by_workspace); 139 SetTrackedByWorkspace(GetTarget(), tracked_by_workspace);
153 } 140 }
154 141
155 void DockedWindowResizer::RevertDrag() { 142 void DockedWindowResizer::RevertDrag() {
156 snap_phantom_window_controller_.reset();
157
158 // Temporarily clear kWindowTrackedByWorkspaceKey for panels so that they 143 // Temporarily clear kWindowTrackedByWorkspaceKey for panels so that they
159 // don't get forced into the workspace that may be shrunken because of docked 144 // don't get forced into the workspace that may be shrunken because of docked
160 // windows. 145 // windows.
161 bool tracked_by_workspace = GetTrackedByWorkspace(GetTarget()); 146 bool tracked_by_workspace = GetTrackedByWorkspace(GetTarget());
162 bool set_tracked_by_workspace = was_docked_; 147 bool set_tracked_by_workspace = was_docked_;
163 if (set_tracked_by_workspace) 148 if (set_tracked_by_workspace)
164 SetTrackedByWorkspace(GetTarget(), false); 149 SetTrackedByWorkspace(GetTarget(), false);
165 next_window_resizer_->RevertDrag(); 150 next_window_resizer_->RevertDrag();
151 // Restore docked state to what it was before the drag if necessary.
152 if (was_docked_ && !is_docked_) {
153 dock_layout_->DockDraggedWindow(GetTarget());
154 is_docked_ = was_docked_;
155 }
166 FinishedDragging(); 156 FinishedDragging();
167 if (set_tracked_by_workspace) 157 if (set_tracked_by_workspace)
168 SetTrackedByWorkspace(GetTarget(), tracked_by_workspace); 158 SetTrackedByWorkspace(GetTarget(), tracked_by_workspace);
169 } 159 }
170 160
171 aura::Window* DockedWindowResizer::GetTarget() { 161 aura::Window* DockedWindowResizer::GetTarget() {
172 return next_window_resizer_->GetTarget(); 162 return next_window_resizer_->GetTarget();
173 } 163 }
174 164
175 const gfx::Point& DockedWindowResizer::GetInitialLocation() const { 165 const gfx::Point& DockedWindowResizer::GetInitialLocation() const {
(...skipping 14 matching lines...) Expand all
190 aura::Window* dock_container = Shell::GetContainer( 180 aura::Window* dock_container = Shell::GetContainer(
191 details.window->GetRootWindow(), 181 details.window->GetRootWindow(),
192 kShellWindowId_DockedContainer); 182 kShellWindowId_DockedContainer);
193 dock_layout_ = static_cast<DockedWindowLayoutManager*>( 183 dock_layout_ = static_cast<DockedWindowLayoutManager*>(
194 dock_container->layout_manager()); 184 dock_container->layout_manager());
195 initial_dock_layout_ = dock_layout_; 185 initial_dock_layout_ = dock_layout_;
196 was_docked_ = details.window->parent() == dock_container; 186 was_docked_ = details.window->parent() == dock_container;
197 is_docked_ = was_docked_; 187 is_docked_ = was_docked_;
198 } 188 }
199 189
200 DockedAlignment DockedWindowResizer::GetDraggedWindowAlignment() {
201 aura::Window* window = GetTarget();
202 DockedWindowLayoutManager* layout_manager =
203 GetDockedLayoutManagerAtPoint(last_location_);
204 const DockedAlignment alignment = layout_manager->CalculateAlignment();
205 const gfx::Rect& bounds(window->GetBoundsInScreen());
206
207 // Check if the window is touching the edge - it may need to get docked.
208 if (alignment == DOCKED_ALIGNMENT_NONE)
209 return layout_manager->GetAlignmentOfWindow(window);
210
211 // Both bounds and pointer location are checked because some drags involve
212 // stickiness at the workspace-to-dock boundary and so the |location| may be
213 // outside of the |bounds|.
214 // It is also possible that all the docked windows are minimized or hidden
215 // in which case the dragged window needs to be exactly touching the same
216 // edge that those docked windows were aligned before they got minimized.
217 // TODO(varkha): Consider eliminating sticky behavior on that boundary when
218 // a pointer enters docked area.
219 if ((layout_manager->docked_bounds().Intersects(bounds) &&
220 layout_manager->docked_bounds().Contains(last_location_)) ||
221 alignment == layout_manager->GetAlignmentOfWindow(window)) {
222 // A window is being added to other docked windows (on the same side).
223 return alignment;
224 }
225 return DOCKED_ALIGNMENT_NONE;
226 }
227
228 bool DockedWindowResizer::MaybeSnapToEdge(const gfx::Rect& bounds, 190 bool DockedWindowResizer::MaybeSnapToEdge(const gfx::Rect& bounds,
229 gfx::Point* offset) { 191 gfx::Point* offset) {
230 aura::Window* dock_container = Shell::GetContainer( 192 // Windows only snap magnetically when they were previously docked.
231 wm::GetRootWindowAt(last_location_), 193 if (!was_docked_)
232 kShellWindowId_DockedContainer); 194 return false;
233 DockedAlignment dock_alignment = 195 DockedAlignment dock_alignment = dock_layout_->CalculateAlignment();
234 GetDockedLayoutManagerAtPoint(last_location_)->CalculateAlignment();
235 gfx::Rect dock_bounds = ScreenAsh::ConvertRectFromScreen( 196 gfx::Rect dock_bounds = ScreenAsh::ConvertRectFromScreen(
236 GetTarget()->parent(), dock_container->GetBoundsInScreen()); 197 GetTarget()->parent(),
237 // Windows only snap magnetically when they are close to the edge of the 198 dock_layout_->dock_container()->GetBoundsInScreen());
238 // screen and when the cursor is over other docked windows.
239 // When a window being dragged is the last window that was previously
240 // docked it is still allowed to magnetically snap to either side.
241 bool can_snap = was_docked_ ||
242 (GetDraggedWindowAlignment() != DOCKED_ALIGNMENT_NONE);
243 if (!can_snap)
244 return false;
245 199
246 // Distance in pixels that the cursor must move past an edge for a window 200 // Distance in pixels that the cursor must move past an edge for a window
247 // to move beyond that edge. Same constant as in WorkspaceWindowResizer 201 // to move beyond that edge. Same constant as in WorkspaceWindowResizer
248 // is used for consistency. 202 // is used for consistency.
249 const int kStickyDistance = WorkspaceWindowResizer::kStickyDistancePixels; 203 const int kStickyDistance = WorkspaceWindowResizer::kStickyDistancePixels;
250 204
251 // Short-range magnetism when retaining docked state. Same constant as in 205 // Short-range magnetism when retaining docked state. Same constant as in
252 // MagnetismMatcher is used for consistency. 206 // MagnetismMatcher is used for consistency.
253 const int kSnapToDockDistance = MagnetismMatcher::kMagneticDistance; 207 const int kSnapToDockDistance = MagnetismMatcher::kMagneticDistance;
254 208
255 if (dock_alignment == DOCKED_ALIGNMENT_LEFT || 209 if (dock_alignment == DOCKED_ALIGNMENT_LEFT ||
256 (dock_alignment == DOCKED_ALIGNMENT_NONE && was_docked_)) { 210 dock_alignment == DOCKED_ALIGNMENT_NONE) {
257 const int distance = bounds.x() - dock_bounds.x(); 211 const int distance = bounds.x() - dock_bounds.x();
258 if (distance < (was_docked_ ? kSnapToDockDistance : 0) && 212 if (distance < kSnapToDockDistance && distance > -kStickyDistance) {
259 distance > -kStickyDistance) {
260 offset->set_x(-distance); 213 offset->set_x(-distance);
261 return true; 214 return true;
262 } 215 }
263 } 216 }
264 if (dock_alignment == DOCKED_ALIGNMENT_RIGHT || 217 if (dock_alignment == DOCKED_ALIGNMENT_RIGHT ||
265 (dock_alignment == DOCKED_ALIGNMENT_NONE && was_docked_)) { 218 dock_alignment == DOCKED_ALIGNMENT_NONE) {
266 const int distance = dock_bounds.right() - bounds.right(); 219 const int distance = dock_bounds.right() - bounds.right();
267 if (distance < (was_docked_ ? kSnapToDockDistance : 0) && 220 if (distance < kSnapToDockDistance && distance > -kStickyDistance) {
268 distance > -kStickyDistance) {
269 offset->set_x(distance); 221 offset->set_x(distance);
270 return true; 222 return true;
271 } 223 }
272 } 224 }
273 return false; 225 return false;
274 } 226 }
275 227
276 void DockedWindowResizer::StartedDragging() { 228 void DockedWindowResizer::StartedDragging() {
277 // Tell the dock layout manager that we are dragging this window. 229 // Tell the dock layout manager that we are dragging this window.
278 // At this point we are not yet animating the window as it may not be 230 // At this point we are not yet animating the window as it may not be
(...skipping 16 matching lines...) Expand all
295 } 247 }
296 if (is_docked_) 248 if (is_docked_)
297 dock_layout_->DockDraggedWindow(GetTarget()); 249 dock_layout_->DockDraggedWindow(GetTarget());
298 } 250 }
299 251
300 void DockedWindowResizer::FinishedDragging() { 252 void DockedWindowResizer::FinishedDragging() {
301 if (!did_move_or_resize_) 253 if (!did_move_or_resize_)
302 return; 254 return;
303 255
304 aura::Window* window = GetTarget(); 256 aura::Window* window = GetTarget();
305 bool should_dock = was_docked_; 257 bool should_dock = is_docked_;
flackr 2013/09/06 02:18:43 if should_dock == is_docked_, can we just use is_d
varkha 2013/09/09 15:38:42 Done.
306 const bool attached_panel = 258 bool attached_panel = false;
259 if (details_.bounds_change & WindowResizer::kBoundsChange_Resizes) {
260 // No longer restore to pre-docked bounds if a window has been resized.
261 if (is_docked_)
262 ClearRestoreBounds(window);
263 } else {
264 attached_panel =
flackr 2013/09/06 02:18:43 Won't moving this check here make it possible to d
varkha 2013/09/09 15:38:42 No. is_docked_ will be false unless the window was
flackr 2013/09/09 19:06:57 I still think it feels wrong to only have attached
varkha 2013/09/09 20:37:54 See more explicit logic for preventing panel attac
307 window->type() == aura::client::WINDOW_TYPE_PANEL && 265 window->type() == aura::client::WINDOW_TYPE_PANEL &&
flackr 2013/09/06 02:18:43 nit: indent 4 spaces.
varkha 2013/09/09 15:38:42 Done.
308 window->GetProperty(kPanelAttachedKey); 266 window->GetProperty(kPanelAttachedKey);
309 // If a window was previously docked then keep it docked if it is resized and
310 // still aligned at the screen edge.
311 if ((was_docked_ ||
312 ((details_.bounds_change & WindowResizer::kBoundsChange_Repositions) &&
313 !(details_.bounds_change & WindowResizer::kBoundsChange_Resizes)))) {
314 should_dock = GetDraggedWindowAlignment() != DOCKED_ALIGNMENT_NONE;
315 } 267 }
316 268
317 // Check if the window needs to be docked or returned to workspace. 269 // Check if the window needs to be docked or returned to workspace.
318 aura::Window* dock_container = Shell::GetContainer( 270 aura::Window* dock_container = Shell::GetContainer(
319 window->GetRootWindow(), 271 window->GetRootWindow(),
320 kShellWindowId_DockedContainer); 272 kShellWindowId_DockedContainer);
321 if (!attached_panel && 273 if (!attached_panel &&
322 should_dock != (window->parent() == dock_container)) { 274 should_dock != (window->parent() == dock_container)) {
323 if (should_dock) { 275 if (should_dock) {
324 dock_container->AddChild(window); 276 dock_container->AddChild(window);
(...skipping 11 matching lines...) Expand all
336 } 288 }
337 } 289 }
338 dock_layout_->FinishDragging(); 290 dock_layout_->FinishDragging();
339 291
340 // If we started the drag in one root window and moved into another root 292 // If we started the drag in one root window and moved into another root
341 // but then canceled the drag we may need to inform the original layout 293 // but then canceled the drag we may need to inform the original layout
342 // manager that the drag is finished. 294 // manager that the drag is finished.
343 if (initial_dock_layout_ != dock_layout_) 295 if (initial_dock_layout_ != dock_layout_)
344 initial_dock_layout_->FinishDragging(); 296 initial_dock_layout_->FinishDragging();
345 is_docked_ = false; 297 is_docked_ = false;
346 } 298 // Retain restore bounds when dragging inside the docked area.
347 299 if (was_docked_ &&
flackr 2013/09/06 02:18:43 was_docked_ is true iff the window was docked befo
varkha 2013/09/09 15:38:42 That part is already handled by existing code in W
flackr 2013/09/09 19:06:57 I think it would make more sense to add an excepti
varkha 2013/09/09 20:37:54 I have noticed that I no longer need this since th
348 void DockedWindowResizer::UpdateSnapPhantomWindow() { 300 window->parent()->id() == kShellWindowId_DockedContainer &&
349 if (!did_move_or_resize_ || details_.window_component != HTCAPTION) 301 !(details_.bounds_change & WindowResizer::kBoundsChange_Resizes)) {
350 return; 302 gfx::Rect initial_bounds = ScreenAsh::ConvertRectToScreen(
351 303 window->parent(), details_.initial_bounds_in_parent);
352 if (!snap_phantom_window_controller_) { 304 SetRestoreBoundsInScreen(window, details_.restore_bounds.IsEmpty() ?
353 snap_phantom_window_controller_.reset( 305 initial_bounds :
354 new PhantomWindowController(GetTarget())); 306 details_.restore_bounds);
355 } 307 }
356 snap_phantom_window_controller_->Show(dock_layout_->dragged_bounds());
357 } 308 }
358 309
359 } // namespace internal 310 } // namespace internal
360 } // namespace ash 311 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698