| 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 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 143 bool DefaultState::ProcessCompoundEvents(WindowState* window_state, | 143 bool DefaultState::ProcessCompoundEvents(WindowState* window_state, |
| 144 WMEvent event) { | 144 WMEvent event) { |
| 145 aura::Window* window = window_state->window(); | 145 aura::Window* window = window_state->window(); |
| 146 | 146 |
| 147 switch (event) { | 147 switch (event) { |
| 148 case TOGGLE_MAXIMIZE_CAPTION: | 148 case TOGGLE_MAXIMIZE_CAPTION: |
| 149 if (window_state->IsFullscreen()) { | 149 if (window_state->IsFullscreen()) { |
| 150 window_state->ToggleFullscreen(); | 150 window_state->ToggleFullscreen(); |
| 151 } else if (window_state->IsMaximized()) { | 151 } else if (window_state->IsMaximized()) { |
| 152 window_state->Restore(); | 152 window_state->Restore(); |
| 153 } else if (window_state->IsNormalShowType() || | 153 } else if (window_state->IsNormalOrSnapped()) { |
| 154 window_state->IsSnapped()) { | |
| 155 if (window_state->CanMaximize()) | 154 if (window_state->CanMaximize()) |
| 156 window_state->Maximize(); | 155 window_state->Maximize(); |
| 157 } | 156 } |
| 158 return true; | 157 return true; |
| 159 case TOGGLE_MAXIMIZE: | 158 case TOGGLE_MAXIMIZE: |
| 160 if (window_state->IsFullscreen()) | 159 if (window_state->IsFullscreen()) |
| 161 window_state->ToggleFullscreen(); | 160 window_state->ToggleFullscreen(); |
| 162 else if (window_state->IsMaximized()) | 161 else if (window_state->IsMaximized()) |
| 163 window_state->Restore(); | 162 window_state->Restore(); |
| 164 else if (window_state->CanMaximize()) | 163 else if (window_state->CanMaximize()) |
| (...skipping 24 matching lines...) Expand all Loading... |
| 189 work_area.height())); | 188 work_area.height())); |
| 190 } | 189 } |
| 191 return true; | 190 return true; |
| 192 } | 191 } |
| 193 case TOGGLE_HORIZONTAL_MAXIMIZE: { | 192 case TOGGLE_HORIZONTAL_MAXIMIZE: { |
| 194 // Maximize horizontally if: | 193 // Maximize horizontally if: |
| 195 // - The window does not have a max width defined. | 194 // - The window does not have a max width defined. |
| 196 // - The window is snapped or has the normal show type. | 195 // - The window is snapped or has the normal show type. |
| 197 if (window->delegate()->GetMaximumSize().width() != 0) | 196 if (window->delegate()->GetMaximumSize().width() != 0) |
| 198 return true; | 197 return true; |
| 199 if (!window_state->IsNormalShowType() && !window_state->IsSnapped()) | 198 if (!window_state->IsNormalOrSnapped()) |
| 200 return true; | 199 return true; |
| 201 gfx::Rect work_area = | 200 gfx::Rect work_area = |
| 202 ScreenUtil::GetDisplayWorkAreaBoundsInParent(window); | 201 ScreenUtil::GetDisplayWorkAreaBoundsInParent(window); |
| 203 if (window_state->IsNormalShowType() && | 202 if (window_state->IsNormalShowType() && |
| 204 window_state->HasRestoreBounds() && | 203 window_state->HasRestoreBounds() && |
| 205 (window->bounds().width() == work_area.width() && | 204 (window->bounds().width() == work_area.width() && |
| 206 window->bounds().x() == work_area.x())) { | 205 window->bounds().x() == work_area.x())) { |
| 207 window_state->SetAndClearRestoreBounds(); | 206 window_state->SetAndClearRestoreBounds(); |
| 208 } else { | 207 } else { |
| 209 gfx::Rect new_bounds(work_area.x(), | 208 gfx::Rect new_bounds(work_area.x(), |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 359 !IsMaximizedOrFullscreenWindowShowType(old_show_type)) { | 358 !IsMaximizedOrFullscreenWindowShowType(old_show_type)) { |
| 360 window_state->SaveCurrentBoundsForRestore(); | 359 window_state->SaveCurrentBoundsForRestore(); |
| 361 } | 360 } |
| 362 | 361 |
| 363 // When restoring from a minimized state, we want to restore to the previous | 362 // When restoring from a minimized state, we want to restore to the previous |
| 364 // bounds. However, we want to maintain the restore bounds. (The restore | 363 // bounds. However, we want to maintain the restore bounds. (The restore |
| 365 // bounds are set if a user maximized the window in one axis by double | 364 // bounds are set if a user maximized the window in one axis by double |
| 366 // clicking the window border for example). | 365 // clicking the window border for example). |
| 367 gfx::Rect restore; | 366 gfx::Rect restore; |
| 368 if (old_show_type == SHOW_TYPE_MINIMIZED && | 367 if (old_show_type == SHOW_TYPE_MINIMIZED && |
| 369 window_state->IsNormalShowState() && | 368 window_state->IsNormalOrSnapped() && |
| 370 window_state->HasRestoreBounds() && | 369 window_state->HasRestoreBounds() && |
| 371 !window_state->unminimize_to_restore_bounds()) { | 370 !window_state->unminimize_to_restore_bounds()) { |
| 372 restore = window_state->GetRestoreBoundsInScreen(); | 371 restore = window_state->GetRestoreBoundsInScreen(); |
| 373 window_state->SaveCurrentBoundsForRestore(); | 372 window_state->SaveCurrentBoundsForRestore(); |
| 374 } | 373 } |
| 375 | 374 |
| 376 if (window_state->IsMaximizedOrFullscreen()) | 375 if (window_state->IsMaximizedOrFullscreen()) |
| 377 MoveToDisplayForRestore(window_state); | 376 MoveToDisplayForRestore(window_state); |
| 378 | 377 |
| 379 WindowShowType show_type = window_state->window_show_type(); | 378 WindowShowType show_type = window_state->window_show_type(); |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 445 !window_state->window()->layer()->visible()) { | 444 !window_state->window()->layer()->visible()) { |
| 446 // The layer may be hidden if the window was previously minimized. Make | 445 // The layer may be hidden if the window was previously minimized. Make |
| 447 // sure it's visible. | 446 // sure it's visible. |
| 448 window_state->window()->Show(); | 447 window_state->window()->Show(); |
| 449 if (old_show_type == SHOW_TYPE_MINIMIZED && | 448 if (old_show_type == SHOW_TYPE_MINIMIZED && |
| 450 !window_state->IsMaximizedOrFullscreen()) { | 449 !window_state->IsMaximizedOrFullscreen()) { |
| 451 window_state->set_unminimize_to_restore_bounds(false); | 450 window_state->set_unminimize_to_restore_bounds(false); |
| 452 } | 451 } |
| 453 } | 452 } |
| 454 | 453 |
| 455 if (window_state->IsNormalShowState()) | 454 if (window_state->IsNormalOrSnapped()) |
| 456 window_state->ClearRestoreBounds(); | 455 window_state->ClearRestoreBounds(); |
| 457 | 456 |
| 458 // Set the restore rectangle to the previously set restore rectangle. | 457 // Set the restore rectangle to the previously set restore rectangle. |
| 459 if (!restore.IsEmpty()) | 458 if (!restore.IsEmpty()) |
| 460 window_state->SetRestoreBoundsInScreen(restore); | 459 window_state->SetRestoreBoundsInScreen(restore); |
| 461 } | 460 } |
| 462 | 461 |
| 463 bool DefaultState::SetMaximizedOrFullscreenBounds(WindowState* window_state) { | 462 bool DefaultState::SetMaximizedOrFullscreenBounds(WindowState* window_state) { |
| 464 DCHECK(!window_state->is_dragged()); | 463 DCHECK(!window_state->is_dragged()); |
| 465 if (window_state->IsMaximized()) { | 464 if (window_state->IsMaximized()) { |
| 466 window_state->SetBoundsDirect( | 465 window_state->SetBoundsDirect( |
| 467 ScreenUtil::GetMaximizedWindowBoundsInParent(window_state->window())); | 466 ScreenUtil::GetMaximizedWindowBoundsInParent(window_state->window())); |
| 468 return true; | 467 return true; |
| 469 } | 468 } |
| 470 if (window_state->IsFullscreen()) { | 469 if (window_state->IsFullscreen()) { |
| 471 window_state->SetBoundsDirect( | 470 window_state->SetBoundsDirect( |
| 472 ScreenUtil::GetDisplayBoundsInParent(window_state->window())); | 471 ScreenUtil::GetDisplayBoundsInParent(window_state->window())); |
| 473 return true; | 472 return true; |
| 474 } | 473 } |
| 475 return false; | 474 return false; |
| 476 } | 475 } |
| 477 | 476 |
| 478 } // namespace wm | 477 } // namespace wm |
| 479 } // namespace ash | 478 } // namespace ash |
| OLD | NEW |