From 132ab775d8bf712c2f461e40e4e20c431fcadc90 Mon Sep 17 00:00:00 2001 From: Jamie Mansfield Date: Tue, 23 Jul 2024 21:11:47 +0100 Subject: [PATCH] Ladybird/Qt: Add setting for preferred languages --- Ladybird/Qt/BrowserWindow.cpp | 19 +++++++++++++++++++ Ladybird/Qt/Settings.cpp | 11 +++++++++++ Ladybird/Qt/Settings.h | 4 ++++ Ladybird/Qt/SettingsDialog.cpp | 10 ++++++++++ Ladybird/Qt/SettingsDialog.h | 1 + Ladybird/Qt/Tab.cpp | 5 +++++ Ladybird/Qt/Tab.h | 2 ++ 7 files changed, 52 insertions(+) diff --git a/Ladybird/Qt/BrowserWindow.cpp b/Ladybird/Qt/BrowserWindow.cpp index 66dd4b5c72a..006c2fa6072 100644 --- a/Ladybird/Qt/BrowserWindow.cpp +++ b/Ladybird/Qt/BrowserWindow.cpp @@ -104,6 +104,18 @@ BrowserWindow::BrowserWindow(Vector const& initial_urls, WebView::Cook }); }); + 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()) @@ -826,11 +838,18 @@ 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_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->set_enable_do_not_track(Settings::the()->enable_do_not_track()); tab->view().set_preferred_color_scheme(m_preferred_color_scheme); diff --git a/Ladybird/Qt/Settings.cpp b/Ladybird/Qt/Settings.cpp index a77ab7ed7ab..48e89e540e1 100644 --- a/Ladybird/Qt/Settings.cpp +++ b/Ladybird/Qt/Settings.cpp @@ -74,6 +74,17 @@ void Settings::set_search_engine(WebView::SearchEngine search_engine) emit search_engine_changed(m_search_engine); } +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); +} + Settings::EngineProvider Settings::autocomplete_engine() { EngineProvider engine_provider; diff --git a/Ladybird/Qt/Settings.h b/Ladybird/Qt/Settings.h index 06a5fa23bc7..2c7649ea2d0 100644 --- a/Ladybird/Qt/Settings.h +++ b/Ladybird/Qt/Settings.h @@ -47,6 +47,9 @@ public: WebView::SearchEngine search_engine() const { return m_search_engine; } void set_search_engine(WebView::SearchEngine engine); + QStringList preferred_languages(); + void set_preferred_languages(QStringList const& languages); + struct EngineProvider { QString name; QString url; @@ -71,6 +74,7 @@ signals: void show_menubar_changed(bool show_menubar); void enable_search_changed(bool enable); void search_engine_changed(WebView::SearchEngine engine); + void preferred_languages_changed(QStringList const& languages); void enable_do_not_track_changed(bool enable); protected: diff --git a/Ladybird/Qt/SettingsDialog.cpp b/Ladybird/Qt/SettingsDialog.cpp index f0f5be0529f..47d0694c9ff 100644 --- a/Ladybird/Qt/SettingsDialog.cpp +++ b/Ladybird/Qt/SettingsDialog.cpp @@ -28,6 +28,15 @@ SettingsDialog::SettingsDialog(QMainWindow* window) m_search_engine_dropdown->setText(qstring_from_ak_string(Settings::the()->search_engine().name)); m_search_engine_dropdown->setMaximumWidth(200); + 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_enable_autocomplete = new QCheckBox(this); m_enable_autocomplete->setChecked(Settings::the()->enable_autocomplete()); @@ -61,6 +70,7 @@ SettingsDialog::SettingsDialog(QMainWindow* window) m_layout->addRow(new QLabel("Page on New Tab", this), m_new_tab_page); m_layout->addRow(new QLabel("Enable Search", this), m_enable_search); m_layout->addRow(new QLabel("Search Engine", this), m_search_engine_dropdown); + m_layout->addRow(new QLabel("Preferred Language(s)", this), m_preferred_languages); m_layout->addRow(new QLabel("Enable Autocomplete", this), m_enable_autocomplete); m_layout->addRow(new QLabel("Autocomplete Engine", this), m_autocomplete_engine_dropdown); m_layout->addRow(new QLabel("Send web sites a \"Do Not Track\" request", this), m_enable_do_not_track); diff --git a/Ladybird/Qt/SettingsDialog.h b/Ladybird/Qt/SettingsDialog.h index 8a8e9998b8f..d8f6b18aaaf 100644 --- a/Ladybird/Qt/SettingsDialog.h +++ b/Ladybird/Qt/SettingsDialog.h @@ -30,6 +30,7 @@ private: QLineEdit* m_new_tab_page { nullptr }; QCheckBox* m_enable_search { nullptr }; QPushButton* m_search_engine_dropdown { nullptr }; + QLineEdit* m_preferred_languages { nullptr }; QCheckBox* m_enable_autocomplete { nullptr }; QPushButton* m_autocomplete_engine_dropdown { nullptr }; QCheckBox* m_enable_do_not_track { nullptr }; diff --git a/Ladybird/Qt/Tab.cpp b/Ladybird/Qt/Tab.cpp index 35a7d40eaef..201b4c41387 100644 --- a/Ladybird/Qt/Tab.cpp +++ b/Ladybird/Qt/Tab.cpp @@ -1005,6 +1005,11 @@ void Tab::set_navigator_compatibility_mode(ByteString const& compatibility_mode) debug_request("navigator-compatibility-mode", compatibility_mode); } +void Tab::set_preferred_languages(Vector const& preferred_languages) +{ + m_view->set_preferred_languages(preferred_languages); +} + void Tab::set_enable_do_not_track(bool enable) { m_view->set_enable_do_not_track(enable); diff --git a/Ladybird/Qt/Tab.h b/Ladybird/Qt/Tab.h index 86970fcd0fe..cb8a8030373 100644 --- a/Ladybird/Qt/Tab.h +++ b/Ladybird/Qt/Tab.h @@ -74,6 +74,8 @@ public: void set_user_agent_string(ByteString const&); void set_navigator_compatibility_mode(ByteString const&); + void set_preferred_languages(Vector const& preferred_languages); + void set_enable_do_not_track(bool); bool url_is_hidden() const { return m_location_edit->url_is_hidden(); }