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

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

Issue 24108003: [Cleanup] Rename WindowSettings to WindowState (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase fix 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 | Annotate | Revision Log
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/display/display_controller.h"
9 #include "ash/launcher/launcher.h" 9 #include "ash/launcher/launcher.h"
10 #include "ash/root_window_controller.h" 10 #include "ash/root_window_controller.h"
11 #include "ash/screen_ash.h" 11 #include "ash/screen_ash.h"
12 #include "ash/shelf/shelf_types.h" 12 #include "ash/shelf/shelf_types.h"
13 #include "ash/shelf/shelf_widget.h" 13 #include "ash/shelf/shelf_widget.h"
14 #include "ash/shell.h" 14 #include "ash/shell.h"
15 #include "ash/shell_window_ids.h" 15 #include "ash/shell_window_ids.h"
16 #include "ash/wm/coordinate_conversion.h" 16 #include "ash/wm/coordinate_conversion.h"
17 #include "ash/wm/dock/docked_window_layout_manager.h" 17 #include "ash/wm/dock/docked_window_layout_manager.h"
18 #include "ash/wm/property_util.h" 18 #include "ash/wm/window_state.h"
19 #include "ash/wm/window_settings.h"
20 #include "ash/wm/workspace/magnetism_matcher.h" 19 #include "ash/wm/workspace/magnetism_matcher.h"
21 #include "ash/wm/workspace/workspace_window_resizer.h" 20 #include "ash/wm/workspace/workspace_window_resizer.h"
22 #include "base/command_line.h" 21 #include "base/command_line.h"
23 #include "base/memory/weak_ptr.h" 22 #include "base/memory/weak_ptr.h"
24 #include "ui/aura/client/aura_constants.h" 23 #include "ui/aura/client/aura_constants.h"
25 #include "ui/aura/env.h" 24 #include "ui/aura/env.h"
26 #include "ui/aura/root_window.h" 25 #include "ui/aura/root_window.h"
27 #include "ui/aura/window.h" 26 #include "ui/aura/window.h"
28 #include "ui/aura/window_delegate.h" 27 #include "ui/aura/window_delegate.h"
29 #include "ui/base/hit_test.h" 28 #include "ui/base/hit_test.h"
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 did_move_or_resize_ = true; 72 did_move_or_resize_ = true;
74 StartedDragging(); 73 StartedDragging();
75 } 74 }
76 gfx::Point offset; 75 gfx::Point offset;
77 gfx::Rect bounds(CalculateBoundsForDrag(details_, location)); 76 gfx::Rect bounds(CalculateBoundsForDrag(details_, location));
78 bool set_tracked_by_workspace = MaybeSnapToEdge(bounds, &offset); 77 bool set_tracked_by_workspace = MaybeSnapToEdge(bounds, &offset);
79 78
80 // Temporarily clear kWindowTrackedByWorkspaceKey for windows that are snapped 79 // Temporarily clear kWindowTrackedByWorkspaceKey for windows that are snapped
81 // to screen edges e.g. when they are docked. This prevents the windows from 80 // to screen edges e.g. when they are docked. This prevents the windows from
82 // getting snapped to other nearby windows during the drag. 81 // getting snapped to other nearby windows during the drag.
83 wm::WindowSettings* window_settings = wm::GetWindowSettings(GetTarget()); 82 wm::WindowState* window_state = wm::GetWindowState(GetTarget());
84 bool was_tracked_by_workspace = window_settings->tracked_by_workspace(); 83 bool was_tracked_by_workspace = window_state->tracked_by_workspace();
85 if (set_tracked_by_workspace) 84 if (set_tracked_by_workspace)
86 window_settings->SetTrackedByWorkspace(false); 85 window_state->SetTrackedByWorkspace(false);
87 gfx::Point modified_location(location.x() + offset.x(), 86 gfx::Point modified_location(location.x() + offset.x(),
88 location.y() + offset.y()); 87 location.y() + offset.y());
89 88
90 base::WeakPtr<DockedWindowResizer> resizer(weak_ptr_factory_.GetWeakPtr()); 89 base::WeakPtr<DockedWindowResizer> resizer(weak_ptr_factory_.GetWeakPtr());
91 next_window_resizer_->Drag(modified_location, event_flags); 90 next_window_resizer_->Drag(modified_location, event_flags);
92 if (!resizer) 91 if (!resizer)
93 return; 92 return;
94 window_settings->SetTrackedByWorkspace(was_tracked_by_workspace); 93 window_state->SetTrackedByWorkspace(was_tracked_by_workspace);
95 94
96 DockedWindowLayoutManager* new_dock_layout = 95 DockedWindowLayoutManager* new_dock_layout =
97 GetDockedLayoutManagerAtPoint(last_location_); 96 GetDockedLayoutManagerAtPoint(last_location_);
98 if (new_dock_layout && new_dock_layout != dock_layout_) { 97 if (new_dock_layout && new_dock_layout != dock_layout_) {
99 // The window is being dragged to a new display. If the previous 98 // The window is being dragged to a new display. If the previous
100 // container is the current parent of the window it will be informed of 99 // container is the current parent of the window it will be informed of
101 // the end of drag when the window is reparented, otherwise let the 100 // the end of drag when the window is reparented, otherwise let the
102 // previous container know the drag is complete. If we told the 101 // previous container know the drag is complete. If we told the
103 // window's parent that the drag was complete it would begin 102 // window's parent that the drag was complete it would begin
104 // positioning the window. 103 // positioning the window.
105 if (is_docked_ && dock_layout_->is_dragged_window_docked()) 104 if (is_docked_ && dock_layout_->is_dragged_window_docked())
106 dock_layout_->UndockDraggedWindow(); 105 dock_layout_->UndockDraggedWindow();
107 if (dock_layout_ != initial_dock_layout_) 106 if (dock_layout_ != initial_dock_layout_)
108 dock_layout_->FinishDragging(); 107 dock_layout_->FinishDragging();
109 is_docked_ = false; 108 is_docked_ = false;
110 dock_layout_ = new_dock_layout; 109 dock_layout_ = new_dock_layout;
111 // The window's initial layout manager already knows that the drag is 110 // The window's initial layout manager already knows that the drag is
112 // in progress for this window. 111 // in progress for this window.
113 if (new_dock_layout != initial_dock_layout_) 112 if (new_dock_layout != initial_dock_layout_)
114 new_dock_layout->StartDragging(GetTarget()); 113 new_dock_layout->StartDragging(GetTarget());
115 } 114 }
116 // Window could get docked by the WorkspaceWindowResizer, update the state. 115 // Window could get docked by the WorkspaceWindowResizer, update the state.
117 is_docked_ = dock_layout_->is_dragged_window_docked(); 116 is_docked_ = dock_layout_->is_dragged_window_docked();
118 } 117 }
119 118
120 void DockedWindowResizer::CompleteDrag(int event_flags) { 119 void DockedWindowResizer::CompleteDrag(int event_flags) {
121 // Temporarily clear kWindowTrackedByWorkspaceKey for panels so that they 120 // Temporarily clear kWindowTrackedByWorkspaceKey for panels so that they
122 // don't get forced into the workspace that may be shrunken because of docked 121 // don't get forced into the workspace that may be shrunken because of docked
123 // windows. 122 // windows.
124 wm::WindowSettings* window_settings = wm::GetWindowSettings(GetTarget()); 123 wm::WindowState* window_state = wm::GetWindowState(GetTarget());
125 bool was_tracked_by_workspace = window_settings->tracked_by_workspace(); 124 bool was_tracked_by_workspace = window_state->tracked_by_workspace();
126 if (was_docked_) 125 if (was_docked_)
127 window_settings->SetTrackedByWorkspace(false); 126 window_state->SetTrackedByWorkspace(false);
128 // The root window can change when dragging into a different screen. 127 // The root window can change when dragging into a different screen.
129 next_window_resizer_->CompleteDrag(event_flags); 128 next_window_resizer_->CompleteDrag(event_flags);
130 FinishedDragging(); 129 FinishedDragging();
131 window_settings->SetTrackedByWorkspace(was_tracked_by_workspace); 130 window_state->SetTrackedByWorkspace(was_tracked_by_workspace);
132 } 131 }
133 132
134 void DockedWindowResizer::RevertDrag() { 133 void DockedWindowResizer::RevertDrag() {
135 // Temporarily clear kWindowTrackedByWorkspaceKey for panels so that they 134 // Temporarily clear kWindowTrackedByWorkspaceKey for panels so that they
136 // don't get forced into the workspace that may be shrunken because of docked 135 // don't get forced into the workspace that may be shrunken because of docked
137 // windows. 136 // windows.
138 wm::WindowSettings* window_settings = wm::GetWindowSettings(GetTarget()); 137 wm::WindowState* window_state = wm::GetWindowState(GetTarget());
139 bool was_tracked_by_workspace = window_settings->tracked_by_workspace(); 138 bool was_tracked_by_workspace = window_state->tracked_by_workspace();
140 if (was_docked_) 139 if (was_docked_)
141 window_settings->SetTrackedByWorkspace(false); 140 window_state->SetTrackedByWorkspace(false);
142 next_window_resizer_->RevertDrag(); 141 next_window_resizer_->RevertDrag();
143 // Restore docked state to what it was before the drag if necessary. 142 // Restore docked state to what it was before the drag if necessary.
144 if (was_docked_ && !is_docked_) { 143 if (was_docked_ && !is_docked_) {
145 dock_layout_->DockDraggedWindow(GetTarget()); 144 dock_layout_->DockDraggedWindow(GetTarget());
146 is_docked_ = was_docked_; 145 is_docked_ = was_docked_;
147 } 146 }
148 FinishedDragging(); 147 FinishedDragging();
149 window_settings->SetTrackedByWorkspace(was_tracked_by_workspace); 148 window_state->SetTrackedByWorkspace(was_tracked_by_workspace);
150 } 149 }
151 150
152 aura::Window* DockedWindowResizer::GetTarget() { 151 aura::Window* DockedWindowResizer::GetTarget() {
153 return next_window_resizer_->GetTarget(); 152 return next_window_resizer_->GetTarget();
154 } 153 }
155 154
156 const gfx::Point& DockedWindowResizer::GetInitialLocation() const { 155 const gfx::Point& DockedWindowResizer::GetInitialLocation() const {
157 return details_.initial_location_in_parent; 156 return details_.initial_location_in_parent;
158 } 157 }
159 158
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 // Tell the dock layout manager that we are dragging this window. 219 // Tell the dock layout manager that we are dragging this window.
221 // At this point we are not yet animating the window as it may not be 220 // At this point we are not yet animating the window as it may not be
222 // inside the docked area. 221 // inside the docked area.
223 dock_layout_->StartDragging(GetTarget()); 222 dock_layout_->StartDragging(GetTarget());
224 // Reparent workspace windows during the drag to elevate them above workspace. 223 // Reparent workspace windows during the drag to elevate them above workspace.
225 // Other windows for which the DockedWindowResizer is instantiated include 224 // Other windows for which the DockedWindowResizer is instantiated include
226 // panels and windows that are already docked. Those do not need reparenting. 225 // panels and windows that are already docked. Those do not need reparenting.
227 if (GetTarget()->type() != aura::client::WINDOW_TYPE_PANEL && 226 if (GetTarget()->type() != aura::client::WINDOW_TYPE_PANEL &&
228 GetTarget()->parent()->id() == kShellWindowId_DefaultContainer) { 227 GetTarget()->parent()->id() == kShellWindowId_DefaultContainer) {
229 // The window is going to be reparented - avoid completing the drag. 228 // The window is going to be reparented - avoid completing the drag.
230 wm::GetWindowSettings(GetTarget())->set_continue_drag_after_reparent(true); 229 wm::GetWindowState(GetTarget())->set_continue_drag_after_reparent(true);
231 230
232 // Reparent the window into the docked windows container in order to get it 231 // Reparent the window into the docked windows container in order to get it
233 // on top of other docked windows. 232 // on top of other docked windows.
234 aura::Window* docked_container = Shell::GetContainer( 233 aura::Window* docked_container = Shell::GetContainer(
235 GetTarget()->GetRootWindow(), 234 GetTarget()->GetRootWindow(),
236 kShellWindowId_DockedContainer); 235 kShellWindowId_DockedContainer);
237 docked_container->AddChild(GetTarget()); 236 docked_container->AddChild(GetTarget());
238 } 237 }
239 if (is_docked_) 238 if (is_docked_)
240 dock_layout_->DockDraggedWindow(GetTarget()); 239 dock_layout_->DockDraggedWindow(GetTarget());
241 } 240 }
242 241
243 void DockedWindowResizer::FinishedDragging() { 242 void DockedWindowResizer::FinishedDragging() {
244 if (!did_move_or_resize_) 243 if (!did_move_or_resize_)
245 return; 244 return;
246
247 aura::Window* window = GetTarget(); 245 aura::Window* window = GetTarget();
246 wm::WindowState* window_state = wm::GetWindowState(window);
248 const bool attached_panel = 247 const bool attached_panel =
249 window->type() == aura::client::WINDOW_TYPE_PANEL && 248 window->type() == aura::client::WINDOW_TYPE_PANEL &&
250 wm::GetWindowSettings(window)->panel_attached(); 249 window_state->panel_attached();
251 const bool is_resized = 250 const bool is_resized =
252 (details_.bounds_change & WindowResizer::kBoundsChange_Resizes) != 0; 251 (details_.bounds_change & WindowResizer::kBoundsChange_Resizes) != 0;
253 // No longer restore to pre-docked bounds if a window has been resized. 252 // No longer restore to pre-docked bounds if a window has been resized.
254 if (is_resized && is_docked_) 253 if (is_resized && is_docked_)
255 ClearRestoreBounds(window); 254 window_state->ClearRestoreBounds();
256 255
257 // Check if the window needs to be docked or returned to workspace. 256 // Check if the window needs to be docked or returned to workspace.
258 aura::Window* dock_container = Shell::GetContainer( 257 aura::Window* dock_container = Shell::GetContainer(
259 window->GetRootWindow(), 258 window->GetRootWindow(),
260 kShellWindowId_DockedContainer); 259 kShellWindowId_DockedContainer);
261 if ((is_resized || !attached_panel) && 260 if ((is_resized || !attached_panel) &&
262 is_docked_ != (window->parent() == dock_container)) { 261 is_docked_ != (window->parent() == dock_container)) {
263 if (is_docked_) { 262 if (is_docked_) {
264 dock_container->AddChild(window); 263 dock_container->AddChild(window);
265 } else if (window->parent()->id() == kShellWindowId_DockedContainer) { 264 } else if (window->parent()->id() == kShellWindowId_DockedContainer) {
(...skipping 14 matching lines...) Expand all
280 // If we started the drag in one root window and moved into another root 279 // If we started the drag in one root window and moved into another root
281 // but then canceled the drag we may need to inform the original layout 280 // but then canceled the drag we may need to inform the original layout
282 // manager that the drag is finished. 281 // manager that the drag is finished.
283 if (initial_dock_layout_ != dock_layout_) 282 if (initial_dock_layout_ != dock_layout_)
284 initial_dock_layout_->FinishDragging(); 283 initial_dock_layout_->FinishDragging();
285 is_docked_ = false; 284 is_docked_ = false;
286 } 285 }
287 286
288 } // namespace internal 287 } // namespace internal
289 } // namespace ash 288 } // namespace ash
OLDNEW
« no previous file with comments | « ash/wm/dock/docked_window_layout_manager_unittest.cc ('k') | ash/wm/dock/docked_window_resizer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698