diff --git a/shell/browser/ui/views/root_view.cc b/shell/browser/ui/views/root_view.cc index b0f59e994b990..e9c7723161330 100644 --- a/shell/browser/ui/views/root_view.cc +++ b/shell/browser/ui/views/root_view.cc @@ -32,15 +32,15 @@ bool IsAltModifier(const content::NativeWebKeyboardEvent& event) { } // namespace RootView::RootView(NativeWindow* window) - : window_(window), - last_focused_view_tracker_(std::make_unique()) { + : window_{raw_ref::from_ptr(window)}, + main_view_{raw_ref::from_ptr( + AddChildView(std::make_unique()))} { set_owned_by_client(); views::BoxLayout* layout = SetLayoutManager(std::make_unique( views::BoxLayout::Orientation::kVertical)); - main_view_ = AddChildView(std::make_unique()); main_view_->SetUseDefaultFillLayout(true); - layout->SetFlexForView(main_view_, 1); + layout->SetFlexForView(&main_view_.get(), 1); } RootView::~RootView() = default; @@ -62,7 +62,7 @@ void RootView::SetMenu(ElectronMenuModel* menu_model) { return; if (!menu_bar_) { - menu_bar_ = std::make_unique(window_, this); + menu_bar_ = std::make_unique(&window_.get(), this); menu_bar_->set_owned_by_client(); if (!menu_bar_autohide_) SetMenuBarVisibility(true); @@ -116,7 +116,7 @@ void RootView::HandleKeyEvent(const content::NativeWebKeyboardEvent& event) { SetMenuBarVisibility(true); View* focused_view = GetFocusManager()->GetFocusedView(); - last_focused_view_tracker_->SetView(focused_view); + last_focused_view_tracker_.SetView(focused_view); menu_bar_->RequestFocus(); } @@ -137,7 +137,7 @@ void RootView::HandleKeyEvent(const content::NativeWebKeyboardEvent& event) { SetMenuBarVisibility(!menu_bar_visible_); View* focused_view = GetFocusManager()->GetFocusedView(); - last_focused_view_tracker_->SetView(focused_view); + last_focused_view_tracker_.SetView(focused_view); if (menu_bar_visible_) { menu_bar_->RequestFocus(); // Show accelerators when menu bar is focused @@ -150,7 +150,7 @@ void RootView::HandleKeyEvent(const content::NativeWebKeyboardEvent& event) { } void RootView::RestoreFocus() { - View* last_focused_view = last_focused_view_tracker_->view(); + View* last_focused_view = last_focused_view_tracker_.view(); if (last_focused_view) { GetFocusManager()->SetFocusedViewWithReason( last_focused_view, diff --git a/shell/browser/ui/views/root_view.h b/shell/browser/ui/views/root_view.h index 5f27e23c60723..696caaa9630db 100644 --- a/shell/browser/ui/views/root_view.h +++ b/shell/browser/ui/views/root_view.h @@ -8,6 +8,7 @@ #include #include "base/memory/raw_ptr.h" +#include "base/memory/raw_ref.h" #include "shell/browser/ui/accelerator_util.h" #include "ui/gfx/geometry/insets.h" #include "ui/views/view.h" @@ -46,7 +47,7 @@ class RootView : public views::View { void RegisterAcceleratorsWithFocusManager(ElectronMenuModel* menu_model); void UnregisterAcceleratorsWithFocusManager(); - views::View* GetMainView() { return main_view_; } + views::View* GetMainView() { return &main_view_.get(); } // views::View: gfx::Size GetMinimumSize() const override; @@ -55,7 +56,7 @@ class RootView : public views::View { private: // Parent window, weak ref. - raw_ptr window_; + const raw_ref window_; // Menu bar. std::unique_ptr menu_bar_; @@ -64,12 +65,12 @@ class RootView : public views::View { bool menu_bar_alt_pressed_ = false; // Main view area. - raw_ptr main_view_; + const raw_ref main_view_; // Map from accelerator to menu item's command id. accelerator_util::AcceleratorTable accelerator_table_; - std::unique_ptr last_focused_view_tracker_; + views::ViewTracker last_focused_view_tracker_; }; } // namespace electron