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