summaryrefslogtreecommitdiffstats
path: root/ash
diff options
context:
space:
mode:
authorflackr@chromium.org <flackr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-30 07:31:01 +0000
committerflackr@chromium.org <flackr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-30 07:31:01 +0000
commitd0359da7b7917230b3d6ea8d2ec66e90b6bf9972 (patch)
tree78d6f056901a612505c83b3022a836267a195d13 /ash
parent56aac95bfe2163ea5567d3d17c8609265f3de5a1 (diff)
downloadchromium_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.cc22
-rw-r--r--ash/wm/maximize_mode/maximize_mode_window_manager_unittest.cc27
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