KStandardAction::quit(qApp, SLOT(closeAllWindows()), actionCollectionPointer);
KStandardAction::preferences(this, SLOT(settingsConfigure()), actionCollectionPointer);
+ // Add the custom actions.
+ userAgentPrivacyBrowserActionPointer = actionCollectionPointer->addAction(QStringLiteral("user_agent_privacy_browser"));
+ userAgentFirefoxLinuxActionPointer = actionCollectionPointer->addAction(QStringLiteral("user_agent_firefox_linux"));
+ userAgentChromiumLinuxActionPointer = actionCollectionPointer->addAction(QStringLiteral("user_agent_chromium_linux"));
+ userAgentFirefoxWindowsActionPointer = actionCollectionPointer->addAction(QStringLiteral("user_agent_firefox_windows"));
+ userAgentChromeWindowsActionPointer = actionCollectionPointer->addAction(QStringLiteral("user_agent_chrome_windows"));
+ userAgentEdgeWindowsActionPointer = actionCollectionPointer->addAction(QStringLiteral("user_agent_edge_windows"));
+ userAgentSafariMacosActionPointer = actionCollectionPointer->addAction(QStringLiteral("user_agent_safari_macos"));
+ userAgentCustomActionPointer = actionCollectionPointer->addAction(QStringLiteral("user_agent_custom"));
+ searchEngineMojeekActionPointer = actionCollectionPointer->addAction(QStringLiteral("search_engine_mojeek"));
+ searchEngineMonoclesActionPointer = actionCollectionPointer->addAction(QStringLiteral("search_engine_monocles"));
+ searchEngineMetagerActionPointer = actionCollectionPointer->addAction(QStringLiteral("search_engine_metager"));
+ searchEngineGoogleActionPointer = actionCollectionPointer->addAction(QStringLiteral("search_engine_google"));
+ searchEngineBingActionPointer = actionCollectionPointer->addAction(QStringLiteral("search_engine_bing"));
+ searchEngineYahooActionPointer = actionCollectionPointer->addAction(QStringLiteral("search_engine_yahoo"));
+ searchEngineCustomActionPointer = actionCollectionPointer->addAction(QStringLiteral("search_engine_custom"));
+
+ // Create the action groups
+ QActionGroup *userAgentActionGroupPointer = new QActionGroup(this);
+ QActionGroup *searchEngineActionGroupPointer = new QActionGroup(this);
+
+ // Add the actions to the groups.
+ userAgentActionGroupPointer->addAction(userAgentPrivacyBrowserActionPointer);
+ userAgentActionGroupPointer->addAction(userAgentFirefoxLinuxActionPointer);
+ userAgentActionGroupPointer->addAction(userAgentChromiumLinuxActionPointer);
+ userAgentActionGroupPointer->addAction(userAgentFirefoxWindowsActionPointer);
+ userAgentActionGroupPointer->addAction(userAgentChromeWindowsActionPointer);
+ userAgentActionGroupPointer->addAction(userAgentEdgeWindowsActionPointer);
+ userAgentActionGroupPointer->addAction(userAgentSafariMacosActionPointer);
+ userAgentActionGroupPointer->addAction(userAgentCustomActionPointer);
+ searchEngineActionGroupPointer->addAction(searchEngineMojeekActionPointer);
+ searchEngineActionGroupPointer->addAction(searchEngineMonoclesActionPointer);
+ searchEngineActionGroupPointer->addAction(searchEngineMetagerActionPointer);
+ searchEngineActionGroupPointer->addAction(searchEngineGoogleActionPointer);
+ searchEngineActionGroupPointer->addAction(searchEngineBingActionPointer);
+ searchEngineActionGroupPointer->addAction(searchEngineYahooActionPointer);
+ searchEngineActionGroupPointer->addAction(searchEngineCustomActionPointer);
+
+ // Set some actions to be checkable.
+ userAgentPrivacyBrowserActionPointer->setCheckable(true);
+ userAgentFirefoxLinuxActionPointer->setCheckable(true);
+ userAgentChromiumLinuxActionPointer->setCheckable(true);
+ userAgentFirefoxWindowsActionPointer->setCheckable(true);
+ userAgentChromeWindowsActionPointer->setCheckable(true);
+ userAgentEdgeWindowsActionPointer->setCheckable(true);
+ userAgentSafariMacosActionPointer->setCheckable(true);
+ userAgentCustomActionPointer->setCheckable(true);
+ searchEngineMojeekActionPointer->setCheckable(true);
+ searchEngineMonoclesActionPointer->setCheckable(true);
+ searchEngineMetagerActionPointer->setCheckable(true);
+ searchEngineGoogleActionPointer->setCheckable(true);
+ searchEngineBingActionPointer->setCheckable(true);
+ searchEngineYahooActionPointer->setCheckable(true);
+ searchEngineCustomActionPointer->setCheckable(true);
+
+ // Set the action names. The custom action text will be set later in the on-the-fly update slots.
+ userAgentPrivacyBrowserActionPointer->setText(i18nc("@action", "Privacy Browser"));
+ userAgentFirefoxLinuxActionPointer->setText(i18nc("@action", "Firefox Linux"));
+ userAgentChromiumLinuxActionPointer->setText(i18nc("@action", "Chromium Linux"));
+ userAgentFirefoxWindowsActionPointer->setText(i18nc("@action", "Firefox Windows"));
+ userAgentChromeWindowsActionPointer->setText(i18nc("@action", "Chrome Windows"));
+ userAgentEdgeWindowsActionPointer->setText(i18nc("@action", "Edge Windows"));
+ userAgentSafariMacosActionPointer->setText(i18nc("@action", "Safari macOS"));
+ searchEngineMojeekActionPointer->setText(i18nc("@action", "Mojeek"));
+ searchEngineMonoclesActionPointer->setText(i18nc("@action", "Monocles"));
+ searchEngineMetagerActionPointer->setText(i18nc("@action", "MetaGer"));
+ searchEngineGoogleActionPointer->setText(i18nc("@action", "Google"));
+ searchEngineBingActionPointer->setText(i18nc("@action", "Bing"));
+ searchEngineYahooActionPointer->setText(i18nc("@action", "Yahoo"));
+
+ // Update the on-the-fly menus.
+ connect(mainViewPointer, SIGNAL(userAgentUpdated(QString)), this, SLOT(updateOnTheFlyUserAgent(QString)));
+ connect(mainViewPointer, SIGNAL(searchEngineUpdated(QString)), this, SLOT(updateOnTheFlySearchEngine(QString)));
+
+ // Apply the on-the-fly settings when selected.
+ connect(userAgentActionGroupPointer, SIGNAL(triggered(QAction*)), mainViewPointer, SLOT(applyOnTheFlyUserAgent(QAction*)));
+ connect(searchEngineActionGroupPointer, SIGNAL(triggered(QAction*)), mainViewPointer, SLOT(applyOnTheFlySearchEngine(QAction*)));
+
+ // Initialize the on-the-fly search engine menu, as the slot connection had not been created when MainView was constructed.
+ updateOnTheFlySearchEngine(Settings::searchEngine());
+
// Update the status bar with the URL when a link is hovered.
connect(mainViewPointer, SIGNAL(linkHovered(QString)), this, SLOT(updateStatusBar(QString)));
}
}
+void BrowserWindow::updateOnTheFlySearchEngine(const QString &searchEngine) const
+{
+ // Initialize the custom search engine flag.
+ bool customSearchEngine = false;
+
+ if (searchEngine == "Mojeek") // Mojeek.
+ {
+ searchEngineMojeekActionPointer->setChecked(true);
+ }
+ else if (searchEngine == "Monocles") // Monocles.
+ {
+ searchEngineMonoclesActionPointer->setChecked(true);
+ }
+ else if (searchEngine == "MetaGer") // MetaGer.
+ {
+ searchEngineMetagerActionPointer->setChecked(true);
+ }
+ else if (searchEngine == "Google") // Google.
+ {
+ searchEngineGoogleActionPointer->setChecked(true);
+ }
+ else if (searchEngine == "Bing") // Bing.
+ {
+ searchEngineBingActionPointer->setChecked(true);
+ }
+ else if (searchEngine == "Yahoo") // Yahoo.
+ {
+ searchEngineYahooActionPointer->setChecked(true);
+ }
+ else // Custom search engine.
+ {
+ // Check the user agent.
+ searchEngineCustomActionPointer->setChecked(true);
+
+ // Set the custom search engine flag.
+ customSearchEngine = true;
+ }
+
+
+ // Format the custom search engine.
+ if (customSearchEngine)
+ {
+ // Enable the custom search engine.
+ searchEngineCustomActionPointer->setEnabled(true);
+
+ // Set the custom search engine text.
+ searchEngineCustomActionPointer->setText(searchEngine);
+ }
+ else
+ {
+ // Disable the custom search engine.
+ searchEngineCustomActionPointer->setEnabled(false);
+
+ // Reset the custom search engine text.
+ searchEngineCustomActionPointer->setText(i18nc("@action", "Custom"));
+ }
+}
+
+void BrowserWindow::updateOnTheFlyUserAgent(const QString &userAgent) const
+{
+ // Initialize the custom user agent flag.
+ bool customUserAgent = false;
+
+ // Check the indicated on-the-fly user agent.
+ if (userAgent == "Privacy Browser") // Privacy Browser.
+ {
+ userAgentPrivacyBrowserActionPointer->setChecked(true);
+ }
+ else if (userAgent == "Firefox Linux") // Firefox Linux.
+ {
+ userAgentFirefoxLinuxActionPointer->setChecked(true);
+ }
+ else if (userAgent == "Chromium Linux") // Chromium Linux.
+ {
+ userAgentChromiumLinuxActionPointer->setChecked(true);
+ }
+ else if (userAgent == "Firefox Windows") // Firefox Windows.
+ {
+ userAgentFirefoxWindowsActionPointer->setChecked(true);
+ }
+ else if (userAgent == "Chrome Windows") // Chrome Windows.
+ {
+ userAgentChromeWindowsActionPointer->setChecked(true);
+ }
+ else if (userAgent == "Edge Windows") // Edge Windows.
+ {
+ userAgentEdgeWindowsActionPointer->setChecked(true);
+ }
+ else if (userAgent == "Safari macOS") // Safari macOS.
+ {
+ userAgentSafariMacosActionPointer->setChecked(true);
+ }
+ else // Custom user agent.
+ {
+ // Check the user agent.
+ userAgentCustomActionPointer->setChecked(true);
+
+ // Set the custom user agent flag.
+ customUserAgent = true;
+ }
+
+
+ // Format the custom user agent.
+ if (customUserAgent)
+ {
+ // Enable the custom user agent.
+ userAgentCustomActionPointer->setEnabled(true);
+
+ // Set the custom user agent text.
+ userAgentCustomActionPointer->setText(userAgent);
+ }
+ else
+ {
+ // Disable the custom user agent.
+ userAgentCustomActionPointer->setEnabled(false);
+
+ // Reset the custom user agent text.
+ userAgentCustomActionPointer->setText(i18nc("@action", "Custom"));
+ }
+}
+
+
void BrowserWindow::updateSearchEngineLabel(const QString &searchEngineString) const
{
// Update the search engine label.
#include "helpers/UserAgentHelper.h"
// Qt framework headers.
+#include <QAction>
#include <QWebEngineProfile>
MainView::MainView(QWidget *parent) : QWidget(parent)
// Don't allow JavaScript to open windows.
webEngineSettingsPointer->setAttribute(QWebEngineSettings::JavascriptCanOpenWindows, false);
- // Set the zoom factor.
- webEngineViewPointer->setZoomFactor(Settings::zoomFactor());
-
// Apply the application settings.
applyApplicationSettings();
- // Apply the domain settings. `false` does not reload the website.
- applyDomainSettings(false);
-
// Set the focus on the WebEngine view.
webEngineViewPointer->setFocus();
}
}
-void MainView::applyApplicationSettings() const
+void MainView::applyApplicationSettings()
{
- // TODO.
+ // Set the search engine URL.
+ searchEngineUrl = SearchEngineHelper::getSearchUrl(Settings::searchEngine());
+
+ // Emit the search engine updated signal, which causes the on-the-fly menu to be updated.
+ emit searchEngineUpdated(Settings::searchEngine());
}
// This exists as a separate function from `applyDomainSettings()` so it can be listed as a slot and function without the need for a boolean argument.
// Apply the user agent.
webEngineProfilePointer->setHttpUserAgent(UserAgentHelper::getUserAgent(Settings::userAgent()));
+ // Emit the user agent updated signal, which causes the on-the-fly menu to be updated.
+ emit userAgentUpdated(Settings::userAgent());
+
+ // Set the zoom factor.
+ webEngineViewPointer->setZoomFactor(Settings::zoomFactor());
+
// Reload the website if requested.
if (reloadWebsite)
{
}
}
+void MainView::applyOnTheFlySearchEngine(QAction *searchEngineActionPointer)
+{
+ // Store the search engine name.
+ QString searchEngineName = searchEngineActionPointer->text();
+
+ // Strip out any `&` characters.
+ searchEngineName.remove('&');
+
+ // Store the search engine string.
+ searchEngineUrl = SearchEngineHelper::getSearchUrl(searchEngineName);
+}
+
+void MainView::applyOnTheFlyUserAgent(QAction *userAgentActionPointer) const
+{
+ // Get the user agent name.
+ QString userAgentName = userAgentActionPointer->text();
+
+ // Strip out any `&` characters.
+ userAgentName.remove('&');
+
+ // Apply the user agent.
+ webEngineProfilePointer->setHttpUserAgent(UserAgentHelper::getUserAgent(userAgentName));
+
+ // Reload the website.
+ webEngineViewPointer->reload();
+}
+
void MainView::goHome() const
{
// Load the homepage.
else // The text is likely a search.
{
// Load the search.
- webEngineViewPointer->setUrl(QUrl::fromUserInput(SearchEngineHelper::getSearchUrl(Settings::searchEngine()) + urlFromUser));
+ webEngineViewPointer->setUrl(QUrl::fromUserInput(searchEngineUrl + urlFromUser));
}
}