LibWebView+UI/Qt: Move the show menu bar setting to LibWebView settings

This commit is contained in:
Timothy Flynn 2026-06-03 15:13:39 -04:00 committed by Tim Flynn
parent 0e8a4f9747
commit 83105b8349
11 changed files with 67 additions and 53 deletions

View file

@ -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);

View file

@ -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<Action> m_toggle_vertical_tabs_expanded_action;
RefPtr<Action> m_toggle_menu_bar_action;
RefPtr<Menu> m_bookmarks_menu;
RefPtr<Action> m_toggle_bookmark_action;
RefPtr<Action> m_toggle_bookmark_bar_action;

View file

@ -40,6 +40,8 @@ enum class ActionID {
ToggleVerticalTabsExpanded,
ToggleMenuBar,
ManageBookmarks,
ToggleBookmark,
ToggleBookmarkViaToolbar,

View file

@ -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<Application>)
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<Application>)
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;

View file

@ -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<String, double> m_zoom_per_host;

View file

@ -264,11 +264,7 @@ BrowserWindow::BrowserWindow(Vector<URL::URL> 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<URL::URL> 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)

View file

@ -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<u64> 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();

View file

@ -7,7 +7,6 @@
*/
#include <AK/LexicalPath.h>
#include <UI/Qt/ChromeLayout.h>
#include <UI/Qt/Settings.h>
#include <UI/Qt/StringUtils.h>
@ -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);
}
}

View file

@ -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();

View file

@ -17,7 +17,6 @@
#include <UI/Qt/ChromeStyle.h>
#include <UI/Qt/Icon.h>
#include <UI/Qt/Menu.h>
#include <UI/Qt/Settings.h>
#include <UI/Qt/StringUtils.h>
#include <UI/Qt/WindowControlButton.h>
@ -243,12 +242,6 @@ Tab::Tab(BrowserWindow* window, RefPtr<WebView::WebContentClient> 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)

View file

@ -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);