 Chromium Code Reviews
 Chromium Code Reviews Issue 2640433004:
  ChromeOS MD: Fix cannot drag tab onto immersive fullscreen window  (Closed)
    
  
    Issue 2640433004:
  ChromeOS MD: Fix cannot drag tab onto immersive fullscreen window  (Closed) 
  | Index: chrome/browser/ui/views/tabs/tab_drag_controller.cc | 
| diff --git a/chrome/browser/ui/views/tabs/tab_drag_controller.cc b/chrome/browser/ui/views/tabs/tab_drag_controller.cc | 
| index 1997b873a2349ff601ee1869a531a63314eee050..c5a06f563401a5ac1a4f825552f682dd77951cf2 100644 | 
| --- a/chrome/browser/ui/views/tabs/tab_drag_controller.cc | 
| +++ b/chrome/browser/ui/views/tabs/tab_drag_controller.cc | 
| @@ -111,6 +111,22 @@ gfx::NativeWindow GetModalTransient(gfx::NativeWindow window) { | 
| } | 
| #endif | 
| +// Returns the browser view that contains the |tabstrip|. | 
| +BrowserView* GetBrowserViewForTabStrip(TabStrip* tabstrip) { | 
| + gfx::NativeWindow window = tabstrip->GetWidget()->GetNativeWindow(); | 
| + return BrowserView::GetBrowserViewForNativeWindow(window); | 
| +} | 
| + | 
| +// Returns the bounds of the tabstrip in browser view coordinates. | 
| +gfx::Rect GetBoundsForTabStripInBrowserView(TabStrip* tabstrip) { | 
| + BrowserView* browser_view = GetBrowserViewForTabStrip(tabstrip); | 
| + gfx::RectF bounds_f( | 
| + browser_view->frame()->GetBoundsForTabStrip(browser_view->tabstrip())); | 
| + views::View::ConvertRectToTarget(browser_view->parent(), browser_view, | 
| + &bounds_f); | 
| + return gfx::ToEnclosingRect(bounds_f); | 
| +} | 
| + | 
| // Returns true if |bounds| contains the y-coordinate |y|. The y-coordinate | 
| // of |bounds| is adjusted by |vertical_adjustment|. | 
| bool DoesRectContainVerticalPointExpanded( | 
| @@ -856,14 +872,17 @@ TabStrip* TabDragController::GetTabStripForWindow(gfx::NativeWindow window) { | 
| bool TabDragController::DoesTabStripContain( | 
| TabStrip* tabstrip, | 
| const gfx::Point& point_in_screen) const { | 
| - // Make sure the specified screen point is actually within the bounds of the | 
| - // specified tabstrip... | 
| - gfx::Rect tabstrip_bounds = GetViewScreenBounds(tabstrip); | 
| - return point_in_screen.x() < tabstrip_bounds.right() && | 
| - point_in_screen.x() >= tabstrip_bounds.x() && | 
| - DoesRectContainVerticalPointExpanded(tabstrip_bounds, | 
| - kVerticalDetachMagnetism, | 
| - point_in_screen.y()); | 
| + // Make sure the specified screen point is within the bounds of the specified | 
| + // tabstrip where it should be laid when revealed. | 
| + gfx::Rect tabstrip_bounds = GetBoundsForTabStripInBrowserView(tabstrip); | 
| + BrowserView* browser_view = GetBrowserViewForTabStrip(tabstrip); | 
| + gfx::Point point_in_browser_view(point_in_screen.x(), point_in_screen.y()); | 
| + views::View::ConvertPointFromScreen(browser_view, &point_in_browser_view); | 
| + return point_in_browser_view.x() < tabstrip_bounds.right() && | 
| + point_in_browser_view.x() >= tabstrip_bounds.x() && | 
| + DoesRectContainVerticalPointExpanded(tabstrip_bounds, | 
| + kVerticalDetachMagnetism, | 
| + point_in_browser_view.y()); | 
| } | 
| void TabDragController::Attach(TabStrip* attached_tabstrip, | 
| @@ -879,6 +898,10 @@ void TabDragController::Attach(TabStrip* attached_tabstrip, | 
| std::vector<Tab*> tabs = | 
| GetTabsMatchingDraggedContents(attached_tabstrip_); | 
| + // Make a StartedDraggingTabs call here to GetRevealedLock so that if | 
| + // immersive mode is unrevealed, reveal it. | 
| + attached_tabstrip_->StartedDraggingTabs(tabs); | 
| 
Qiang(Joe) Xu
2017/01/22 01:43:57
We should get ImmersiveModeCOntrollerAsh::OnImmers
 
sky
2017/01/23 16:19:06
StartedDraggingTabs is called on line 949.
 
Qiang(Joe) Xu
2017/01/23 17:50:37
Yes, I am aware of that. The problem is here: http
 
sky
2017/01/23 20:07:26
So, you're solution to this is to call the functio
 
Qiang(Joe) Xu
2017/01/26 17:43:08
Hi, I am sorry I thought this could work. Another
 | 
| + | 
| if (tabs.empty()) { | 
| // Transitioning from detached to attached to a new tabstrip. Add tabs to | 
| // the new model. |