diff options
author | varkha@chromium.org <varkha@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-05 22:39:36 +0000 |
---|---|---|
committer | varkha@chromium.org <varkha@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-05 22:39:36 +0000 |
commit | f4fd6f3427e434ac41fca1212d0def2348127064 (patch) | |
tree | 45749a2c4646f2cf99cfc4c476e30dbb1772f93d /ash | |
parent | e7c64272a0b7446fd8250d5c4cadbe6e72356b09 (diff) | |
download | chromium_src-f4fd6f3427e434ac41fca1212d0def2348127064.zip chromium_src-f4fd6f3427e434ac41fca1212d0def2348127064.tar.gz chromium_src-f4fd6f3427e434ac41fca1212d0def2348127064.tar.bz2 |
Undock window when reverting a drag
BUG=314635
Review URL: https://codereview.chromium.org/46893003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@233113 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ash')
-rw-r--r-- | ash/wm/dock/docked_window_resizer.cc | 8 | ||||
-rw-r--r-- | ash/wm/dock/docked_window_resizer_unittest.cc | 16 |
2 files changed, 20 insertions, 4 deletions
diff --git a/ash/wm/dock/docked_window_resizer.cc b/ash/wm/dock/docked_window_resizer.cc index 28d0438..0dd4aed 100644 --- a/ash/wm/dock/docked_window_resizer.cc +++ b/ash/wm/dock/docked_window_resizer.cc @@ -4,7 +4,6 @@ #include "ash/wm/dock/docked_window_resizer.h" -#include "ash/ash_switches.h" #include "ash/display/display_controller.h" #include "ash/launcher/launcher.h" #include "ash/root_window_controller.h" @@ -142,9 +141,12 @@ void DockedWindowResizer::RevertDrag() { window_state->SetTrackedByWorkspace(false); next_window_resizer_->RevertDrag(); // Restore docked state to what it was before the drag if necessary. - if (was_docked_ && !is_docked_) { - dock_layout_->DockDraggedWindow(GetTarget()); + if (is_docked_ != was_docked_) { is_docked_ = was_docked_; + if (is_docked_) + dock_layout_->DockDraggedWindow(GetTarget()); + else + dock_layout_->UndockDraggedWindow(); } FinishedDragging(); window_state->SetTrackedByWorkspace(was_tracked_by_workspace); diff --git a/ash/wm/dock/docked_window_resizer_unittest.cc b/ash/wm/dock/docked_window_resizer_unittest.cc index 3d2cd77..d9ac13f 100644 --- a/ash/wm/dock/docked_window_resizer_unittest.cc +++ b/ash/wm/dock/docked_window_resizer_unittest.cc @@ -563,7 +563,7 @@ TEST_P(DockedWindowResizerTest, AttachOnTwoSides) { EXPECT_EQ(internal::kShellWindowId_DefaultContainer, w2->parent()->id()); } -// Reverting drag +// Tests that reverting a drag restores docked state if a window was docked. TEST_P(DockedWindowResizerTest, RevertDragRestoresAttachment) { if (!SupportsHostWindowResize()) return; @@ -590,6 +590,20 @@ TEST_P(DockedWindowResizerTest, RevertDragRestoresAttachment) { window->parent()->id()); } +// Tests that reverting drag restores undocked state if a window was not docked. +TEST_P(DockedWindowResizerTest, RevertDockedDragRevertsAttachment) { + if (!SupportsHostWindowResize()) + return; + scoped_ptr<aura::Window> window(CreateTestWindow(gfx::Rect(0, 0, 201, 201))); + int previous_container_id = window->parent()->id(); + // Drag the window out but revert the drag + ASSERT_NO_FATAL_FAILURE(DragStart(window.get())); + DragMove(-50 - window->bounds().x(), 50 - window->bounds().y()); + EXPECT_EQ(CorrectContainerIdDuringDrag(), window->parent()->id()); + DragRevert(); + EXPECT_EQ(previous_container_id, window->parent()->id()); +} + // Move a docked window to the second display TEST_P(DockedWindowResizerTest, DragAcrossDisplays) { if (!SupportsMultipleDisplays()) |