Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |