From 2ffb9e1e05c55975112ff6b23037af0eeda79142 Mon Sep 17 00:00:00 2001 From: "trop[bot]" <37223003+trop[bot]@users.noreply.github.com> Date: Wed, 18 Feb 2026 15:01:01 -0500 Subject: [PATCH] fix: draggable region position with docked DevTools (#49846) Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com> Co-authored-by: Shelley Vohr --- shell/browser/api/electron_api_web_contents_view.cc | 10 +++++++++- shell/browser/ui/inspectable_web_contents_view.h | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/shell/browser/api/electron_api_web_contents_view.cc b/shell/browser/api/electron_api_web_contents_view.cc index 0b9be9bd55..59cf734a6a 100644 --- a/shell/browser/api/electron_api_web_contents_view.cc +++ b/shell/browser/api/electron_api_web_contents_view.cc @@ -83,8 +83,16 @@ void WebContentsView::ApplyBorderRadius() { int WebContentsView::NonClientHitTest(const gfx::Point& point) { if (api_web_contents_) { + // Convert the point to the contents view's coordinate space rather than + // the InspectableWebContentsView's coordinate space, because the draggable + // region is relative to the web content area. When DevTools is docked + // (e.g. to the left), the contents view is offset within the parent, + // so we need to account for that offset. + auto* inspectable_view = + api_web_contents_->inspectable_web_contents()->GetView(); + auto* contents_view = inspectable_view->GetContentsView(); gfx::Point local_point(point); - views::View::ConvertPointFromWidget(view(), &local_point); + views::View::ConvertPointFromWidget(contents_view, &local_point); SkRegion* region = api_web_contents_->draggable_region(); if (region && region->contains(local_point.x(), local_point.y())) return HTCAPTION; diff --git a/shell/browser/ui/inspectable_web_contents_view.h b/shell/browser/ui/inspectable_web_contents_view.h index ff2ee86365..56760bebcb 100644 --- a/shell/browser/ui/inspectable_web_contents_view.h +++ b/shell/browser/ui/inspectable_web_contents_view.h @@ -62,9 +62,9 @@ class InspectableWebContentsView : public views::View { // views::View: void Layout(PassKey) override; - private: views::View* GetContentsView() const; + private: // Owns us. raw_ptr inspectable_web_contents_;