summaryrefslogtreecommitdiffstats
path: root/ash
diff options
context:
space:
mode:
authorvarkha@chromium.org <varkha@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-11-05 22:39:36 +0000
committervarkha@chromium.org <varkha@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-11-05 22:39:36 +0000
commitf4fd6f3427e434ac41fca1212d0def2348127064 (patch)
tree45749a2c4646f2cf99cfc4c476e30dbb1772f93d /ash
parente7c64272a0b7446fd8250d5c4cadbe6e72356b09 (diff)
downloadchromium_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.cc8
-rw-r--r--ash/wm/dock/docked_window_resizer_unittest.cc16
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())