From 2e8fc17f07d0e842599bd9979d304aa2b97bec5d Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Wed, 21 May 2025 16:02:55 -0500 Subject: [PATCH] refactor: pass views::Widget* into constructors of our TreeHosts and NativeWidgets (#47177) * refactor: remove unnecessary downcast in MenuViews::PopupAt() * refactor: pass a views::Widget as an arg to the ElectronDesktopWindowTreeHostLinux ctor * refactor: pass a views::Widget as an arg to the ElectronDesktopNativeWidgetAura ctor * refactor: pass a views::Widget as an arg to the ElectronDesktopWindowTreeHostWin ctor * refactor: create desktop_window_tree_host_ in the ElectronDesktopNativeWidgetAura constructor * fixup! refactor: create desktop_window_tree_host_ in the ElectronDesktopNativeWidgetAura constructor fix: tyop --- shell/browser/api/electron_api_menu_views.cc | 2 +- shell/browser/native_window_views.cc | 4 ++-- .../ui/electron_desktop_window_tree_host_linux.cc | 6 +++--- .../ui/electron_desktop_window_tree_host_linux.h | 1 + .../ui/win/electron_desktop_native_widget_aura.cc | 13 +++++++------ .../ui/win/electron_desktop_native_widget_aura.h | 7 ++++--- .../ui/win/electron_desktop_window_tree_host_win.cc | 6 +++--- .../ui/win/electron_desktop_window_tree_host_win.h | 1 + 8 files changed, 22 insertions(+), 18 deletions(-) diff --git a/shell/browser/api/electron_api_menu_views.cc b/shell/browser/api/electron_api_menu_views.cc index 67aa94e77032..e760e06bc4cc 100644 --- a/shell/browser/api/electron_api_menu_views.cc +++ b/shell/browser/api/electron_api_menu_views.cc @@ -27,7 +27,7 @@ void MenuViews::PopupAt(BaseWindow* window, int positioning_item, ui::mojom::MenuSourceType source_type, base::OnceClosure callback) { - auto* native_window = static_cast(window->window()); + const NativeWindow* native_window = window->window(); if (!native_window) return; diff --git a/shell/browser/native_window_views.cc b/shell/browser/native_window_views.cc index f7439b20ab8a..c218cfbef47c 100644 --- a/shell/browser/native_window_views.cc +++ b/shell/browser/native_window_views.cc @@ -290,7 +290,7 @@ NativeWindowViews::NativeWindowViews(const gin_helper::Dictionary& options, if (parent) params.parent = parent->GetNativeWindow(); - params.native_widget = new ElectronDesktopNativeWidgetAura(this); + params.native_widget = new ElectronDesktopNativeWidgetAura{this, widget()}; #elif BUILDFLAG(IS_LINUX) std::string name = Browser::Get()->GetName(); // Set WM_WINDOW_ROLE. @@ -304,7 +304,7 @@ NativeWindowViews::NativeWindowViews(const gin_helper::Dictionary& options, auto* native_widget = new views::DesktopNativeWidgetAura(widget()); params.native_widget = native_widget; params.desktop_window_tree_host = - new ElectronDesktopWindowTreeHostLinux(this, native_widget); + new ElectronDesktopWindowTreeHostLinux{this, widget(), native_widget}; #endif widget()->Init(std::move(params)); diff --git a/shell/browser/ui/electron_desktop_window_tree_host_linux.cc b/shell/browser/ui/electron_desktop_window_tree_host_linux.cc index b6dfb312ac22..fa05aedcb034 100644 --- a/shell/browser/ui/electron_desktop_window_tree_host_linux.cc +++ b/shell/browser/ui/electron_desktop_window_tree_host_linux.cc @@ -33,10 +33,10 @@ namespace electron { ElectronDesktopWindowTreeHostLinux::ElectronDesktopWindowTreeHostLinux( NativeWindowViews* native_window_view, + views::Widget* widget, views::DesktopNativeWidgetAura* desktop_native_widget_aura) - : views::DesktopWindowTreeHostLinux(native_window_view->widget(), - desktop_native_widget_aura), - native_window_view_(native_window_view) {} + : views::DesktopWindowTreeHostLinux{widget, desktop_native_widget_aura}, + native_window_view_{native_window_view} {} ElectronDesktopWindowTreeHostLinux::~ElectronDesktopWindowTreeHostLinux() = default; diff --git a/shell/browser/ui/electron_desktop_window_tree_host_linux.h b/shell/browser/ui/electron_desktop_window_tree_host_linux.h index f1455aa0553d..cfd22c0892f7 100644 --- a/shell/browser/ui/electron_desktop_window_tree_host_linux.h +++ b/shell/browser/ui/electron_desktop_window_tree_host_linux.h @@ -29,6 +29,7 @@ class ElectronDesktopWindowTreeHostLinux public: ElectronDesktopWindowTreeHostLinux( NativeWindowViews* native_window_view, + views::Widget* widget, views::DesktopNativeWidgetAura* desktop_native_widget_aura); ~ElectronDesktopWindowTreeHostLinux() override; diff --git a/shell/browser/ui/win/electron_desktop_native_widget_aura.cc b/shell/browser/ui/win/electron_desktop_native_widget_aura.cc index 044d0941f1c7..f866d5c4bb6b 100644 --- a/shell/browser/ui/win/electron_desktop_native_widget_aura.cc +++ b/shell/browser/ui/win/electron_desktop_native_widget_aura.cc @@ -14,9 +14,12 @@ namespace electron { ElectronDesktopNativeWidgetAura::ElectronDesktopNativeWidgetAura( - NativeWindowViews* native_window_view) - : views::DesktopNativeWidgetAura(native_window_view->widget()), - native_window_view_(native_window_view) { + NativeWindowViews* native_window_view, + views::Widget* widget) + : views::DesktopNativeWidgetAura{widget}, + native_window_view_{native_window_view}, + desktop_window_tree_host_{new ElectronDesktopWindowTreeHostWin{ + native_window_view, widget, this}} { GetNativeWindow()->SetName("ElectronDesktopNativeWidgetAura"); // This is to enable the override of OnWindowActivated wm::SetActivationChangeObserver(GetNativeWindow(), this); @@ -24,9 +27,7 @@ ElectronDesktopNativeWidgetAura::ElectronDesktopNativeWidgetAura( void ElectronDesktopNativeWidgetAura::InitNativeWidget( views::Widget::InitParams params) { - desktop_window_tree_host_ = new ElectronDesktopWindowTreeHostWin( - native_window_view_, - static_cast(params.native_widget)); + CHECK_EQ(params.native_widget, this); params.desktop_window_tree_host = desktop_window_tree_host_; views::DesktopNativeWidgetAura::InitNativeWidget(std::move(params)); } diff --git a/shell/browser/ui/win/electron_desktop_native_widget_aura.h b/shell/browser/ui/win/electron_desktop_native_widget_aura.h index b1424990babb..9a47c4fa71d3 100644 --- a/shell/browser/ui/win/electron_desktop_native_widget_aura.h +++ b/shell/browser/ui/win/electron_desktop_native_widget_aura.h @@ -18,7 +18,8 @@ class NativeWindowViews; class ElectronDesktopNativeWidgetAura : public views::DesktopNativeWidgetAura { public: explicit ElectronDesktopNativeWidgetAura( - NativeWindowViews* native_window_view); + NativeWindowViews* native_window_view, + views::Widget* widget); // disable copy ElectronDesktopNativeWidgetAura(const ElectronDesktopNativeWidgetAura&) = @@ -40,10 +41,10 @@ class ElectronDesktopNativeWidgetAura : public views::DesktopNativeWidgetAura { aura::Window* gained_active, aura::Window* lost_active) override; - raw_ptr native_window_view_; + const raw_ptr native_window_view_; // Owned by DesktopNativeWidgetAura. - raw_ptr desktop_window_tree_host_; + const raw_ptr desktop_window_tree_host_; }; } // namespace electron diff --git a/shell/browser/ui/win/electron_desktop_window_tree_host_win.cc b/shell/browser/ui/win/electron_desktop_window_tree_host_win.cc index 641aaf5b753c..82b7628dba27 100644 --- a/shell/browser/ui/win/electron_desktop_window_tree_host_win.cc +++ b/shell/browser/ui/win/electron_desktop_window_tree_host_win.cc @@ -16,10 +16,10 @@ namespace electron { ElectronDesktopWindowTreeHostWin::ElectronDesktopWindowTreeHostWin( NativeWindowViews* native_window_view, + views::Widget* widget, views::DesktopNativeWidgetAura* desktop_native_widget_aura) - : views::DesktopWindowTreeHostWin(native_window_view->widget(), - desktop_native_widget_aura), - native_window_view_(native_window_view) {} + : views::DesktopWindowTreeHostWin{widget, desktop_native_widget_aura}, + native_window_view_{native_window_view} {} ElectronDesktopWindowTreeHostWin::~ElectronDesktopWindowTreeHostWin() = default; diff --git a/shell/browser/ui/win/electron_desktop_window_tree_host_win.h b/shell/browser/ui/win/electron_desktop_window_tree_host_win.h index 4776d6659306..e151b1384e6e 100644 --- a/shell/browser/ui/win/electron_desktop_window_tree_host_win.h +++ b/shell/browser/ui/win/electron_desktop_window_tree_host_win.h @@ -20,6 +20,7 @@ class ElectronDesktopWindowTreeHostWin : public views::DesktopWindowTreeHostWin, public: ElectronDesktopWindowTreeHostWin( NativeWindowViews* native_window_view, + views::Widget* widget, views::DesktopNativeWidgetAura* desktop_native_widget_aura); ~ElectronDesktopWindowTreeHostWin() override;