X-Git-Url: https://gitweb.stoutner.com/?p=PrivacyBrowserPC.git;a=blobdiff_plain;f=src%2Fwindows%2FBrowserWindow.cpp;h=e84f9574835bdf1ad6c04df0304e518d1ee7c9cb;hp=44614194b78b1e75621316ed4afc52ff5d541781;hb=ab3422aabe802b11f4ddf32df6a2a33e1fff9c96;hpb=cca335d6b9751fbf0e87daa5f122a1b8770488c8 diff --git a/src/windows/BrowserWindow.cpp b/src/windows/BrowserWindow.cpp index 4461419..e84f957 100644 --- a/src/windows/BrowserWindow.cpp +++ b/src/windows/BrowserWindow.cpp @@ -22,6 +22,8 @@ #include "Settings.h" #include "ui_SettingsPrivacy.h" #include "ui_SettingsGeneral.h" +#include "databases/CookiesDatabase.h" +#include "dialogs/CookiesDialog.h" #include "dialogs/DomainSettingsDialog.h" #include "helpers/SearchEngineHelper.h" #include "helpers/UserAgentHelper.h" @@ -32,10 +34,19 @@ // Qt toolkit headers. #include +#include +#include +#include #include +// Construct the class. BrowserWindow::BrowserWindow() : KXmlGuiWindow() { + // Initialize the variables. + cookieListPointer = new std::list; + javaScriptEnabled = false; + localStorageEnabled = false; + // Instantiate the main view pointer. browserViewPointer = new BrowserView(this); @@ -46,16 +57,18 @@ BrowserWindow::BrowserWindow() : KXmlGuiWindow() KActionCollection *actionCollectionPointer = this->actionCollection(); // Add the standard actions. + KStandardAction::openNew(this, SLOT(fileNew()), actionCollectionPointer); + KStandardAction::quit(qApp, SLOT(closeAllWindows()), actionCollectionPointer); + KStandardAction::redisplay(this, SLOT(refresh()), actionCollectionPointer); + fullScreenActionPointer = KStandardAction::fullScreen(this, SLOT(toggleFullScreen()), this, actionCollectionPointer); QAction *backActionPointer = KStandardAction::back(this, SLOT(back()), actionCollectionPointer); QAction *forwardActionPointer = KStandardAction::forward(this, SLOT(forward()), actionCollectionPointer); KStandardAction::home(this, SLOT(home()), actionCollectionPointer); - KStandardAction::openNew(this, SLOT(fileNew()), actionCollectionPointer); - KStandardAction::quit(qApp, SLOT(closeAllWindows()), actionCollectionPointer); KStandardAction::preferences(this, SLOT(settingsConfigure()), actionCollectionPointer); - KStandardAction::redisplay(this, SLOT(refresh()), actionCollectionPointer); // Add the custom actions. userAgentPrivacyBrowserActionPointer = actionCollectionPointer->addAction(QStringLiteral("user_agent_privacy_browser")); + userAgentWebEngineDefaultActionPointer = actionCollectionPointer->addAction(QStringLiteral("user_agent_webengine_default")); userAgentFirefoxLinuxActionPointer = actionCollectionPointer->addAction(QStringLiteral("user_agent_firefox_linux")); userAgentChromiumLinuxActionPointer = actionCollectionPointer->addAction(QStringLiteral("user_agent_chromium_linux")); userAgentFirefoxWindowsActionPointer = actionCollectionPointer->addAction(QStringLiteral("user_agent_firefox_windows")); @@ -71,9 +84,11 @@ BrowserWindow::BrowserWindow() : KXmlGuiWindow() searchEngineBingActionPointer = actionCollectionPointer->addAction(QStringLiteral("search_engine_bing")); searchEngineYahooActionPointer = actionCollectionPointer->addAction(QStringLiteral("search_engine_yahoo")); searchEngineCustomActionPointer = actionCollectionPointer->addAction(QStringLiteral("search_engine_custom")); + QAction *domainSettingsActionPointer = actionCollectionPointer->addAction(QStringLiteral("domain_settings")); + cookiesActionPointer = actionCollectionPointer->addAction(QStringLiteral("cookies")); javaScriptActionPointer = actionCollectionPointer->addAction(QStringLiteral("javascript")); localStorageActionPointer = actionCollectionPointer->addAction(QStringLiteral("local_storage")); - domainSettingsActionPointer = actionCollectionPointer->addAction(QStringLiteral("domain_settings")); + domStorageActionPointer = actionCollectionPointer->addAction(QStringLiteral("dom_storage")); // Create the action groups QActionGroup *userAgentActionGroupPointer = new QActionGroup(this); @@ -81,6 +96,7 @@ BrowserWindow::BrowserWindow() : KXmlGuiWindow() // Add the actions to the groups. userAgentActionGroupPointer->addAction(userAgentPrivacyBrowserActionPointer); + userAgentActionGroupPointer->addAction(userAgentWebEngineDefaultActionPointer); userAgentActionGroupPointer->addAction(userAgentFirefoxLinuxActionPointer); userAgentActionGroupPointer->addAction(userAgentChromiumLinuxActionPointer); userAgentActionGroupPointer->addAction(userAgentFirefoxWindowsActionPointer); @@ -97,7 +113,11 @@ BrowserWindow::BrowserWindow() : KXmlGuiWindow() searchEngineActionGroupPointer->addAction(searchEngineCustomActionPointer); // Set some actions to be checkable. + javaScriptActionPointer->setCheckable(true); + localStorageActionPointer->setCheckable(true); + domStorageActionPointer->setCheckable(true); userAgentPrivacyBrowserActionPointer->setCheckable(true); + userAgentWebEngineDefaultActionPointer->setCheckable(true); userAgentFirefoxLinuxActionPointer->setCheckable(true); userAgentChromiumLinuxActionPointer->setCheckable(true); userAgentFirefoxWindowsActionPointer->setCheckable(true); @@ -113,8 +133,9 @@ BrowserWindow::BrowserWindow() : KXmlGuiWindow() searchEngineYahooActionPointer->setCheckable(true); searchEngineCustomActionPointer->setCheckable(true); - // Set the non-mutable action text. + // Set the action text. userAgentPrivacyBrowserActionPointer->setText(UserAgentHelper::PRIVACY_BROWSER_TRANSLATED); + userAgentWebEngineDefaultActionPointer->setText(UserAgentHelper::WEB_ENGINE_DEFAULT_TRANSLATED); userAgentFirefoxLinuxActionPointer->setText(UserAgentHelper::FIREFOX_LINUX_TRANSLATED); userAgentChromiumLinuxActionPointer->setText(UserAgentHelper::CHROMIUM_LINUX_TRANSLATED); userAgentFirefoxWindowsActionPointer->setText(UserAgentHelper::FIREFOX_WINDOWS_TRANSLATED); @@ -127,12 +148,15 @@ BrowserWindow::BrowserWindow() : KXmlGuiWindow() searchEngineGoogleActionPointer->setText(i18nc("Search engine", "Google")); searchEngineBingActionPointer->setText(i18nc("Search engine", "Bing")); searchEngineYahooActionPointer->setText(i18nc("Search engine", "Yahoo")); - javaScriptActionPointer->setText(i18nc("JavaScript button", "JavaScript")); - localStorageActionPointer->setText(i18nc("Local Storage Button", "Local Storage")); - domainSettingsActionPointer->setText(i18nc("Domain Settings button", "Domain Settings")); + domainSettingsActionPointer->setText(i18nc("Domain Settings action", "Domain Settings")); + cookiesActionPointer->setText(i18nc("The Cookies action, which also displays the number of cookies", "Cookies - %1", cookieListPointer->size())); + javaScriptActionPointer->setText(i18nc("JavaScript action", "JavaScript")); + localStorageActionPointer->setText(i18nc("The Local Storage action", "Local Storage")); + domStorageActionPointer->setText(i18nc("DOM Storage action", "DOM Storage")); // Set the action icons. userAgentPrivacyBrowserActionPointer->setIcon(QIcon(":/icons/privacy-mode")); + userAgentWebEngineDefaultActionPointer->setIcon(QIcon::fromTheme(QStringLiteral("user-group-properties"))); userAgentFirefoxLinuxActionPointer->setIcon(QIcon::fromTheme(QStringLiteral("firefox-esr"))); userAgentChromiumLinuxActionPointer->setIcon(QIcon::fromTheme(QStringLiteral("chromium"))); userAgentFirefoxWindowsActionPointer->setIcon(QIcon::fromTheme(QStringLiteral("firefox-esr"))); @@ -149,11 +173,13 @@ BrowserWindow::BrowserWindow() : KXmlGuiWindow() searchEngineCustomActionPointer->setIcon(QIcon::fromTheme(QStringLiteral("search"))); zoomFactorActionPointer->setIcon(QIcon::fromTheme(QStringLiteral("zoom"))); domainSettingsActionPointer->setIcon(QIcon::fromTheme(QStringLiteral("settings-configure"))); + cookiesActionPointer->setIcon(QIcon::fromTheme(QStringLiteral("preferences-web-browser-cookies"))); + domStorageActionPointer->setIcon(QIcon::fromTheme(QStringLiteral("view-web-browser-dom-tree"))); // Update the on-the-fly menus. - connect(browserViewPointer, SIGNAL(updateUserAgentActions(QString)), this, SLOT(updateUserAgentActions(QString))); + connect(browserViewPointer, SIGNAL(updateUserAgentActions(QString, bool)), this, SLOT(updateUserAgentActions(QString, bool))); connect(browserViewPointer, SIGNAL(updateZoomFactorAction(double)), this, SLOT(updateZoomFactorAction(double))); - connect(browserViewPointer, SIGNAL(updateSearchEngineActions(QString)), this, SLOT(updateSearchEngineActions(QString))); + connect(browserViewPointer, SIGNAL(updateSearchEngineActions(QString, bool)), this, SLOT(updateSearchEngineActions(QString, bool))); // Apply the on-the-fly settings when selected. connect(userAgentActionGroupPointer, SIGNAL(triggered(QAction*)), browserViewPointer, SLOT(applyOnTheFlyUserAgent(QAction*))); @@ -161,23 +187,43 @@ BrowserWindow::BrowserWindow() : KXmlGuiWindow() // Display dialogs. connect(zoomFactorActionPointer, SIGNAL(triggered()), this, SLOT(getZoomFactorFromUser())); + connect(cookiesActionPointer, SIGNAL(triggered()), this, SLOT(openCookiesDialog())); + connect(domainSettingsActionPointer, SIGNAL(triggered()), this, SLOT(openDomainSettings())); // Connect the URL toolbar actions. connect(javaScriptActionPointer, SIGNAL(triggered()), this, SLOT(toggleJavaScript())); connect(localStorageActionPointer, SIGNAL(triggered()), this, SLOT(toggleLocalStorage())); - connect(domainSettingsActionPointer, SIGNAL(triggered()), this, SLOT(openDomainSettings())); + connect(domStorageActionPointer, SIGNAL(triggered()), this, SLOT(toggleDomStorage())); // Update the URL toolbar actions. connect(browserViewPointer, SIGNAL(updateBackAction(bool)), backActionPointer, SLOT(setEnabled(bool))); connect(browserViewPointer, SIGNAL(updateForwardAction(bool)), forwardActionPointer, SLOT(setEnabled(bool))); connect(browserViewPointer, SIGNAL(updateJavaScriptAction(bool)), this, SLOT(updateJavaScriptAction(bool))); connect(browserViewPointer, SIGNAL(updateLocalStorageAction(bool)), this, SLOT(updateLocalStorageAction(bool))); + connect(browserViewPointer, SIGNAL(updateDomStorageAction(bool)), this, SLOT(updateDomStorageAction(bool))); // Setup the GUI based on the browser_ui.rc file. setupGUI(StandardWindowOption::Default, ("browser_ui.rc")); - // Get a handle for the URL toolbar. - KToolBar *urlToolBarPointer = toolBar(QStringLiteral("url_toolbar")); + // Get lists of the actions' associated widgets. + QList userAgentAssociatedWidgetsPointerList = userAgentPrivacyBrowserActionPointer->associatedWidgets(); + QList searchEngineAssociatedWidgetsPointerList = searchEngineMojeekActionPointer->associatedWidgets(); + + // Get the menu widget pointers. It is the second entry, after the main window. + QWidget *userAgentMenuWidgetPointer = userAgentAssociatedWidgetsPointerList[1]; + QWidget *searchEngineMenuWidgetPointer = searchEngineAssociatedWidgetsPointerList[1]; + + // Get the menu pointers. + QMenu *userAgentMenuPointer = qobject_cast(userAgentMenuWidgetPointer); + QMenu *searchEngineMenuPointer = qobject_cast(searchEngineMenuWidgetPointer); + + // Get the menu actions. + userAgentMenuActionPointer = userAgentMenuPointer->menuAction(); + searchEngineMenuActionPointer = searchEngineMenuPointer->menuAction(); + + // Get handles for the toolbars. + navigationToolBarPointer = toolBar(QStringLiteral("navigation_toolbar")); + urlToolBarPointer = toolBar(QStringLiteral("url_toolbar")); // Create a URL line edit. urlLineEditPointer = new KLineEdit(); @@ -213,6 +259,9 @@ BrowserWindow::BrowserWindow() : KXmlGuiWindow() connect(browserViewPointer, SIGNAL(showProgressBar(const int)), this, SLOT(showProgressBar(const int))); connect(browserViewPointer, SIGNAL(hideProgressBar()), progressBarPointer, SLOT(hide())); + // Clear the URL line edit focus when requested. + connect(browserViewPointer, SIGNAL(clearUrlLineEditFocus()), this, SLOT(clearUrlLineEditFocus())); + // Get the URL line edit palettes. noDomainSettingsPalette = urlLineEditPointer->palette(); domainSettingsPalette = urlLineEditPointer->palette(); @@ -223,10 +272,40 @@ BrowserWindow::BrowserWindow() : KXmlGuiWindow() // Update the applied palette. connect(browserViewPointer, SIGNAL(updateDomainSettingsIndicator(bool, QString)), this, SLOT(updateDomainSettingsIndicator(bool, QString))); + // Process cookie changes. + connect(browserViewPointer, SIGNAL(addCookie(QNetworkCookie)), this, SLOT(addCookieToList(QNetworkCookie))); + connect(browserViewPointer, SIGNAL(removeCookie(QNetworkCookie)), this, SLOT(removeCookieFromList(QNetworkCookie))); + + // Process full screen requests. + connect(browserViewPointer, SIGNAL(fullScreenRequested(bool)), this, SLOT(fullScreenRequested(bool))); + + // Create keyboard shortcuts. + QShortcut *f11ShortcutPointer = new QShortcut(QKeySequence(i18nc("The toggle full screen shortcut.", "F11")), this); + QShortcut *escapeShortcutPointer = new QShortcut(QKeySequence::Cancel, this); + + // Connect the keyboard shortcuts to the actions. + connect(f11ShortcutPointer, SIGNAL(activated()), fullScreenActionPointer, SLOT(trigger())); + connect(escapeShortcutPointer, SIGNAL(activated()), this, SLOT(escape())); + // Load the initial website. browserViewPointer->loadInitialWebsite(); } +void BrowserWindow::addCookieToList(const QNetworkCookie &newCookie) const +{ + //qDebug() << "Add cookie: " << newCookie.toRawForm(); + + // Add the new cookie to the list. + cookieListPointer->push_front(newCookie); + + // Update the action text. + cookiesActionPointer->setText(i18nc("The Cookies action, which also displays the number of cookies", "Cookies - %1", cookieListPointer->size())); + + // Update the cookie if it is durable and has new data. + if (CookiesDatabase::isUpdate(newCookie)) + CookiesDatabase::updateCookie(newCookie); +} + void BrowserWindow::addOrEditDomainSettings() const { // Remove the focus from the URL line edit. @@ -269,6 +348,19 @@ void BrowserWindow::back() const browserViewPointer->back(); } +void BrowserWindow::clearUrlLineEditFocus() const +{ + // Remove the focus from the URL line edit. + urlLineEditPointer->clearFocus(); +} + +void BrowserWindow::escape() const +{ + // Exit full screen browsing if it is enabled. + if (fullScreenActionPointer->isChecked()) + fullScreenActionPointer->trigger(); +} + void BrowserWindow::fileNew() const { // Display a new instance of Privacy Browser. @@ -284,6 +376,33 @@ void BrowserWindow::forward() const browserViewPointer->forward(); } +void BrowserWindow::fullScreenRequested(const bool toggleOn) +{ + // Toggle full screen mode. + if (toggleOn) // Turn full screen mode on. + { + // Set the window to be full screen. + fullScreenActionPointer->setFullScreen(window(), true); + + // Hide all the bars. + menuBar()->setVisible(false); + navigationToolBarPointer->setVisible(false); + urlToolBarPointer->setVisible(false); + statusBar()->setVisible(false); + } + else // Turn full screen mode off. + { + // Set the window to not be full screen. + fullScreenActionPointer->setFullScreen(window(), false); + + // Show all the bars. + menuBar()->setVisible(true); + navigationToolBarPointer->setVisible(true); + urlToolBarPointer->setVisible(true); + statusBar()->setVisible(true); + } +} + void BrowserWindow::getZoomFactorFromUser() { // Create an OK flag. @@ -326,6 +445,23 @@ void BrowserWindow::loadUrlFromLineEdit(const QString &url) const browserViewPointer->loadUrlFromLineEdit(url); } +void BrowserWindow::openCookiesDialog() +{ + // Remove the focus from the URL line edit. + urlLineEditPointer->clearFocus(); + + // Instantiate the cookie settings dialog. + CookiesDialog *cookiesDialogPointer = new CookiesDialog(cookieListPointer); + + // Show the dialog. + cookiesDialogPointer->show(); + + // Connect the dialog signals. + connect(cookiesDialogPointer, SIGNAL(addCookie(QNetworkCookie)), browserViewPointer, SLOT(addCookieToStore(QNetworkCookie))); + connect(cookiesDialogPointer, SIGNAL(deleteAllCookies()), browserViewPointer, SLOT(deleteAllCookies())); + connect(cookiesDialogPointer, SIGNAL(deleteCookie(QNetworkCookie)), browserViewPointer, SLOT(deleteCookieFromStore(QNetworkCookie))); +} + void BrowserWindow::openDomainSettings() const { // Remove the focus from the URL line edit. @@ -334,12 +470,6 @@ void BrowserWindow::openDomainSettings() const // Instantiate the domain settings dialog. DomainSettingsDialog *domainSettingsDialogPointer = new DomainSettingsDialog(); - // Set the dialog window title. - domainSettingsDialogPointer->setWindowTitle(i18nc("The domain settings dialog title", "Domain Settings")); - - // Set the modality. - domainSettingsDialogPointer->setWindowModality(Qt::WindowModality::WindowModal);; - // Show the dialog. domainSettingsDialogPointer->show(); @@ -356,6 +486,17 @@ void BrowserWindow::refresh() const browserViewPointer->refresh(); } +void BrowserWindow::removeCookieFromList(const QNetworkCookie &cookie) const +{ + //qDebug() << "Remove cookie: " << cookie.toRawForm(); + + // Remove the cookie from the list. + cookieListPointer->remove(cookie); + + // Update the action text. + cookiesActionPointer->setText(i18nc("The Cookies action, which also displays the number of cookies", "Cookies - %1", cookieListPointer->size())); +} + void BrowserWindow::showProgressBar(const int &progress) const { // Set the progress bar value. @@ -446,6 +587,15 @@ void BrowserWindow::settingsConfigure() } } +void BrowserWindow::toggleDomStorage() const +{ + // Remove the focus from the URL line edit. + urlLineEditPointer->clearFocus(); + + // Toggle DOM storage. + browserViewPointer->toggleDomStorage(); +} + void BrowserWindow::toggleJavaScript() const { // Remove the focus from the URL line edit. @@ -460,80 +610,181 @@ void BrowserWindow::toggleLocalStorage() const // Remove the focus from the URL line edit. urlLineEditPointer->clearFocus(); - // Toggle JavaScript. + // Toggle local storage. browserViewPointer->toggleLocalStorage(); } +void BrowserWindow::toggleFullScreen() +{ + // Toggle the full screen status. + if (fullScreenActionPointer->isChecked()) // Enable full screen browsing mode. + { + // Enable full screen mode. + fullScreenActionPointer->setFullScreen(window(), true); + + // Hide the menu bar if specified. + if (Settings::fullScreenHideMenuBar()) + menuBar()->setVisible(false); + + // Hide the toolbars if specified. + if (Settings::fullScreenHideToolBars()) + { + navigationToolBarPointer->setVisible(false); + urlToolBarPointer->setVisible(false); + } + + // Hide the status bar if specified. + if (Settings::fullScreenHideStatusBar()) + statusBar()->setVisible(false); + } + else // Disable full screen browsing mode. + { + // Disable full screen mode. + fullScreenActionPointer->setFullScreen(window(), false); + + // Show the menu bar. + menuBar()->setVisible(true); + + // Show the toolbars. + navigationToolBarPointer->setVisible(true); + urlToolBarPointer->setVisible(true); + + // Show the status bar. + statusBar()->setVisible(true); + } +} + +void BrowserWindow::updateDomStorageAction(const bool &isEnabled) const +{ + // Set the action checked status. + domStorageActionPointer->setChecked(isEnabled); +} + void BrowserWindow::updateDomainSettingsIndicator(const bool &status, const QString &domainSettingsDomain) { // Set the domain palette according to the status. - if (status) urlLineEditPointer->setPalette(domainSettingsPalette); - else urlLineEditPointer->setPalette(noDomainSettingsPalette); + if (status) + urlLineEditPointer->setPalette(domainSettingsPalette); + else + urlLineEditPointer->setPalette(noDomainSettingsPalette); // Store the domain. currentDomainSettingsDomain = domainSettingsDomain; } -void BrowserWindow::updateJavaScriptAction(const bool &isEnabled) const +void BrowserWindow::updateJavaScriptAction(const bool &isEnabled) { + // Update the JavaScript status. + javaScriptEnabled = isEnabled; + // Set the icon according to the status. - if (isEnabled) javaScriptActionPointer->setIcon(QIcon(":/icons/javascript-warning")); - else javaScriptActionPointer->setIcon(QIcon(":/icons/privacy-mode")); + if (javaScriptEnabled) + javaScriptActionPointer->setIcon(QIcon(QStringLiteral(":/icons/javascript-warning"))); + else + javaScriptActionPointer->setIcon(QIcon(QStringLiteral(":/icons/privacy-mode"))); + + // Set the action checked status. + javaScriptActionPointer->setChecked(javaScriptEnabled); + + // Update the status of the DOM storage action. + domStorageActionPointer->setEnabled(javaScriptEnabled & localStorageEnabled); } -void BrowserWindow::updateLocalStorageAction(const bool &isEnabled) const +void BrowserWindow::updateLocalStorageAction(const bool &isEnabled) { - // Set the icon according to the status. - if (isEnabled) localStorageActionPointer->setIcon(QIcon::fromTheme("disk-quota-low")); - else localStorageActionPointer->setIcon(QIcon::fromTheme("disk-quota")); + // Update the local storage status. + localStorageEnabled = isEnabled; + + // Update the icon. + if (localStorageEnabled) + localStorageActionPointer->setIcon(QIcon::fromTheme(QStringLiteral("disk-quota-high"))); + else + localStorageActionPointer->setIcon(QIcon::fromTheme(QStringLiteral("disk-quota"))); + + // Set the action checked status. + localStorageActionPointer->setChecked(localStorageEnabled); + + // Update the status of the DOM storage action. + domStorageActionPointer->setEnabled(localStorageEnabled & javaScriptEnabled); } -void BrowserWindow::updateSearchEngineActions(const QString &searchEngine) const +void BrowserWindow::updateSearchEngineActions(const QString &searchEngine, const bool &updateCustomSearchEngineStatus) { // Initialize the custom search engine flag. bool customSearchEngine = false; if (searchEngine == "Mojeek") // Mojeek. { + // Check the Mojeek user agent action. searchEngineMojeekActionPointer->setChecked(true); + + // Update the search engine menu action text. + searchEngineMenuActionPointer->setText(i18nc("The main search engine menu action", "Search Engine - Mojeek")); } else if (searchEngine == "Monocles") // Monocles. { + // Check the Monocles user agent action. searchEngineMonoclesActionPointer->setChecked(true); + + // Update the search engine menu action text. + searchEngineMenuActionPointer->setText(i18nc("The main search engine menu action", "Search Engine - Monocles")); } else if (searchEngine == "MetaGer") // MetaGer. { + // Check the MetaGer user agent action. searchEngineMetagerActionPointer->setChecked(true); + + // Update the search engine menu action text. + searchEngineMenuActionPointer->setText(i18nc("The main search engine menu action", "Search Engine - MetaGer")); } else if (searchEngine == "Google") // Google. { + // Check the Google user agent action. searchEngineGoogleActionPointer->setChecked(true); + + // Update the search engine menu action text. + searchEngineMenuActionPointer->setText(i18nc("The main search engine menu action", "Search Engine - Google")); } else if (searchEngine == "Bing") // Bing. { + // Check the Bing user agent action. searchEngineBingActionPointer->setChecked(true); + + // Update the search engine menu action text. + searchEngineMenuActionPointer->setText(i18nc("The main search engine menu action", "Search Engine - Bing")); } else if (searchEngine == "Yahoo") // Yahoo. { + // Check the Yahoo user agent action. searchEngineYahooActionPointer->setChecked(true); + + // Update the search engine menu action text. + searchEngineMenuActionPointer->setText(i18nc("The main search engine menu action", "Search Engine - Yahoo")); } else // Custom search engine. { // Check the user agent. searchEngineCustomActionPointer->setChecked(true); + // Update the search engine menu action text. + searchEngineMenuActionPointer->setText(i18nc("The main search engine menu action", "Search Engine - Custom")); + + // Set the custom search engine text. + searchEngineCustomActionPointer->setText(searchEngine); + // Set the custom search engine flag. customSearchEngine = true; } + // Update the custom search engine enabled boolean. + if (updateCustomSearchEngineStatus) + customSearchEngineEnabled = customSearchEngine; + // Format the custom search engine. - if (customSearchEngine) + if (customSearchEngineEnabled) { // Enable the custom search engine. searchEngineCustomActionPointer->setEnabled(true); - - // Set the custom search engine text. - searchEngineCustomActionPointer->setText(searchEngine); } else { @@ -545,37 +796,101 @@ void BrowserWindow::updateSearchEngineActions(const QString &searchEngine) const } } -void BrowserWindow::updateUserAgentActions(const QString &userAgent) const +void BrowserWindow::updateUserAgentActions(const QString &userAgent, const bool &updateCustomUserAgentStatus) { // Initialize the custom user agent flag. bool customUserAgent = false; // Check the indicated on-the-fly user agent. - if (userAgent == UserAgentHelper::PRIVACY_BROWSER_USER_AGENT) userAgentPrivacyBrowserActionPointer->setChecked(true); // Privacy Browser. - else if (userAgent == UserAgentHelper::FIREFOX_LINUX_USER_AGENT) userAgentFirefoxLinuxActionPointer->setChecked(true); // Firefox Linux. - else if (userAgent == UserAgentHelper::CHROMIUM_LINUX_USER_AGENT) userAgentChromiumLinuxActionPointer->setChecked(true); // Chromium Linux. - else if (userAgent == UserAgentHelper::FIREFOX_WINDOWS_USER_AGENT) userAgentFirefoxWindowsActionPointer->setChecked(true); // Firefox Windows. - else if (userAgent == UserAgentHelper::CHROME_WINDOWS_USER_AGENT) userAgentChromeWindowsActionPointer->setChecked(true); // Chrome Windows. - else if (userAgent == UserAgentHelper::EDGE_WINDOWS_USER_AGENT) userAgentEdgeWindowsActionPointer->setChecked(true); // Edge Windows. - else if (userAgent == UserAgentHelper::SAFARI_MACOS_USER_AGENT) userAgentSafariMacosActionPointer->setChecked(true); // Safara macOS. + if (userAgent == UserAgentHelper::PRIVACY_BROWSER_USER_AGENT) // Privacy Browser. + { + // Check the Privacy Browser user agent action. + userAgentPrivacyBrowserActionPointer->setChecked(true); + + // Update the user agent menu action text. + userAgentMenuActionPointer->setText(i18nc("The main user agent menu action", "User Agent - Privacy Browser")); + } + else if (userAgent == BrowserView::webEngineDefaultUserAgent) // WebEngine default. + { + // check the WebEngine default user agent action. + userAgentWebEngineDefaultActionPointer->setChecked(true); + + // Update the user agent menu action text. + userAgentMenuActionPointer->setText(i18nc("The main user agent menu action", "User Agent - WebEngine default")); + } + else if (userAgent == UserAgentHelper::FIREFOX_LINUX_USER_AGENT) // Firefox on Linux. + { + // Check the Firefox on Linux user agent action. + userAgentFirefoxLinuxActionPointer->setChecked(true); + + // Update the user agent menu action text. + userAgentMenuActionPointer->setText(i18nc("The main user agent menu action", "User Agent - Firefox on Linux")); + } + else if (userAgent == UserAgentHelper::CHROMIUM_LINUX_USER_AGENT) // Chromium on Linux. + { + // Check the Chromium on Linux user agent action. + userAgentChromiumLinuxActionPointer->setChecked(true); + + // Update the user agent menu action text. + userAgentMenuActionPointer->setText(i18nc("The main user agent menu action", "User Agent - Chromium on Linux")); + } + else if (userAgent == UserAgentHelper::FIREFOX_WINDOWS_USER_AGENT) // Firefox on Windows. + { + // Check the Firefox on Windows user agent action. + userAgentFirefoxWindowsActionPointer->setChecked(true); + + // Update the user agent menu action text. + userAgentMenuActionPointer->setText(i18nc("The main user agent menu action", "User Agent - Firefox on Windows")); + } + else if (userAgent == UserAgentHelper::CHROME_WINDOWS_USER_AGENT) // Chrome on Windows. + { + // Check the Chrome on Windows user agent action. + userAgentChromeWindowsActionPointer->setChecked(true); + + // Update the user agent menu action text. + userAgentMenuActionPointer->setText(i18nc("The main user agent menu action", "User Agent - Chrome on Windows")); + } + else if (userAgent == UserAgentHelper::EDGE_WINDOWS_USER_AGENT) // Edge on Windows. + { + // Check the Edge on Windows user agent action. + userAgentEdgeWindowsActionPointer->setChecked(true); + + // Update the user agent menu action text. + userAgentMenuActionPointer->setText(i18nc("The main user agent menu action", "User Agent - Edge on Windows")); + } + else if (userAgent == UserAgentHelper::SAFARI_MACOS_USER_AGENT) // Safari on macOS. + { + // Check the Safari on macOS user agent action. + userAgentSafariMacosActionPointer->setChecked(true); + + // Update the user agent menu action text. + userAgentMenuActionPointer->setText(i18nc("The main user agent menu action", "User Agent - Safari on macOS")); + } else // Custom user agent. { // Check the user agent. userAgentCustomActionPointer->setChecked(true); + // Update the user agent menu action text. + userAgentMenuActionPointer->setText(i18nc("The main user agent menu action", "User Agent - Custom")); + + // Set the custom user agent text. + userAgentCustomActionPointer->setText(userAgent); + // Set the custom user agent flag. customUserAgent = true; } + // Update the custom user agent enabled boolean. + if (updateCustomUserAgentStatus) + customUserAgentEnabled = customUserAgent; + // Format the custom user agent. - if (customUserAgent) + if (customUserAgentEnabled) { // Enable the custom user agent. userAgentCustomActionPointer->setEnabled(true); - - // Set the custom user agent text. - userAgentCustomActionPointer->setText(userAgent); } else {