X-Git-Url: https://gitweb.stoutner.com/?a=blobdiff_plain;f=src%2Fwindows%2FBrowserWindow.cpp;h=1277e7718501be9be5ce21300b95e7cc6ff2b66b;hb=425fed98271cd951cddef9904e5e271f0fb76fc1;hp=6347ec404cadf44203b22dc6d0867663714cc00c;hpb=efed1601e5f6e79d746866d55d625d777b64a248;p=PrivacyBrowserPC.git diff --git a/src/windows/BrowserWindow.cpp b/src/windows/BrowserWindow.cpp index 6347ec4..1277e77 100644 --- a/src/windows/BrowserWindow.cpp +++ b/src/windows/BrowserWindow.cpp @@ -62,6 +62,8 @@ BrowserWindow::BrowserWindow(bool firstWindow) : KXmlGuiWindow() KStandardAction::print(tabWidgetPointer, SLOT(print()), actionCollectionPointer); QAction *printPreviewActionPointer = KStandardAction::printPreview(tabWidgetPointer, SLOT(printPreview()), actionCollectionPointer); KStandardAction::quit(qApp, SLOT(closeAllWindows()), actionCollectionPointer); + zoomInActionPointer = KStandardAction::zoomIn(this, SLOT(incrementZoom()), actionCollectionPointer); + zoomOutActionPointer = KStandardAction::zoomOut(this, SLOT(decrementZoom()), actionCollectionPointer); KStandardAction::redisplay(this, SLOT(refresh()), actionCollectionPointer); fullScreenActionPointer = KStandardAction::fullScreen(this, SLOT(toggleFullScreen()), this, actionCollectionPointer); QAction *backActionPointer = KStandardAction::back(this, SLOT(back()), actionCollectionPointer); @@ -75,6 +77,10 @@ BrowserWindow::BrowserWindow(bool firstWindow) : KXmlGuiWindow() // Add the custom actions. QAction *newTabActionPointer = actionCollectionPointer->addAction(QLatin1String("new_tab")); QAction *newWindowActionPointer = actionCollectionPointer->addAction(QLatin1String("new_window")); + zoomDefaultActionPointer = actionCollectionPointer->addAction(QLatin1String("zoom_default")); + QAction *reloadAndBypassCacheActionPointer = actionCollectionPointer->addAction(QLatin1String("reload_and_bypass_cache")); + viewSourceActionPointer = actionCollectionPointer->addAction(QLatin1String("view_source")); + viewSourceInNewTabActionPointer = actionCollectionPointer->addAction(QLatin1String("view_source_in_new_tab")); userAgentPrivacyBrowserActionPointer = actionCollectionPointer->addAction(QLatin1String("user_agent_privacy_browser")); userAgentWebEngineDefaultActionPointer = actionCollectionPointer->addAction(QLatin1String("user_agent_webengine_default")); userAgentFirefoxLinuxActionPointer = actionCollectionPointer->addAction(QLatin1String("user_agent_firefox_linux")); @@ -127,6 +133,7 @@ BrowserWindow::BrowserWindow(bool firstWindow) : KXmlGuiWindow() localStorageActionPointer->setCheckable(true); domStorageActionPointer->setCheckable(true); findCaseSensitiveActionPointer->setCheckable(true); + viewSourceActionPointer->setCheckable(true); userAgentPrivacyBrowserActionPointer->setCheckable(true); userAgentWebEngineDefaultActionPointer->setCheckable(true); userAgentFirefoxLinuxActionPointer->setCheckable(true); @@ -148,8 +155,12 @@ BrowserWindow::BrowserWindow(bool firstWindow) : KXmlGuiWindow() UserAgentHelper *userAgentHelperPointer = new UserAgentHelper(); // Set the action text. + viewSourceActionPointer->setText(i18nc("View source action", "View Source")); + viewSourceInNewTabActionPointer->setText(i18nc("View source in new tab action", "View Source in New Tab")); newTabActionPointer->setText(i18nc("New tab action", "New Tab")); newWindowActionPointer->setText(i18nc("New window action", "New Window")); + zoomDefaultActionPointer->setText(i18nc("Zoom default action", "Zoom Default")); + reloadAndBypassCacheActionPointer->setText(i18nc("Reload and bypass cache action", "Reload and Bypass Cache")); userAgentPrivacyBrowserActionPointer->setText(userAgentHelperPointer->PRIVACY_BROWSER_TRANSLATED); userAgentWebEngineDefaultActionPointer->setText(userAgentHelperPointer->WEB_ENGINE_DEFAULT_TRANSLATED); userAgentFirefoxLinuxActionPointer->setText(userAgentHelperPointer->FIREFOX_LINUX_TRANSLATED); @@ -176,17 +187,18 @@ BrowserWindow::BrowserWindow(bool firstWindow) : KXmlGuiWindow() // The toolbar icons don't pick up unless the size is explicit, probably because the toolbar ends up being an intermediate size. newTabActionPointer->setIcon(QIcon::fromTheme(QLatin1String("tab-new"))); newWindowActionPointer->setIcon(QIcon::fromTheme(QLatin1String("window-new"))); + zoomDefaultActionPointer->setIcon(QIcon::fromTheme(QLatin1String("zoom-fit-best"))); + reloadAndBypassCacheActionPointer->setIcon(QIcon::fromTheme(QLatin1String("view-refresh"))); + viewSourceActionPointer->setIcon(QIcon::fromTheme(QLatin1String("view-choose"), QIcon::fromTheme(QLatin1String("accessories-text-editor")))); + viewSourceInNewTabActionPointer->setIcon(QIcon::fromTheme(QLatin1String("view-choose"), QIcon::fromTheme(QLatin1String("accessories-text-editor")))); userAgentPrivacyBrowserActionPointer->setIcon(QIcon(":/icons/privacy-mode.svg")); - userAgentWebEngineDefaultActionPointer->setIcon(QIcon::fromTheme(QLatin1String("qtlogo"), QIcon::fromTheme(QLatin1String("user-group-properties"), - QIcon::fromTheme(QLatin1String("contact-new"))))); + userAgentWebEngineDefaultActionPointer->setIcon(QIcon::fromTheme(QLatin1String("qtlogo"), QIcon::fromTheme(QLatin1String("user-group-properties"), QIcon::fromTheme(QLatin1String("contact-new"))))); userAgentFirefoxLinuxActionPointer->setIcon(QIcon::fromTheme(QLatin1String("firefox-esr"), QIcon::fromTheme(QLatin1String("user-group-properties"), QIcon::fromTheme(QLatin1String("contact-new"))))); - userAgentChromiumLinuxActionPointer->setIcon(QIcon::fromTheme(QLatin1String("chromium"), QIcon::fromTheme(QLatin1String("user-group-properties"), - QIcon::fromTheme(QLatin1String("contact-new"))))); + userAgentChromiumLinuxActionPointer->setIcon(QIcon::fromTheme(QLatin1String("chromium"), QIcon::fromTheme(QLatin1String("user-group-properties"), QIcon::fromTheme(QLatin1String("contact-new"))))); userAgentFirefoxWindowsActionPointer->setIcon(QIcon::fromTheme(QLatin1String("firefox-esr"), QIcon::fromTheme(QLatin1String("user-group-properties"), QIcon::fromTheme(QLatin1String("contact-new"))))); - userAgentChromeWindowsActionPointer->setIcon(QIcon::fromTheme(QLatin1String("chromium"), QIcon::fromTheme(QLatin1String("user-group-properties"), - QIcon::fromTheme(QLatin1String("contact-new"))))); + userAgentChromeWindowsActionPointer->setIcon(QIcon::fromTheme(QLatin1String("chromium"), QIcon::fromTheme(QLatin1String("user-group-properties"), QIcon::fromTheme(QLatin1String("contact-new"))))); userAgentEdgeWindowsActionPointer->setIcon(QIcon::fromTheme(QLatin1String("user-group-properties"), QIcon::fromTheme(QLatin1String("contact-new")))); userAgentSafariMacosActionPointer->setIcon(QIcon::fromTheme(QLatin1String("user-group-properties"), QIcon::fromTheme(QLatin1String("contact-new")))); userAgentCustomActionPointer->setIcon(QIcon::fromTheme(QLatin1String("user-group-properties"), QIcon::fromTheme(QLatin1String("contact-new")))); @@ -207,6 +219,10 @@ BrowserWindow::BrowserWindow(bool firstWindow) : KXmlGuiWindow() // Create the key sequences. QKeySequence ctrlTKeySequence = QKeySequence(i18nc("The open new tab key sequence.", "Ctrl+T")); QKeySequence ctrlNKeySequence = QKeySequence(i18nc("The open new window key sequence.", "Ctrl+N")); + QKeySequence ctrl0KeySequence = QKeySequence(i18nc("The zoom default key sequence.", "Ctrl+0")); + QKeySequence ctrlF5KeySequence = QKeySequence(i18nc("The reload and bypass cache key sequence.", "Ctrl+F5")); + QKeySequence ctrlUKeySequence = QKeySequence(i18nc("The view source key sequence.", "Ctrl+U")); + QKeySequence ctrlShiftUKeySequence = QKeySequence(i18nc("The view source in new tab key sequence.", "Ctrl+Shift+U")); QKeySequence ctrlShiftPKeySequence = QKeySequence(i18nc("The print preview key sequence.", "Ctrl+Shift+P")); QKeySequence ctrlAltPKeySequence = QKeySequence(i18nc("The Privacy Browser user agent key sequence.", "Ctrl+Alt+P")); QKeySequence ctrlAltWKeySequence = QKeySequence(i18nc("The WebEngine Default user agent key sequence.", "Ctrl+Alt+W")); @@ -231,6 +247,10 @@ BrowserWindow::BrowserWindow(bool firstWindow) : KXmlGuiWindow() // Set the action key sequences. actionCollectionPointer->setDefaultShortcut(newTabActionPointer, ctrlTKeySequence); actionCollectionPointer->setDefaultShortcut(newWindowActionPointer, ctrlNKeySequence); + actionCollectionPointer->setDefaultShortcut(zoomDefaultActionPointer, ctrl0KeySequence); + actionCollectionPointer->setDefaultShortcut(reloadAndBypassCacheActionPointer, ctrlF5KeySequence); + actionCollectionPointer->setDefaultShortcut(viewSourceActionPointer, ctrlUKeySequence); + actionCollectionPointer->setDefaultShortcut(viewSourceInNewTabActionPointer, ctrlShiftUKeySequence); actionCollectionPointer->setDefaultShortcut(printPreviewActionPointer, ctrlShiftPKeySequence); actionCollectionPointer->setDefaultShortcut(userAgentPrivacyBrowserActionPointer, ctrlAltPKeySequence); actionCollectionPointer->setDefaultShortcut(userAgentWebEngineDefaultActionPointer, ctrlAltWKeySequence); @@ -255,13 +275,17 @@ BrowserWindow::BrowserWindow(bool firstWindow) : KXmlGuiWindow() // Execute the actions. connect(newTabActionPointer, SIGNAL(triggered()), tabWidgetPointer, SLOT(addTab())); connect(newWindowActionPointer, SIGNAL(triggered()), this, SLOT(newWindow())); + connect(zoomDefaultActionPointer, SIGNAL(triggered()), this, SLOT(zoomDefault())); + connect(reloadAndBypassCacheActionPointer, SIGNAL(triggered()), this, SLOT(reloadAndBypassCache())); + connect(viewSourceActionPointer, SIGNAL(triggered()), this, SLOT(toggleViewSource())); + connect(viewSourceInNewTabActionPointer, SIGNAL(triggered()), this, SLOT(toggleViewSourceInNewTab())); connect(zoomFactorActionPointer, SIGNAL(triggered()), this, SLOT(getZoomFactorFromUser())); connect(cookiesActionPointer, SIGNAL(triggered()), this, SLOT(showCookiesDialog())); connect(domainSettingsActionPointer, SIGNAL(triggered()), this, SLOT(showDomainSettingsDialog())); // Update the on-the-fly menus. connect(tabWidgetPointer, SIGNAL(updateUserAgentActions(QString, bool)), this, SLOT(updateUserAgentActions(QString, bool))); - connect(tabWidgetPointer, SIGNAL(updateZoomFactorAction(double)), this, SLOT(updateZoomFactorAction(double))); + connect(tabWidgetPointer, SIGNAL(updateZoomActions(double)), this, SLOT(updateZoomActions(double))); connect(tabWidgetPointer, SIGNAL(updateSearchEngineActions(QString, bool)), this, SLOT(updateSearchEngineActions(QString, bool))); // Apply the on-the-fly settings when selected. @@ -271,6 +295,9 @@ BrowserWindow::BrowserWindow(bool firstWindow) : KXmlGuiWindow() // Process cookie changes. connect(tabWidgetPointer, SIGNAL(updateCookiesAction(int)), this, SLOT(updateCookiesAction(int))); + // Store the default zoom factor. + connect(tabWidgetPointer, SIGNAL(updateDefaultZoomFactor(double)), this, SLOT(updateDefaultZoomFactor(double))); + // Connect the URL toolbar actions. connect(javaScriptActionPointer, SIGNAL(triggered()), this, SLOT(toggleJavaScript())); connect(localStorageActionPointer, SIGNAL(triggered()), this, SLOT(toggleLocalStorage())); @@ -339,7 +366,8 @@ BrowserWindow::BrowserWindow(bool firstWindow) : KXmlGuiWindow() findTextLineEditPointer->setClearButtonEnabled(true); // Add an edit or add domain settings action to the URL line edit. - QAction *addOrEditDomainSettingsActionPointer = urlLineEditPointer->addAction(QIcon::fromTheme("settings-configure"), QLineEdit::TrailingPosition); + QAction *addOrEditDomainSettingsActionPointer = urlLineEditPointer->addAction(QIcon::fromTheme("settings-configure", QIcon::fromTheme(QLatin1String("preferences-desktop"))), + QLineEdit::TrailingPosition); // Add or edit the current domain settings. connect(addOrEditDomainSettingsActionPointer, SIGNAL(triggered()), this, SLOT(addOrEditDomainSettings())); @@ -382,11 +410,34 @@ BrowserWindow::BrowserWindow(bool firstWindow) : KXmlGuiWindow() // Get a handle for the status bar. QStatusBar *statusBarPointer = statusBar(); - // Create a progress bar. + // Create the status bar widgets. progressBarPointer = new QProgressBar(); + zoomMinusButtonPointer = new QPushButton(); + currentZoomButtonPointer = new QPushButton(); + zoomPlusButtonPointer = new QPushButton(); + + // Set the button icons. + zoomMinusButtonPointer->setIcon(QIcon::fromTheme(QStringLiteral("list-remove-symbolic"))); + zoomPlusButtonPointer->setIcon(QIcon::fromTheme(QStringLiteral("list-add-symbolic"))); + + // Set the button icons to be flat (no borders). + zoomMinusButtonPointer->setFlat(true); + currentZoomButtonPointer->setFlat(true); + zoomPlusButtonPointer->setFlat(true); + + // Handle clicks on the zoom buttons. + connect(zoomMinusButtonPointer, SIGNAL(clicked()), this, SLOT(decrementZoom())); + connect(currentZoomButtonPointer, SIGNAL(clicked()), this, SLOT(getZoomFactorFromUser())); + connect(zoomPlusButtonPointer, SIGNAL(clicked()), this, SLOT(incrementZoom())); - // Add the progress bar to to the status bar. + // Remove the padding around the current zoom button text. + currentZoomButtonPointer->setStyleSheet("padding: 0px;"); + + // Add the widgets to the far right of the status bar. statusBarPointer->addPermanentWidget(progressBarPointer); + statusBarPointer->addPermanentWidget(zoomMinusButtonPointer); + statusBarPointer->addPermanentWidget(currentZoomButtonPointer); + statusBarPointer->addPermanentWidget(zoomPlusButtonPointer); // Update the status bar with the URL when a link is hovered. connect(tabWidgetPointer, SIGNAL(linkHovered(QString)), statusBarPointer, SLOT(showMessage(QString))); @@ -427,7 +478,7 @@ BrowserWindow::BrowserWindow(bool firstWindow) : KXmlGuiWindow() updateLocalStorageAction(Settings::localStorageEnabled()); updateDomStorageAction(Settings::domStorageEnabled()); updateUserAgentActions(UserAgentHelper::getUserAgentFromDatabaseName(Settings::userAgent()), true); - updateZoomFactorAction(Settings::zoomFactor()); + updateZoomActions(Settings::zoomFactor()); // Load the initial website if this is the first window. if (firstWindow) @@ -457,17 +508,11 @@ void BrowserWindow::addOrEditDomainSettings() const domainSettingsDialogPointer = new DomainSettingsDialog(DomainSettingsDialog::EDIT_DOMAIN, currentDomainSettingsName); } - // Set the dialog window title. - domainSettingsDialogPointer->setWindowTitle(i18nc("The domain settings dialog title", "Domain Settings")); - - // Set the modality. - domainSettingsDialogPointer->setWindowModality(Qt::WindowModality::WindowModal);; + // Reload the tabs when domain settings are updated. + connect(domainSettingsDialogPointer, SIGNAL(domainSettingsUpdated()), tabWidgetPointer, SLOT(applyDomainSettingsAndReload())); // Show the dialog. domainSettingsDialogPointer->show(); - - // Reload the tabs when domain settings are updated. - connect(domainSettingsDialogPointer, SIGNAL(domainSettingsUpdated()), tabWidgetPointer, SLOT(applyDomainSettingsAndReload())); } void BrowserWindow::back() const @@ -485,6 +530,22 @@ void BrowserWindow::clearUrlLineEditFocus() const urlLineEditPointer->clearFocus(); } +void BrowserWindow::decrementZoom() +{ + // Update the current zoom factor. + currentZoomFactor = currentZoomFactor - 0.25; + + // Check to make sure the zoom factor is in the valid range (0.25 to 5.00). + if (currentZoomFactor < 0.25) + currentZoomFactor = 0.25; + + // Set the new zoom factor. + tabWidgetPointer->applyOnTheFlyZoomFactor(currentZoomFactor); + + // Update the on-the-fly action text. + updateZoomActions(currentZoomFactor); +} + void BrowserWindow::escape() const { // Process the escape according to the status of the browser. @@ -579,14 +640,11 @@ void BrowserWindow::getZoomFactorFromUser() // Update the zoom factor if the user clicked OK. if (okClicked) { - // Update the current zoom factor. - currentZoomFactor = newZoomFactor; - // Set the new zoom factor. tabWidgetPointer->applyOnTheFlyZoomFactor(newZoomFactor); // Update the on-the-fly action text. - updateZoomFactorAction(newZoomFactor); + updateZoomActions(newZoomFactor); } } @@ -610,6 +668,22 @@ void BrowserWindow::home() const tabWidgetPointer->home(); } +void BrowserWindow::incrementZoom() +{ + // Update the current zoom factor. + currentZoomFactor = currentZoomFactor + 0.25; + + // Check to make sure the zoom factor is in the valid range (0.25 to 5.00). + if (currentZoomFactor > 5.0) + currentZoomFactor = 5.0; + + // Set the new zoom factor. + tabWidgetPointer->applyOnTheFlyZoomFactor(currentZoomFactor); + + // Update the on-the-fly action text. + updateZoomActions(currentZoomFactor); +} + void BrowserWindow::loadUrlFromLineEdit(const QString &url) const { // Remove the focus from the URL line edit. @@ -634,6 +708,15 @@ void BrowserWindow::refresh() const tabWidgetPointer->refresh(); } +void BrowserWindow::reloadAndBypassCache() const +{ + // Remove the focus from the URL line edit. + urlLineEditPointer->clearFocus(); + + // Refresh the web page. + tabWidgetPointer->refresh(); +} + void BrowserWindow::showCookiesDialog() { // Remove the focus from the URL line edit. @@ -684,11 +767,11 @@ void BrowserWindow::showDomainSettingsDialog() const // Instantiate the domain settings dialog. DomainSettingsDialog *domainSettingsDialogPointer = new DomainSettingsDialog(); - // Show the dialog. - domainSettingsDialogPointer->show(); - // Reload the tabs when domain settings are updated. connect(domainSettingsDialogPointer, SIGNAL(domainSettingsUpdated()), tabWidgetPointer, SLOT(applyDomainSettingsAndReload())); + + // Show the dialog. + domainSettingsDialogPointer->show(); } void BrowserWindow::showFindTextActions() const @@ -976,12 +1059,60 @@ void BrowserWindow::toggleFullScreen() } } +void BrowserWindow::toggleViewSource() const +{ + // Get the current URL. + QString url = urlLineEditPointer->text(); + + // Toggle the URL. + if (url.startsWith(QLatin1String("view-source:"))) // The source is currently being viewed. + { + // Remove `view-source:` from the URL. + url = url.remove(0, 12); + } + else // The source is not currently being viewed. + { + // Prepend `view-source:` from the URL. + url = url.prepend(QLatin1String("view-source:")); + } + + // Make it so. + loadUrlFromLineEdit(url); +} + +void BrowserWindow::toggleViewSourceInNewTab() const +{ + // Get the current URL. + QString url = urlLineEditPointer->text(); + + // Toggle the URL. + if (url.startsWith(QLatin1String("view-source:"))) // The source is currently being viewed. + { + // Remove `view-source:` from the URL. + url = url.remove(0, 12); + } + else // The source is not currently being viewed. + { + // Prepend `view-source:` from the URL. + url = url.prepend(QLatin1String("view-source:")); + } + + // Add the new tab. `true` removes the URL line edit focus, `false` does not open a background tab. + tabWidgetPointer->addTab(true, false, url); +} + void BrowserWindow::updateCookiesAction(const int numberOfCookies) const { // Update the action text. cookiesActionPointer->setText(i18nc("The Cookies action, which also displays the number of cookies", "Cookies - %1", numberOfCookies)); } +void BrowserWindow::updateDefaultZoomFactor(const double newDefaultZoomFactor) +{ + // Store the new default zoom factor. + defaultZoomFactor = newDefaultZoomFactor; +} + void BrowserWindow::updateDomStorageAction(const bool &isEnabled) const { // Set the action checked status. @@ -1045,7 +1176,7 @@ void BrowserWindow::updateLocalStorageAction(const bool &isEnabled) // Update the icon. On Gnome, the toolbar icons don't pick up unless the size is explicit, probably because the toolbar ends up being an intermediate size. if (localStorageEnabled) - localStorageActionPointer->setIcon(QIcon::fromTheme(QLatin1String("disk-quota-high"), QIcon(QLatin1String("/usr/share/icons/gnome/32x32/actions/filesaveas.png")))); + localStorageActionPointer->setIcon(QIcon::fromTheme(QLatin1String("disk-quota-high"), QIcon(QLatin1String("/usr/share/icons/gnome/32x32/actions/document-save-as.png")))); else localStorageActionPointer->setIcon(QIcon::fromTheme(QLatin1String("disk-quota"), QIcon(QLatin1String("/usr/share/icons/gnome/32x32/apps/kfm.png")))); @@ -1165,6 +1296,50 @@ void BrowserWindow::updateSearchEngineActions(const QString &searchEngine, const } } +void BrowserWindow::updateSearchEngineLabel(const QString &searchEngineString) const +{ + // Update the search engine label. + searchEngineLabelPointer->setText(SearchEngineHelper::getSearchUrl(searchEngineString)); +} + +void BrowserWindow::updateUrlLineEdit(const QUrl &newUrl) +{ + // Get the new URL string. + QString newUrlString = newUrl.toString(); + + // Update the view source actions. + if (newUrlString.startsWith(QLatin1String("view-source:"))) // The source is currently being viewed. + { + // Mark the view source checkbox. + viewSourceActionPointer->setChecked(true); + + // Update the view in new tab action text. + viewSourceInNewTabActionPointer->setText(i18nc("View rendered website in new tab action", "View Rendered Website in New Tab")); + } + else // The source is not currently being viewed. + { + // Unmark the view source checkbox. + viewSourceActionPointer->setChecked(false); + + // Update the view in new tab action text. + viewSourceInNewTabActionPointer->setText(i18nc("View source in new tab action", "View Source in New Tab")); + } + + // Update the URL line edit if it does not have focus. + if (!urlLineEditPointer->hasFocus()) + { + // Update the URL line edit. + urlLineEditPointer->setText(newUrlString); + + // Set the focus if the new URL is blank. + if (newUrlString == QStringLiteral("")) + urlLineEditPointer->setFocus(); + } + + // Store the current URL. + currentUrl = newUrl; +} + void BrowserWindow::updateUserAgentActions(const QString &userAgent, const bool &updateCustomUserAgentStatus) { // Initialize the custom user agent flag. @@ -1299,49 +1474,47 @@ void BrowserWindow::updateUserAgentActions(const QString &userAgent, const bool } } -void BrowserWindow::updateZoomFactorAction(const double &zoomFactor) +void BrowserWindow::updateUserAgentLabel(const QString &userAgentDatabaseName) const { - // Set the current zoom factor. - currentZoomFactor = zoomFactor; - - // Update the zoom factor action text, formatting the double with 2 decimal places. - zoomFactorActionPointer->setText(ki18nc("@action", "Zoom Factor - %1").subs(zoomFactor, 0, '0', 2).toString()); + // Update the user agent label. + userAgentLabelPointer->setText(UserAgentHelper::getUserAgentFromDatabaseName(userAgentDatabaseName)); } -void BrowserWindow::updateSearchEngineLabel(const QString &searchEngineString) const +void BrowserWindow::updateWindowTitle(const QString &title) { - // Update the search engine label. - searchEngineLabelPointer->setText(SearchEngineHelper::getSearchUrl(searchEngineString)); + // Update the window title. + setWindowTitle(title); } -void BrowserWindow::updateUrlLineEdit(const QUrl &newUrl) +void BrowserWindow::updateZoomActions(const double &zoomFactor) { - // Update the URL line edit if it does not have focus. - if (!urlLineEditPointer->hasFocus()) - { - // Get the new URL string. - QString newUrlString = newUrl.toString(); + // Set the current zoom factor. + currentZoomFactor = zoomFactor; - // Update the URL line edit. - urlLineEditPointer->setText(newUrlString); + // Set the status of the default zoom action. + zoomDefaultActionPointer->setEnabled(currentZoomFactor != defaultZoomFactor); - // Set the focus if the new URL is blank. - if (newUrlString == QStringLiteral("")) - urlLineEditPointer->setFocus(); - } + // Set the status of the zoom in action and button. + zoomInActionPointer->setEnabled(currentZoomFactor <= 4.99); + zoomPlusButtonPointer->setEnabled(currentZoomFactor <= 4.99); - // Store the current URL. - currentUrl = newUrl; -} + // Set the status of the zoom out action and button. + zoomMinusButtonPointer->setEnabled(currentZoomFactor > 0.25); + zoomOutActionPointer->setEnabled(currentZoomFactor > 0.25); -void BrowserWindow::updateUserAgentLabel(const QString &userAgentDatabaseName) const -{ - // Update the user agent label. - userAgentLabelPointer->setText(UserAgentHelper::getUserAgentFromDatabaseName(userAgentDatabaseName)); + + // Update the zoom factor action text, formatting the double with 2 decimal places. `0` specifies no extra field width. `'0'` sets the format to not use scientific notation. + zoomFactorActionPointer->setText(ki18nc("The zoom factor action", "Zoom Factor - %1").subs(zoomFactor, 0, '0', 2).toString()); + + // Update the status bar zoom factor label. + currentZoomButtonPointer->setText(ki18nc("The status bar zoom, which is just the formatted zoom factor", "%1").subs(zoomFactor, 0, '0', 2).toString()); } -void BrowserWindow::updateWindowTitle(const QString &title) +void BrowserWindow::zoomDefault() { - // Update the window title. - setWindowTitle(title); + // Set the new zoom factor. + tabWidgetPointer->applyOnTheFlyZoomFactor(defaultZoomFactor); + + // Update the on-the-fly action text. + updateZoomActions(defaultZoomFactor); }