diff options
author | flackr@chromium.org <flackr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-30 07:31:01 +0000 |
---|---|---|
committer | flackr@chromium.org <flackr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-30 07:31:01 +0000 |
commit | d0359da7b7917230b3d6ea8d2ec66e90b6bf9972 (patch) | |
tree | 78d6f056901a612505c83b3022a836267a195d13 /ash | |
parent | 56aac95bfe2163ea5567d3d17c8609265f3de5a1 (diff) | |
download | chromium_src-d0359da7b7917230b3d6ea8d2ec66e90b6bf9972.zip chromium_src-d0359da7b7917230b3d6ea8d2ec66e90b6bf9972.tar.gz chromium_src-d0359da7b7917230b3d6ea8d2ec66e90b6bf9972.tar.bz2 |
Exit overview before exiting maximize mode.
BUG=366605
TEST=MaximizeModeWindowManagerTest.ExitsOverview
TEST=Enter maximize mode, enter overview, exit maximize mode. Overview should have exited on exiting maximize mode.
Review URL: https://codereview.chromium.org/262433002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@267122 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ash')
-rw-r--r-- | ash/wm/maximize_mode/maximize_mode_window_manager.cc | 22 | ||||
-rw-r--r-- | ash/wm/maximize_mode/maximize_mode_window_manager_unittest.cc | 27 |
2 files changed, 45 insertions, 4 deletions
diff --git a/ash/wm/maximize_mode/maximize_mode_window_manager.cc b/ash/wm/maximize_mode/maximize_mode_window_manager.cc index 964f77a..1b9f9db 100644 --- a/ash/wm/maximize_mode/maximize_mode_window_manager.cc +++ b/ash/wm/maximize_mode/maximize_mode_window_manager.cc @@ -18,7 +18,24 @@ namespace ash { +namespace { + +// Exits overview mode if it is currently active. +void CancelOverview() { + WindowSelectorController* controller = + Shell::GetInstance()->window_selector_controller(); + if (controller && controller->IsSelecting()) + controller->OnSelectionCanceled(); +} + +} // namespace + MaximizeModeWindowManager::~MaximizeModeWindowManager() { + // Overview mode needs to be ended before exiting maximize mode to prevent + // transforming windows which are currently in + // overview: http://crbug.com/366605 + CancelOverview(); + Shell::GetInstance()->RemoveShellObserver(this); Shell::GetScreen()->RemoveObserver(this); EnableBackdropBehindTopWindowOnEachDisplay(false); @@ -108,10 +125,7 @@ MaximizeModeWindowManager::MaximizeModeWindowManager() : backdrops_hidden_(false) { // The overview mode needs to be ended before the maximize mode is started. To // guarantee the proper order, it will be turned off from here. - WindowSelectorController* controller = - Shell::GetInstance()->window_selector_controller(); - if (controller && controller->IsSelecting()) - controller->OnSelectionCanceled(); + CancelOverview(); MaximizeAllWindows(); AddWindowCreationObservers(); diff --git a/ash/wm/maximize_mode/maximize_mode_window_manager_unittest.cc b/ash/wm/maximize_mode/maximize_mode_window_manager_unittest.cc index 0e67e48..56c6c53 100644 --- a/ash/wm/maximize_mode/maximize_mode_window_manager_unittest.cc +++ b/ash/wm/maximize_mode/maximize_mode_window_manager_unittest.cc @@ -12,6 +12,7 @@ #include "ash/test/ash_test_base.h" #include "ash/test/shell_test_api.h" #include "ash/wm/mru_window_tracker.h" +#include "ash/wm/overview/window_selector_controller.h" #include "ash/wm/window_state.h" #include "ash/wm/wm_event.h" #include "base/strings/utf_string_conversions.h" @@ -828,6 +829,32 @@ TEST_F(MaximizeModeWindowManagerTest, TryToDesktopSizeDragUnmaximizable) { EXPECT_EQ(first_dragged_origin.y() + 5, window->bounds().y()); } +// Test that overview is exited before entering / exiting maximize mode so that +// the window changes made by MaximizeModeWindowManager do not conflict with +// those made in WindowOverview. +TEST_F(MaximizeModeWindowManagerTest, ExitsOverview) { + // Bounds for windows we know can be controlled. + gfx::Rect rect1(10, 10, 200, 50); + gfx::Rect rect2(10, 60, 200, 50); + scoped_ptr<aura::Window> w1(CreateWindow(ui::wm::WINDOW_TYPE_NORMAL, rect1)); + scoped_ptr<aura::Window> w2(CreateWindow(ui::wm::WINDOW_TYPE_NORMAL, rect2)); + + WindowSelectorController* window_selector_controller = + Shell::GetInstance()->window_selector_controller(); + window_selector_controller->ToggleOverview(); + ASSERT_TRUE(window_selector_controller->IsSelecting()); + ash::MaximizeModeWindowManager* manager = CreateMaximizeModeWindowManager(); + ASSERT_TRUE(manager); + EXPECT_FALSE(window_selector_controller->IsSelecting()); + + window_selector_controller->ToggleOverview(); + ASSERT_TRUE(window_selector_controller->IsSelecting()); + // Destroy the manager again and check that the windows return to their + // previous state. + DestroyMaximizeModeWindowManager(); + EXPECT_FALSE(window_selector_controller->IsSelecting()); +} + #endif // OS_WIN } // namespace ash |