From a3ea4881e75385eae6d36a9c5ea71eeca329e695 Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Thu, 3 Apr 2025 13:53:02 -0400 Subject: [PATCH] LibWeb+LibWebView+UI: Migrate to LibWebView's language settings --- Libraries/LibWeb/HTML/NavigatorLanguage.h | 6 +-- Libraries/LibWeb/Loader/ResourceLoader.h | 10 ++--- Libraries/LibWebView/ViewImplementation.cpp | 12 +++--- Libraries/LibWebView/ViewImplementation.h | 3 +- UI/Qt/BrowserWindow.cpp | 32 ---------------- UI/Qt/BrowserWindow.h | 3 -- UI/Qt/CMakeLists.txt | 1 - UI/Qt/Settings.cpp | 11 ------ UI/Qt/Settings.h | 4 -- UI/Qt/SettingsDialog.cpp | 42 --------------------- UI/Qt/SettingsDialog.h | 31 --------------- UI/Qt/Tab.cpp | 5 --- UI/Qt/Tab.h | 2 - 13 files changed, 14 insertions(+), 148 deletions(-) delete mode 100644 UI/Qt/SettingsDialog.cpp delete mode 100644 UI/Qt/SettingsDialog.h diff --git a/Libraries/LibWeb/HTML/NavigatorLanguage.h b/Libraries/LibWeb/HTML/NavigatorLanguage.h index 89c9a910df7..326456e5583 100644 --- a/Libraries/LibWeb/HTML/NavigatorLanguage.h +++ b/Libraries/LibWeb/HTML/NavigatorLanguage.h @@ -7,8 +7,8 @@ #pragma once +#include #include -#include #include namespace Web::HTML { @@ -16,10 +16,10 @@ namespace Web::HTML { class NavigatorLanguageMixin { public: // https://html.spec.whatwg.org/multipage/system-state.html#dom-navigator-language - String language() const { return ResourceLoader::the().preferred_languages()[0]; } + String const& language() const { return ResourceLoader::the().preferred_languages()[0]; } // https://html.spec.whatwg.org/multipage/system-state.html#dom-navigator-languages - Vector languages() const { return ResourceLoader::the().preferred_languages(); } + ReadonlySpan languages() const { return ResourceLoader::the().preferred_languages(); } }; } diff --git a/Libraries/LibWeb/Loader/ResourceLoader.h b/Libraries/LibWeb/Loader/ResourceLoader.h index 2547c85fd10..4e4e2a59a76 100644 --- a/Libraries/LibWeb/Loader/ResourceLoader.h +++ b/Libraries/LibWeb/Loader/ResourceLoader.h @@ -53,15 +53,11 @@ public: String const& platform() const { return m_platform; } void set_platform(String platform) { m_platform = move(platform); } - Vector preferred_languages() const { return m_preferred_languages; } + Vector const& preferred_languages() const { return m_preferred_languages; } void set_preferred_languages(Vector preferred_languages) { - // Default to "en" if no preferred languages are specified. - if (preferred_languages.is_empty() || (preferred_languages.size() == 1 && preferred_languages[0].is_empty())) { - m_preferred_languages = { "en"_string }; - } else { - m_preferred_languages = move(preferred_languages); - } + m_preferred_languages = move(preferred_languages); + VERIFY(!m_preferred_languages.is_empty()); } NavigatorCompatibilityMode navigator_compatibility_mode() { return m_navigator_compatibility_mode; } diff --git a/Libraries/LibWebView/ViewImplementation.cpp b/Libraries/LibWebView/ViewImplementation.cpp index e5d52e2c290..5d823ff0591 100644 --- a/Libraries/LibWebView/ViewImplementation.cpp +++ b/Libraries/LibWebView/ViewImplementation.cpp @@ -252,11 +252,6 @@ void ViewImplementation::set_preferred_motion(Web::CSS::PreferredMotion motion) client().async_set_preferred_motion(page_id(), motion); } -void ViewImplementation::set_preferred_languages(ReadonlySpan preferred_languages) -{ - client().async_set_preferred_languages(page_id(), preferred_languages); -} - ByteString ViewImplementation::selected_text() { return client().get_selected_text(page_id()); @@ -599,6 +594,7 @@ void ViewImplementation::initialize_client(CreateNewClient create_new_client) if (auto const& user_agent_preset = Application::web_content_options().user_agent_preset; user_agent_preset.has_value()) client().async_debug_request(m_client_state.page_index, "spoof-user-agent"sv, *user_agents.get(*user_agent_preset)); + languages_changed(); autoplay_settings_changed(); do_not_track_changed(); } @@ -648,6 +644,12 @@ void ViewImplementation::handle_web_content_process_crash(LoadErrorPage load_err } } +void ViewImplementation::languages_changed() +{ + auto const& languages = Application::settings().languages(); + client().async_set_preferred_languages(page_id(), languages); +} + void ViewImplementation::autoplay_settings_changed() { auto const& autoplay_settings = Application::settings().autoplay_settings(); diff --git a/Libraries/LibWebView/ViewImplementation.h b/Libraries/LibWebView/ViewImplementation.h index c1ef9af17f7..5a60dcefdfd 100644 --- a/Libraries/LibWebView/ViewImplementation.h +++ b/Libraries/LibWebView/ViewImplementation.h @@ -80,8 +80,6 @@ public: void set_preferred_contrast(Web::CSS::PreferredContrast); void set_preferred_motion(Web::CSS::PreferredMotion); - void set_preferred_languages(ReadonlySpan); - ByteString selected_text(); Optional selected_text_with_whitespace_collapsed(); void select_all(); @@ -262,6 +260,7 @@ protected: }; void handle_web_content_process_crash(LoadErrorPage = LoadErrorPage::Yes); + virtual void languages_changed() override; virtual void autoplay_settings_changed() override; virtual void do_not_track_changed() override; diff --git a/UI/Qt/BrowserWindow.cpp b/UI/Qt/BrowserWindow.cpp index a7f77effddc..278c74f7773 100644 --- a/UI/Qt/BrowserWindow.cpp +++ b/UI/Qt/BrowserWindow.cpp @@ -20,7 +20,6 @@ #include #include #include -#include #include #include #include @@ -97,18 +96,6 @@ BrowserWindow::BrowserWindow(Vector const& initial_urls, IsPopupWindow }); } - QObject::connect(Settings::the(), &Settings::preferred_languages_changed, this, [this](QStringList languages) { - Vector preferred_languages; - preferred_languages.ensure_capacity(languages.length()); - for (auto& language : languages) { - preferred_languages.append(ak_string_from_qstring(language)); - } - - for_each_tab([preferred_languages](auto& tab) { - tab.set_preferred_languages(preferred_languages); - }); - }); - m_hamburger_menu = new HamburgerMenu(this); if (!Settings::the()->show_menubar()) @@ -198,18 +185,6 @@ BrowserWindow::BrowserWindow(Vector const& initial_urls, IsPopupWindow new_tab_from_url(URL::URL::about("settings"_string), Web::HTML::ActivateTab::Yes); }); - auto* deprecated_settings_action = new QAction("Qt Settings", this); - deprecated_settings_action->setIcon(load_icon_from_uri("resource://icons/16x16/settings.png"sv)); - edit_menu->addAction(deprecated_settings_action); - QObject::connect(deprecated_settings_action, &QAction::triggered, this, [this] { - if (!m_settings_dialog) { - m_settings_dialog = new SettingsDialog(this); - } - - m_settings_dialog->show(); - m_settings_dialog->setFocus(); - }); - auto* view_menu = m_hamburger_menu->addMenu("&View"); menuBar()->addMenu(view_menu); @@ -853,19 +828,12 @@ void BrowserWindow::initialize_tab(Tab* tab) m_tabs_container->setTabIcon(m_tabs_container->indexOf(tab), tab->favicon()); create_close_button_for_tab(tab); - Vector preferred_languages; - preferred_languages.ensure_capacity(Settings::the()->preferred_languages().length()); - for (auto& language : Settings::the()->preferred_languages()) { - preferred_languages.append(ak_string_from_qstring(language)); - } - tab->set_line_box_borders(m_show_line_box_borders_action->isChecked()); tab->set_scripting(m_enable_scripting_action->isChecked()); tab->set_content_filtering(m_enable_content_filtering_action->isChecked()); tab->set_block_popups(m_block_pop_ups_action->isChecked()); tab->set_same_origin_policy(m_enable_same_origin_policy_action->isChecked()); tab->set_user_agent_string(user_agent_string()); - tab->set_preferred_languages(preferred_languages); tab->set_navigator_compatibility_mode(navigator_compatibility_mode()); tab->view().set_preferred_color_scheme(m_preferred_color_scheme); } diff --git a/UI/Qt/BrowserWindow.h b/UI/Qt/BrowserWindow.h index 685e15a7695..9b45a9304d3 100644 --- a/UI/Qt/BrowserWindow.h +++ b/UI/Qt/BrowserWindow.h @@ -24,7 +24,6 @@ namespace Ladybird { -class SettingsDialog; class WebContentView; class BrowserWindow : public QMainWindow { @@ -210,8 +209,6 @@ private: ByteString m_user_agent_string {}; ByteString m_navigator_compatibility_mode {}; - SettingsDialog* m_settings_dialog { nullptr }; - IsPopupWindow m_is_popup_window { IsPopupWindow::No }; }; diff --git a/UI/Qt/CMakeLists.txt b/UI/Qt/CMakeLists.txt index 04768a5ad86..93fa801ebf9 100644 --- a/UI/Qt/CMakeLists.txt +++ b/UI/Qt/CMakeLists.txt @@ -7,7 +7,6 @@ target_sources(ladybird PRIVATE Icon.cpp LocationEdit.cpp Settings.cpp - SettingsDialog.cpp Tab.cpp TabBar.cpp TVGIconEngine.cpp diff --git a/UI/Qt/Settings.cpp b/UI/Qt/Settings.cpp index c243dacf8a6..99841c26299 100644 --- a/UI/Qt/Settings.cpp +++ b/UI/Qt/Settings.cpp @@ -54,17 +54,6 @@ void Settings::set_is_maximized(bool is_maximized) m_qsettings->setValue("is_maximized", is_maximized); } -QStringList Settings::preferred_languages() -{ - return m_qsettings->value("preferred_languages").toStringList(); -} - -void Settings::set_preferred_languages(QStringList const& languages) -{ - m_qsettings->setValue("preferred_languages", languages); - emit preferred_languages_changed(languages); -} - bool Settings::show_menubar() { return m_qsettings->value("show_menubar", false).toBool(); diff --git a/UI/Qt/Settings.h b/UI/Qt/Settings.h index 8ba42afbcc3..13d56f59256 100644 --- a/UI/Qt/Settings.h +++ b/UI/Qt/Settings.h @@ -41,15 +41,11 @@ public: bool is_maximized(); void set_is_maximized(bool is_maximized); - QStringList preferred_languages(); - void set_preferred_languages(QStringList const& languages); - bool show_menubar(); void set_show_menubar(bool show_menubar); signals: void show_menubar_changed(bool show_menubar); - void preferred_languages_changed(QStringList const& languages); void enable_do_not_track_changed(bool enable); protected: diff --git a/UI/Qt/SettingsDialog.cpp b/UI/Qt/SettingsDialog.cpp deleted file mode 100644 index 499be10a3f9..00000000000 --- a/UI/Qt/SettingsDialog.cpp +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2022, Filiph Sandström - * Copyright (c) 2023, Cameron Youell - * - * SPDX-License-Identifier: BSD-2-Clause - */ - -#include -#include -#include -#include -#include -#include - -#include -#include - -namespace Ladybird { - -SettingsDialog::SettingsDialog(QMainWindow* window) - : QDialog(window) - , m_window(window) -{ - m_layout = new QFormLayout(this); - - m_preferred_languages = new QLineEdit(this); - m_preferred_languages->setText(Settings::the()->preferred_languages().join(",")); - QObject::connect(m_preferred_languages, &QLineEdit::editingFinished, this, [this] { - Settings::the()->set_preferred_languages(m_preferred_languages->text().split(",")); - }); - QObject::connect(m_preferred_languages, &QLineEdit::returnPressed, this, [this] { - close(); - }); - - m_layout->addRow(new QLabel("Preferred Language(s)", this), m_preferred_languages); - - setWindowTitle("Settings"); - setLayout(m_layout); - resize(600, 250); -} - -} diff --git a/UI/Qt/SettingsDialog.h b/UI/Qt/SettingsDialog.h deleted file mode 100644 index b1ba4c2b628..00000000000 --- a/UI/Qt/SettingsDialog.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (c) 2022, Filiph Sandström - * Copyright (c) 2023, Cameron Youell - * - * SPDX-License-Identifier: BSD-2-Clause - */ - -#pragma once - -#include -#include -#include -#include -#include -#include - -namespace Ladybird { - -class SettingsDialog : public QDialog { - Q_OBJECT - -public: - explicit SettingsDialog(QMainWindow* window); - -private: - QFormLayout* m_layout; - QMainWindow* m_window { nullptr }; - QLineEdit* m_preferred_languages { nullptr }; -}; - -} diff --git a/UI/Qt/Tab.cpp b/UI/Qt/Tab.cpp index 28d87e79a55..62949bf1b3e 100644 --- a/UI/Qt/Tab.cpp +++ b/UI/Qt/Tab.cpp @@ -938,9 +938,4 @@ void Tab::set_navigator_compatibility_mode(ByteString const& compatibility_mode) debug_request("navigator-compatibility-mode", compatibility_mode); } -void Tab::set_preferred_languages(ReadonlySpan preferred_languages) -{ - m_view->set_preferred_languages(preferred_languages); -} - } diff --git a/UI/Qt/Tab.h b/UI/Qt/Tab.h index ed23e73f25a..e1550387bfc 100644 --- a/UI/Qt/Tab.h +++ b/UI/Qt/Tab.h @@ -88,8 +88,6 @@ public: void set_user_agent_string(ByteString const&); void set_navigator_compatibility_mode(ByteString const&); - void set_preferred_languages(ReadonlySpan preferred_languages); - bool url_is_hidden() const { return m_location_edit->url_is_hidden(); } void set_url_is_hidden(bool url_is_hidden) { m_location_edit->set_url_is_hidden(url_is_hidden); }