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

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

Issue 597683003: Add window states docked; and docked minimized. Add wm window event to set docked and undocked. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@dock
Patch Set: Created 6 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/default_state.h" 5 #include "ash/wm/default_state.h"
6 6
7 #include "ash/display/display_controller.h" 7 #include "ash/display/display_controller.h"
8 #include "ash/screen_util.h" 8 #include "ash/screen_util.h"
9 #include "ash/shell.h" 9 #include "ash/shell.h"
10 #include "ash/shell_window_ids.h" 10 #include "ash/shell_window_ids.h"
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 DefaultState::~DefaultState() {} 71 DefaultState::~DefaultState() {}
72 72
73 void DefaultState::OnWMEvent(WindowState* window_state, 73 void DefaultState::OnWMEvent(WindowState* window_state,
74 const WMEvent* event) { 74 const WMEvent* event) {
75 if (ProcessWorkspaceEvents(window_state, event)) 75 if (ProcessWorkspaceEvents(window_state, event))
76 return; 76 return;
77 77
78 if (ProcessCompoundEvents(window_state, event)) 78 if (ProcessCompoundEvents(window_state, event))
79 return; 79 return;
80 80
81 WindowStateType current = window_state->GetStateType();
varkha 2014/09/23 22:35:31 nit: current_state_type would be more expressive n
dtapuska 2014/09/26 14:17:07 Acknowledged.
81 WindowStateType next_state_type = WINDOW_STATE_TYPE_NORMAL; 82 WindowStateType next_state_type = WINDOW_STATE_TYPE_NORMAL;
82 switch (event->type()) { 83 switch (event->type()) {
83 case WM_EVENT_NORMAL: 84 case WM_EVENT_NORMAL:
84 next_state_type = WINDOW_STATE_TYPE_NORMAL; 85 if (current == WINDOW_STATE_TYPE_DOCKED_MINIMIZED) {
varkha 2014/09/23 22:35:31 nit: Ternary? Here and below.
86 next_state_type = WINDOW_STATE_TYPE_DOCKED;
87 } else {
88 next_state_type = WINDOW_STATE_TYPE_NORMAL;
89 }
85 break; 90 break;
86 case WM_EVENT_MAXIMIZE: 91 case WM_EVENT_MAXIMIZE:
87 next_state_type = WINDOW_STATE_TYPE_MAXIMIZED; 92 next_state_type = WINDOW_STATE_TYPE_MAXIMIZED;
88 break; 93 break;
89 case WM_EVENT_MINIMIZE: 94 case WM_EVENT_MINIMIZE:
90 next_state_type = WINDOW_STATE_TYPE_MINIMIZED; 95 if (current == WINDOW_STATE_TYPE_DOCKED) {
96 next_state_type = WINDOW_STATE_TYPE_DOCKED_MINIMIZED;
97 } else {
98 next_state_type = WINDOW_STATE_TYPE_MINIMIZED;
99 }
91 break; 100 break;
92 case WM_EVENT_FULLSCREEN: 101 case WM_EVENT_FULLSCREEN:
93 next_state_type = WINDOW_STATE_TYPE_FULLSCREEN; 102 next_state_type = WINDOW_STATE_TYPE_FULLSCREEN;
94 break; 103 break;
95 case WM_EVENT_SNAP_LEFT: 104 case WM_EVENT_SNAP_LEFT:
96 next_state_type = WINDOW_STATE_TYPE_LEFT_SNAPPED; 105 next_state_type = WINDOW_STATE_TYPE_LEFT_SNAPPED;
97 break; 106 break;
98 case WM_EVENT_SNAP_RIGHT: 107 case WM_EVENT_SNAP_RIGHT:
99 next_state_type = WINDOW_STATE_TYPE_RIGHT_SNAPPED; 108 next_state_type = WINDOW_STATE_TYPE_RIGHT_SNAPPED;
100 break; 109 break;
110 case WM_EVENT_DOCK:
111 next_state_type = WINDOW_STATE_TYPE_DOCKED;
112 break;
113 case WM_EVENT_UNDOCK:
varkha 2014/09/23 22:35:31 Can we make it work without this event type?
dtapuska 2014/09/26 14:17:06 Done.
114 if (current == WINDOW_STATE_TYPE_DOCKED) {
115 next_state_type = WINDOW_STATE_TYPE_NORMAL;
116 } else if (current == WINDOW_STATE_TYPE_DOCKED_MINIMIZED) {
117 next_state_type = WINDOW_STATE_TYPE_MINIMIZED;
118 } else {
119 return;
varkha 2014/09/23 22:35:31 Does this ever happen (if not - NOTREACHED() would
dtapuska 2014/09/26 14:17:07 Done.
120 }
121 break;
101 case WM_EVENT_SET_BOUNDS: 122 case WM_EVENT_SET_BOUNDS:
102 SetBounds(window_state, static_cast<const SetBoundsEvent*>(event)); 123 SetBounds(window_state, static_cast<const SetBoundsEvent*>(event));
103 return; 124 return;
104 case WM_EVENT_SHOW_INACTIVE: 125 case WM_EVENT_SHOW_INACTIVE:
105 next_state_type = WINDOW_STATE_TYPE_INACTIVE; 126 next_state_type = WINDOW_STATE_TYPE_INACTIVE;
106 break; 127 break;
107 case WM_EVENT_TOGGLE_MAXIMIZE_CAPTION: 128 case WM_EVENT_TOGGLE_MAXIMIZE_CAPTION:
108 case WM_EVENT_TOGGLE_MAXIMIZE: 129 case WM_EVENT_TOGGLE_MAXIMIZE:
109 case WM_EVENT_TOGGLE_VERTICAL_MAXIMIZE: 130 case WM_EVENT_TOGGLE_VERTICAL_MAXIMIZE:
110 case WM_EVENT_TOGGLE_HORIZONTAL_MAXIMIZE: 131 case WM_EVENT_TOGGLE_HORIZONTAL_MAXIMIZE:
111 case WM_EVENT_TOGGLE_FULLSCREEN: 132 case WM_EVENT_TOGGLE_FULLSCREEN:
112 case WM_EVENT_CENTER: 133 case WM_EVENT_CENTER:
113 NOTREACHED() << "Compound event should not reach here:" << event; 134 NOTREACHED() << "Compound event should not reach here:" << event;
114 return; 135 return;
115 case WM_EVENT_ADDED_TO_WORKSPACE: 136 case WM_EVENT_ADDED_TO_WORKSPACE:
116 case WM_EVENT_WORKAREA_BOUNDS_CHANGED: 137 case WM_EVENT_WORKAREA_BOUNDS_CHANGED:
117 case WM_EVENT_DISPLAY_BOUNDS_CHANGED: 138 case WM_EVENT_DISPLAY_BOUNDS_CHANGED:
118 NOTREACHED() << "Workspace event should not reach here:" << event; 139 NOTREACHED() << "Workspace event should not reach here:" << event;
119 return; 140 return;
120 } 141 }
121 142
122 WindowStateType current = window_state->GetStateType();
123
124 if (next_state_type == current && window_state->IsSnapped()) { 143 if (next_state_type == current && window_state->IsSnapped()) {
125 gfx::Rect snapped_bounds = event->type() == WM_EVENT_SNAP_LEFT ? 144 gfx::Rect snapped_bounds = event->type() == WM_EVENT_SNAP_LEFT ?
126 GetDefaultLeftSnappedWindowBoundsInParent(window_state->window()) : 145 GetDefaultLeftSnappedWindowBoundsInParent(window_state->window()) :
127 GetDefaultRightSnappedWindowBoundsInParent(window_state->window()); 146 GetDefaultRightSnappedWindowBoundsInParent(window_state->window());
128 window_state->SetBoundsDirectAnimated(snapped_bounds); 147 window_state->SetBoundsDirectAnimated(snapped_bounds);
129 return; 148 return;
130 } 149 }
131 150
132 EnterToNextState(window_state, next_state_type); 151 EnterToNextState(window_state, next_state_type);
133 } 152 }
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 CenterWindow(window_state); 285 CenterWindow(window_state);
267 return true; 286 return true;
268 case WM_EVENT_NORMAL: 287 case WM_EVENT_NORMAL:
269 case WM_EVENT_MAXIMIZE: 288 case WM_EVENT_MAXIMIZE:
270 case WM_EVENT_MINIMIZE: 289 case WM_EVENT_MINIMIZE:
271 case WM_EVENT_FULLSCREEN: 290 case WM_EVENT_FULLSCREEN:
272 case WM_EVENT_SNAP_LEFT: 291 case WM_EVENT_SNAP_LEFT:
273 case WM_EVENT_SNAP_RIGHT: 292 case WM_EVENT_SNAP_RIGHT:
274 case WM_EVENT_SET_BOUNDS: 293 case WM_EVENT_SET_BOUNDS:
275 case WM_EVENT_SHOW_INACTIVE: 294 case WM_EVENT_SHOW_INACTIVE:
295 case WM_EVENT_DOCK:
296 case WM_EVENT_UNDOCK:
276 break; 297 break;
277 case WM_EVENT_ADDED_TO_WORKSPACE: 298 case WM_EVENT_ADDED_TO_WORKSPACE:
278 case WM_EVENT_WORKAREA_BOUNDS_CHANGED: 299 case WM_EVENT_WORKAREA_BOUNDS_CHANGED:
279 case WM_EVENT_DISPLAY_BOUNDS_CHANGED: 300 case WM_EVENT_DISPLAY_BOUNDS_CHANGED:
280 NOTREACHED() << "Workspace event should not reach here:" << event; 301 NOTREACHED() << "Workspace event should not reach here:" << event;
281 break; 302 break;
282 } 303 }
283 return false; 304 return false;
284 } 305 }
285 306
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 case WM_EVENT_TOGGLE_FULLSCREEN: 386 case WM_EVENT_TOGGLE_FULLSCREEN:
366 case WM_EVENT_CENTER: 387 case WM_EVENT_CENTER:
367 case WM_EVENT_NORMAL: 388 case WM_EVENT_NORMAL:
368 case WM_EVENT_MAXIMIZE: 389 case WM_EVENT_MAXIMIZE:
369 case WM_EVENT_MINIMIZE: 390 case WM_EVENT_MINIMIZE:
370 case WM_EVENT_FULLSCREEN: 391 case WM_EVENT_FULLSCREEN:
371 case WM_EVENT_SNAP_LEFT: 392 case WM_EVENT_SNAP_LEFT:
372 case WM_EVENT_SNAP_RIGHT: 393 case WM_EVENT_SNAP_RIGHT:
373 case WM_EVENT_SET_BOUNDS: 394 case WM_EVENT_SET_BOUNDS:
374 case WM_EVENT_SHOW_INACTIVE: 395 case WM_EVENT_SHOW_INACTIVE:
396 case WM_EVENT_DOCK:
397 case WM_EVENT_UNDOCK:
375 break; 398 break;
376 } 399 }
377 return false; 400 return false;
378 } 401 }
379 402
380 // static 403 // static
381 bool DefaultState::SetMaximizedOrFullscreenBounds(WindowState* window_state) { 404 bool DefaultState::SetMaximizedOrFullscreenBounds(WindowState* window_state) {
382 DCHECK(!window_state->is_dragged()); 405 DCHECK(!window_state->is_dragged());
383 if (window_state->IsMaximized()) { 406 if (window_state->IsMaximized()) {
384 window_state->SetBoundsDirect( 407 window_state->SetBoundsDirect(
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
500 WindowStateType previous_state_type) { 523 WindowStateType previous_state_type) {
501 aura::Window* window = window_state->window(); 524 aura::Window* window = window_state->window();
502 gfx::Rect bounds_in_parent; 525 gfx::Rect bounds_in_parent;
503 switch (state_type_) { 526 switch (state_type_) {
504 case WINDOW_STATE_TYPE_LEFT_SNAPPED: 527 case WINDOW_STATE_TYPE_LEFT_SNAPPED:
505 case WINDOW_STATE_TYPE_RIGHT_SNAPPED: 528 case WINDOW_STATE_TYPE_RIGHT_SNAPPED:
506 bounds_in_parent = state_type_ == WINDOW_STATE_TYPE_LEFT_SNAPPED ? 529 bounds_in_parent = state_type_ == WINDOW_STATE_TYPE_LEFT_SNAPPED ?
507 GetDefaultLeftSnappedWindowBoundsInParent(window_state->window()) : 530 GetDefaultLeftSnappedWindowBoundsInParent(window_state->window()) :
508 GetDefaultRightSnappedWindowBoundsInParent(window_state->window()); 531 GetDefaultRightSnappedWindowBoundsInParent(window_state->window());
509 break; 532 break;
533 case WINDOW_STATE_TYPE_DOCKED:
534 case WINDOW_STATE_TYPE_DOCKED_MINIMIZED:
535 break;
510 case WINDOW_STATE_TYPE_DEFAULT: 536 case WINDOW_STATE_TYPE_DEFAULT:
511 case WINDOW_STATE_TYPE_NORMAL: { 537 case WINDOW_STATE_TYPE_NORMAL: {
512 gfx::Rect work_area_in_parent = 538 gfx::Rect work_area_in_parent =
513 ScreenUtil::GetDisplayWorkAreaBoundsInParent(window_state->window()); 539 ScreenUtil::GetDisplayWorkAreaBoundsInParent(window_state->window());
514 if (window_state->HasRestoreBounds()) { 540 if (window_state->HasRestoreBounds()) {
515 bounds_in_parent = window_state->GetRestoreBoundsInParent(); 541 bounds_in_parent = window_state->GetRestoreBoundsInParent();
516 // Check if the |window|'s restored size is bigger than the working area 542 // Check if the |window|'s restored size is bigger than the working area
517 // This may happen if a window was resized to maximized bounds or if the 543 // This may happen if a window was resized to maximized bounds or if the
518 // display resolution changed while the window was maximized. 544 // display resolution changed while the window was maximized.
519 if (previous_state_type == WINDOW_STATE_TYPE_MAXIMIZED && 545 if (previous_state_type == WINDOW_STATE_TYPE_MAXIMIZED &&
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
608 ScreenUtil::GetDisplayWorkAreaBoundsInParent(window); 634 ScreenUtil::GetDisplayWorkAreaBoundsInParent(window);
609 center_in_parent.ClampToCenteredSize(window->bounds().size()); 635 center_in_parent.ClampToCenteredSize(window->bounds().size());
610 window_state->SetBoundsDirectAnimated(center_in_parent); 636 window_state->SetBoundsDirectAnimated(center_in_parent);
611 } 637 }
612 // Centering window is treated as if a user moved and resized the window. 638 // Centering window is treated as if a user moved and resized the window.
613 window_state->set_bounds_changed_by_user(true); 639 window_state->set_bounds_changed_by_user(true);
614 } 640 }
615 641
616 } // namespace wm 642 } // namespace wm
617 } // namespace ash 643 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698