[go: nahoru, domu]

On tab drop to split view, snap source window to opposite side

Bug: 1069869
Change-Id: Iacc364ad3891cdc9ceb54299bbcaeeaae199ff47
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2191280
Reviewed-by: Mitsuru Oshima <oshima@chromium.org>
Reviewed-by: Xiaoqian Dai <xdai@chromium.org>
Commit-Queue: Collin Baker <collinbaker@chromium.org>
Cr-Commit-Position: refs/heads/master@{#767924}
diff --git a/ash/drag_drop/tab_drag_drop_delegate.cc b/ash/drag_drop/tab_drag_drop_delegate.cc
index c176a84..c24060d 100644
--- a/ash/drag_drop/tab_drag_drop_delegate.cc
+++ b/ash/drag_drop/tab_drag_drop_delegate.cc
@@ -129,7 +129,23 @@
   if (snap_position == SplitViewController::SnapPosition::NONE)
     return;
 
-  SplitViewController::Get(new_window)->SnapWindow(new_window, snap_position);
+  SplitViewController* const split_view_controller =
+      SplitViewController::Get(new_window);
+  split_view_controller->SnapWindow(new_window, snap_position);
+
+  // The tab drag source window is the last window the user was
+  // interacting with. When dropping into split view, it makes the most
+  // sense to snap this window to the opposite side. Do this.
+  SplitViewController::SnapPosition opposite_position =
+      (snap_position == SplitViewController::SnapPosition::LEFT)
+          ? SplitViewController::SnapPosition::RIGHT
+          : SplitViewController::SnapPosition::LEFT;
+
+  // |source_window_| is itself a child window of the browser since it
+  // hosts web content (specifically, the tab strip WebUI). Snap its
+  // toplevel window which is the browser window.
+  split_view_controller->SnapWindow(source_window_->GetToplevelWindow(),
+                                    opposite_position);
 }
 
 }  // namespace ash