From 83105b8349ae25bad5027d49f7209c66ca88a815 Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Wed, 3 Jun 2026 15:13:39 -0400 Subject: [PATCH] LibWebView+UI/Qt: Move the show menu bar setting to LibWebView settings --- Libraries/LibWebView/Application.cpp | 5 ++++ Libraries/LibWebView/Application.h | 4 ++++ Libraries/LibWebView/Menu.h | 2 ++ Libraries/LibWebView/Settings.cpp | 17 ++++++++++++++ Libraries/LibWebView/Settings.h | 5 ++++ UI/Qt/BrowserWindow.cpp | 34 ++++++++++++---------------- UI/Qt/BrowserWindow.h | 4 +++- UI/Qt/Settings.cpp | 19 ---------------- UI/Qt/Settings.h | 6 ----- UI/Qt/Tab.cpp | 21 ++++++++++------- UI/Qt/Tab.h | 3 +++ 11 files changed, 67 insertions(+), 53 deletions(-) diff --git a/Libraries/LibWebView/Application.cpp b/Libraries/LibWebView/Application.cpp index ce9fae22bb..a9cb035eea 100644 --- a/Libraries/LibWebView/Application.cpp +++ b/Libraries/LibWebView/Application.cpp @@ -1391,6 +1391,11 @@ void Application::initialize_actions() }); update_vertical_tabs_action(); + m_toggle_menu_bar_action = Action::create_checkable("Show Menubar"sv, ActionID::ToggleMenuBar, [this]() { + m_settings.set_show_menu_bar(!m_settings.show_menu_bar()); + }); + m_toggle_menu_bar_action->set_checked(m_settings.show_menu_bar()); + m_bookmarks_menu = Menu::create("Bookmarks"sv); m_bookmarks_menu->add_action(Action::create("Manage Bookmarks"sv, ActionID::ManageBookmarks, [this]() { open_url_in_new_tab(URL::about_bookmarks(), Web::HTML::ActivateTab::Yes); diff --git a/Libraries/LibWebView/Application.h b/Libraries/LibWebView/Application.h index b69f1342aa..345f049489 100644 --- a/Libraries/LibWebView/Application.h +++ b/Libraries/LibWebView/Application.h @@ -183,6 +183,8 @@ public: Action& toggle_vertical_tabs_expanded_action() { return *m_toggle_vertical_tabs_expanded_action; } + Action& toggle_menu_bar_action() { return *m_toggle_menu_bar_action; } + Menu& bookmarks_menu() { return *m_bookmarks_menu; } Menu& bookmarks_bar_context_menu() { return *m_bookmarks_bar_context_menu; } Menu& bookmark_context_menu() { return *m_bookmark_context_menu; } @@ -379,6 +381,8 @@ private: RefPtr m_toggle_vertical_tabs_expanded_action; + RefPtr m_toggle_menu_bar_action; + RefPtr m_bookmarks_menu; RefPtr m_toggle_bookmark_action; RefPtr m_toggle_bookmark_bar_action; diff --git a/Libraries/LibWebView/Menu.h b/Libraries/LibWebView/Menu.h index 52bd834129..6519910464 100644 --- a/Libraries/LibWebView/Menu.h +++ b/Libraries/LibWebView/Menu.h @@ -40,6 +40,8 @@ enum class ActionID { ToggleVerticalTabsExpanded, + ToggleMenuBar, + ManageBookmarks, ToggleBookmark, ToggleBookmarkViaToolbar, diff --git a/Libraries/LibWebView/Settings.cpp b/Libraries/LibWebView/Settings.cpp index 8b61504a20..174d7bcb4d 100644 --- a/Libraries/LibWebView/Settings.cpp +++ b/Libraries/LibWebView/Settings.cpp @@ -28,6 +28,9 @@ static constexpr auto VERTICAL_TABS_EXPANDED_KEY = "verticalTabsExpanded"sv; static constexpr auto VERTICAL_TABS_EXPAND_ON_HOVER_KEY = "verticalTabsExpandOnHover"sv; static constexpr auto VERTICAL_TABS_EXPANDED_WIDTH_KEY = "verticalTabsExpandedWidth"sv; +static constexpr auto SHOW_MENU_BAR_KEY = "showMenuBar"sv; +static constexpr auto DEFAULT_SHOW_MENU_BAR = false; + static constexpr auto SHOW_BOOKMARKS_BAR_KEY = "showBookmarksBar"sv; static constexpr auto DEFAULT_SHOW_BOOKMARKS_BAR = true; @@ -194,6 +197,9 @@ Settings Settings::create(Badge) if (auto tab_settings = settings_json.value().get(TAB_SETTINGS_KEY); tab_settings.has_value()) settings.m_tab_settings = parse_tab_settings(*tab_settings); + if (auto show_menu_bar = settings_json.value().get_bool(SHOW_MENU_BAR_KEY); show_menu_bar.has_value()) + settings.m_show_menu_bar = *show_menu_bar; + if (auto show_bookmarks_bar = settings_json.value().get_bool(SHOW_BOOKMARKS_BAR_KEY); show_bookmarks_bar.has_value()) settings.m_show_bookmarks_bar = *show_bookmarks_bar; @@ -279,6 +285,7 @@ Settings Settings::create(Badge) Settings::Settings(ByteString settings_path) : m_settings_path(move(settings_path)) , m_new_tab_page_url(URL::about_newtab()) + , m_show_menu_bar(DEFAULT_SHOW_MENU_BAR) , m_show_bookmarks_bar(DEFAULT_SHOW_BOOKMARKS_BAR) , m_default_zoom_level_factor(INITIAL_ZOOM_LEVEL_FACTOR) , m_languages({ DEFAULT_LANGUAGE }) @@ -301,6 +308,7 @@ JsonValue Settings::serialize_json() const tab_settings.set(VERTICAL_TABS_EXPANDED_WIDTH_KEY, *m_tab_settings.vertical_tabs_expanded_width); settings.set(TAB_SETTINGS_KEY, move(tab_settings)); + settings.set(SHOW_MENU_BAR_KEY, m_show_menu_bar); settings.set(SHOW_BOOKMARKS_BAR_KEY, m_show_bookmarks_bar); settings.set(DEFAULT_ZOOM_LEVEL_FACTOR_KEY, m_default_zoom_level_factor); @@ -445,6 +453,15 @@ void Settings::set_tab_settings(TabSettings tab_settings) observer.tab_settings_changed(); } +void Settings::set_show_menu_bar(bool show_menu_bar) +{ + m_show_menu_bar = show_menu_bar; + persist_settings(); + + for (auto& observer : m_observers) + observer.show_menu_bar_changed(); +} + void Settings::set_show_bookmarks_bar(bool show_bookmarks_bar) { m_show_bookmarks_bar = show_bookmarks_bar; diff --git a/Libraries/LibWebView/Settings.h b/Libraries/LibWebView/Settings.h index 6730ca1f3b..b37464428d 100644 --- a/Libraries/LibWebView/Settings.h +++ b/Libraries/LibWebView/Settings.h @@ -79,6 +79,7 @@ public: virtual void new_tab_page_url_changed() { } virtual void tab_settings_changed() { } + virtual void show_menu_bar_changed() { } virtual void show_bookmarks_bar_changed() { } virtual void default_zoom_level_factor_changed() { } virtual void zoom_per_host_changed(StringView host) { (void)host; } @@ -106,6 +107,9 @@ public: TabSettings const& tab_settings() const { return m_tab_settings; } void set_tab_settings(TabSettings); + bool show_menu_bar() const { return m_show_menu_bar; } + void set_show_menu_bar(bool); + bool show_bookmarks_bar() const { return m_show_bookmarks_bar; } void set_show_bookmarks_bar(bool); @@ -170,6 +174,7 @@ private: URL::URL m_new_tab_page_url; TabSettings m_tab_settings; + bool m_show_menu_bar { false }; bool m_show_bookmarks_bar { true }; double m_default_zoom_level_factor { 0 }; HashMap m_zoom_per_host; diff --git a/UI/Qt/BrowserWindow.cpp b/UI/Qt/BrowserWindow.cpp index 1e9e74a325..d1a5d7e7ed 100644 --- a/UI/Qt/BrowserWindow.cpp +++ b/UI/Qt/BrowserWindow.cpp @@ -264,11 +264,7 @@ BrowserWindow::BrowserWindow(Vector const& initial_urls, IsPopupWindow menuBar()->setObjectName("LadybirdMenuBar"); create_menu_bar_window_controls(); update_menu_bar_style(); - update_menu_bar_visibility(Settings::the()->show_menubar()); - - QObject::connect(Settings::the(), &Settings::show_menubar_changed, this, [this](bool show_menubar) { - update_menu_bar_visibility(show_menubar); - }); + update_menu_bar_visibility(); auto* file_menu = menuBar()->addMenu("&File"); @@ -369,15 +365,8 @@ BrowserWindow::BrowserWindow(Vector const& initial_urls, IsPopupWindow view_menu->addMenu(create_application_menu(*view_menu, application.motion_menu())); view_menu->addSeparator(); - if (show_menubar_option_available()) { - auto* show_menubar = new QAction("Show &Menubar", this); - show_menubar->setCheckable(true); - show_menubar->setChecked(Settings::the()->show_menubar()); - view_menu->addAction(show_menubar); - QObject::connect(show_menubar, &QAction::triggered, this, [](bool checked) { - Settings::the()->set_show_menubar(checked); - }); - } + if (show_menubar_option_available()) + view_menu->addAction(create_application_action(*view_menu, application.toggle_menu_bar_action(), IncludeActionIcon::No)); m_bookmarks_menu = create_application_menu(*this, application.bookmarks_menu()); m_hamburger_menu->addMenu(m_bookmarks_menu); @@ -938,12 +927,14 @@ void BrowserWindow::update_menu_bar_style() menuBar()->setStyleSheet(ChromeStyle::menu_bar_style_sheet(palette())); } -void BrowserWindow::update_menu_bar_visibility(bool show_menubar) +void BrowserWindow::update_menu_bar_visibility() { - menuBar()->setVisible(show_menubar); + auto show_menu_bar = show_menubar_option_available() && WebView::Application::settings().show_menu_bar(); + menuBar()->setVisible(show_menu_bar); + if (m_menu_bar_window_controls) - m_menu_bar_window_controls->setVisible(show_menubar && uses_client_side_decorations()); - m_tabs_container->set_window_controls_visible(!show_menubar && uses_client_side_decorations()); + m_menu_bar_window_controls->setVisible(show_menu_bar && uses_client_side_decorations()); + m_tabs_container->set_window_controls_visible(!show_menu_bar && uses_client_side_decorations()); } void BrowserWindow::update_menu_bar_window_control_icons() @@ -982,7 +973,7 @@ void BrowserWindow::update_window_decoration_state() } } - update_menu_bar_visibility(Settings::the()->show_menubar()); + update_menu_bar_visibility(); } void BrowserWindow::toggle_window_maximized() @@ -1337,6 +1328,11 @@ void BrowserWindow::changeEvent(QEvent* event) QWidget::changeEvent(event); } +void BrowserWindow::show_menu_bar_changed() +{ + update_menu_bar_visibility(); +} + void BrowserWindow::config_variable_changed(WebView::ConfigVariableID variable) { if (variable == WebView::ConfigVariableID::UseRoundedWindowCorners) diff --git a/UI/Qt/BrowserWindow.h b/UI/Qt/BrowserWindow.h index c0ac489ebb..9e0e338112 100644 --- a/UI/Qt/BrowserWindow.h +++ b/UI/Qt/BrowserWindow.h @@ -156,6 +156,8 @@ private: virtual void moveEvent(QMoveEvent*) override; virtual void wheelEvent(QWheelEvent*) override; virtual void closeEvent(QCloseEvent*) override; + + virtual void show_menu_bar_changed() override; virtual void config_variable_changed(WebView::ConfigVariableID) override; Tab& create_new_tab(Web::HTML::ActivateTab, Tab& parent, Optional page_index); @@ -180,7 +182,7 @@ private: void create_menu_bar_window_controls(); void update_tab_button_icons(); void update_menu_bar_style(); - void update_menu_bar_visibility(bool); + void update_menu_bar_visibility(); void update_menu_bar_window_control_icons(); void update_window_decoration_state(); void toggle_window_maximized(); diff --git a/UI/Qt/Settings.cpp b/UI/Qt/Settings.cpp index d61355df90..1438b23f40 100644 --- a/UI/Qt/Settings.cpp +++ b/UI/Qt/Settings.cpp @@ -7,7 +7,6 @@ */ #include -#include #include #include @@ -55,22 +54,4 @@ void Settings::set_is_maximized(bool is_maximized) m_qsettings->setValue("is_maximized", is_maximized); } -bool Settings::show_menubar() -{ - if (!show_menubar_option_available()) - return false; - - return m_qsettings->value("show_menubar", false).toBool(); -} - -void Settings::set_show_menubar(bool show_menubar) -{ - if (!show_menubar_option_available()) - show_menubar = false; - else - m_qsettings->setValue("show_menubar", show_menubar); - - emit show_menubar_changed(show_menubar); -} - } diff --git a/UI/Qt/Settings.h b/UI/Qt/Settings.h index d2a4dccc19..d4d763e6ae 100644 --- a/UI/Qt/Settings.h +++ b/UI/Qt/Settings.h @@ -42,12 +42,6 @@ public: bool is_maximized(); void set_is_maximized(bool is_maximized); - bool show_menubar(); - void set_show_menubar(bool show_menubar); - -signals: - void show_menubar_changed(bool show_menubar); - protected: Settings(); diff --git a/UI/Qt/Tab.cpp b/UI/Qt/Tab.cpp index f7017f91d7..facbedad3d 100644 --- a/UI/Qt/Tab.cpp +++ b/UI/Qt/Tab.cpp @@ -17,7 +17,6 @@ #include #include #include -#include #include #include @@ -243,12 +242,6 @@ Tab::Tab(BrowserWindow* window, RefPtr parent_client, update_chrome_style(); set_toolbar_window_controls_visible(false); - m_hamburger_button->setVisible(!Settings::the()->show_menubar()); - - QObject::connect(Settings::the(), &Settings::show_menubar_changed, this, [this](bool show_menubar) { - m_hamburger_button->setVisible(!show_menubar); - }); - view().on_activate_tab = [this] { m_window->activate_tab(tab_index()); }; @@ -582,7 +575,6 @@ void Tab::set_window(BrowserWindow& window) m_window = &window; m_hamburger_button->setMenu(&m_window->hamburger_menu()); connect_hamburger_menu(); - m_hamburger_button->setVisible(!Settings::the()->show_menubar()); recreate_toolbar_icons(); } @@ -644,6 +636,14 @@ void Tab::connect_hamburger_menu() QObject::connect(&m_window->hamburger_menu(), &QMenu::aboutToHide, m_hamburger_button, [this]() { m_hamburger_button->setDown(false); }); + + update_hamburger_menu(); +} + +void Tab::update_hamburger_menu() +{ + auto show_menu_bar = show_menubar_option_available() && WebView::Application::settings().show_menu_bar(); + m_hamburger_button->setVisible(!show_menu_bar); } void Tab::navigate(URL::URL const& url) @@ -690,6 +690,11 @@ void Tab::update_tab_title() emit title_changed(tab_index(), title()); } +void Tab::show_menu_bar_changed() +{ + update_hamburger_menu(); +} + void Tab::config_variable_changed(WebView::ConfigVariableID variable) { if (variable == WebView::ConfigVariableID::ShowWebContentProcessIDInTabTitle) diff --git a/UI/Qt/Tab.h b/UI/Qt/Tab.h index ceca6f9150..56fdf28efb 100644 --- a/UI/Qt/Tab.h +++ b/UI/Qt/Tab.h @@ -103,10 +103,13 @@ signals: private: virtual void resizeEvent(QResizeEvent*) override; virtual bool event(QEvent*) override; + + virtual void show_menu_bar_changed() override; virtual void config_variable_changed(WebView::ConfigVariableID) override; void recreate_toolbar_icons(); void connect_hamburger_menu(); + void update_hamburger_menu(); void update_chrome_style(); void update_tab_title(); void set_loading(bool);