From: Soren Stoutner Date: Sat, 29 Jan 2022 20:01:40 +0000 (-0700) Subject: Display hovered link URLs in the status bar. X-Git-Tag: v0.1~70 X-Git-Url: https://gitweb.stoutner.com/?p=PrivacyBrowserPC.git;a=commitdiff_plain;h=8e2e267828a6fbd7ed9950204c50a100e3f413fa Display hovered link URLs in the status bar. --- diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2b5beb1..320ae9d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -21,8 +21,8 @@ add_executable(privacy-browser resources.qrc) # List the sources to include in the executable. target_sources(privacy-browser PRIVATE + browserwindow.cpp main.cpp - mainwindow.cpp mainview.cpp ) diff --git a/src/browserwindow.cpp b/src/browserwindow.cpp new file mode 100644 index 0000000..d539fed --- /dev/null +++ b/src/browserwindow.cpp @@ -0,0 +1,94 @@ +/* + * Copyright © 2022 Soren Stoutner . + * + * This file is part of Privacy Browser PC . + * + * Privacy Browser PC is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Privacy Browser PC is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Privacy Browser PC. If not, see . + */ + +// Application headers. +#include "browserwindow.h" +#include "mainview.h" +#include "settings.h" +#include "ui_settings.h" + +// KDE Frameworks headers. +#include +#include + +// Qt framework headers. +#include + +BrowserWindow::BrowserWindow() : KXmlGuiWindow() +{ + // Instantiate the main view pointer. + MainView *mainViewPointer = new MainView(this); + + // Set the main view as the central widget. + setCentralWidget(mainViewPointer); + + // Get a handle for the action collectoin. + KActionCollection *actionCollectionPointer = this->actionCollection(); + + // Add the standard actions. + KStandardAction::openNew(this, SLOT(fileNew()), actionCollectionPointer); + KStandardAction::quit(qApp, SLOT(closeAllWindows()), actionCollectionPointer); + KStandardAction::preferences(this, SLOT(settingsConfigure()), actionCollectionPointer); + + // Update the status bar with the URL when a link is hovered. + connect(mainViewPointer, SIGNAL(linkHovered(QString)), this, SLOT(updateStatusBar(QString))); + + // Setup the GUI based on the privacybrowserui.rc file. + setupGUI(); +} + +void BrowserWindow::fileNew() +{ + // Display a new instance of Privacy Browser. + (new BrowserWindow)->show(); +} + +void BrowserWindow::settingsConfigure() +{ + // Check to make sure the dialog box isn't already displayed. + if (!KConfigDialog::exists(QStringLiteral("settings"))) + { + // Create a general settings page. + QWidget *generalSettingsWidgetPointer = new QWidget; + + // Instantiate the settings UI. + Ui::Settings settingsUi; + + // Setup the UI to display the general settings widget. + settingsUi.setupUi(generalSettingsWidgetPointer); + + // Instantiate a settings config dialog from the settings.kcfg file. + KConfigDialog *configDialogPointer = new KConfigDialog(this, QStringLiteral("settings"), Settings::self()); + + // Add the general settings widget page. + configDialogPointer->addPage(generalSettingsWidgetPointer, i18nc("@title:tab", "General"), QStringLiteral("breeze-settings")); + + // Delete the config dialog when it is closed. + configDialogPointer->setAttribute(Qt::WA_DeleteOnClose); + + // Make it so. + configDialogPointer->show(); + } +} + +void BrowserWindow::updateStatusBar(const QString &statusBarMessage) +{ + // Display the status bar message. + statusBar()->showMessage(statusBarMessage); +} diff --git a/src/browserwindow.h b/src/browserwindow.h new file mode 100644 index 0000000..613f210 --- /dev/null +++ b/src/browserwindow.h @@ -0,0 +1,41 @@ +/* + * Copyright © 2022 Soren Stoutner . + * + * This file is part of Privacy Browser PC . + * + * Privacy Browser PC is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Privacy Browser PC is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Privacy Browser PC. If not, see . + */ + +#ifndef BROWSERWINDOW_H +#define BROWSERWINDOW_H + +// KDE Frameworks headers. +#include + +class BrowserWindow : public KXmlGuiWindow +{ + // Include the Q_OBJECT macro. + Q_OBJECT + +public: + // The default constructor. + BrowserWindow(); + +private Q_SLOTS: + // Define the private slots. + void fileNew(); + void settingsConfigure(); + void updateStatusBar(const QString &statusBarMessage); +}; +#endif diff --git a/src/main.cpp b/src/main.cpp index 6bf5e74..80909e2 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -18,7 +18,7 @@ */ // Application headers. -#include "mainwindow.h" +#include "browserwindow.h" // KDE Frameworks headers. #include @@ -79,10 +79,10 @@ int main(int argc, char *argv[]) KDBusService appDBusService(KDBusService::Multiple | KDBusService::NoExitOnFailure); // Create the main window. - MainWindow *mainWindowPointer = new MainWindow; + BrowserWindow *browserWindowPointer = new BrowserWindow; // Show the main window. - mainWindowPointer->show(); + browserWindowPointer->show(); // Return the application. return application.exec(); diff --git a/src/mainview.cpp b/src/mainview.cpp index e46f00d..b1adcbf 100644 --- a/src/mainview.cpp +++ b/src/mainview.cpp @@ -18,6 +18,7 @@ */ // Application headers +#include "browserwindow.h" #include "mainview.h" #include "settings.h" @@ -39,6 +40,9 @@ MainView::MainView(QWidget *parent) : QWidget(parent) urlLineEditPointer = mainViewUi.urlLineEdit; webEngineViewPointer = mainViewUi.webEngineView; + // Get a handle for the webpage. + QWebEnginePage *webEnginePagePointer = webEngineViewPointer->page(); + // Update the webengine view from the URL line edit. connect(urlLineEditPointer, SIGNAL(returnKeyPressed(const QString)), this, SLOT(loadUrl(const QString))); @@ -47,9 +51,15 @@ MainView::MainView(QWidget *parent) : QWidget(parent) connect(webEngineViewPointer, SIGNAL(loadProgress(int)), this, SLOT(updateUrlLineEdit())); connect(webEngineViewPointer, SIGNAL(loadFinished(bool)), this, SLOT(updateUrlLineEdit())); + // Listen for hovered link URLs. + connect(webEnginePagePointer, SIGNAL(linkHovered(QString)), this, SLOT(pageLinkHovered(QString))); + // Set the zoom factor. webEngineViewPointer->setZoomFactor(Settings::zoomFactor()); + // Set the focus on the WebEngine view. + webEngineViewPointer->setFocus(); + // Load a website. webEngineViewPointer->setUrl(QUrl(QStringLiteral("https://www.stoutner.com/"))); } @@ -60,10 +70,20 @@ void MainView::loadUrl(const QString &urlFromUser) webEngineViewPointer->setUrl(QUrl::fromUserInput(urlFromUser)); } +void MainView::pageLinkHovered(const QString &linkUrl) +{ + // Emit a signal so that the browser window can update the status bar. + emit linkHovered(linkUrl); +} + void MainView::updateUrlLineEdit() { - // Update the URL line edit. - urlLineEditPointer->setUrl(webEngineViewPointer->url().toString()); + // Update the URL line edit if it does not have focus. + if (!urlLineEditPointer->hasFocus()) + { + // Update the URL line edit. + urlLineEditPointer->setUrl(webEngineViewPointer->url().toString()); + } // Reapply the zoom factor. This is a bug in QWebEngineView that resets the zoom with every load. Hopefully it will be fixed in Qt6. webEngineViewPointer->setZoomFactor(Settings::zoomFactor()); diff --git a/src/mainview.h b/src/mainview.h index 9affb38..47a9f27 100644 --- a/src/mainview.h +++ b/src/mainview.h @@ -32,9 +32,14 @@ public: // The default contructor. explicit MainView(QWidget *parent); +signals: + // Define the signals. + void linkHovered(const QString &linkUrl); + private Q_SLOTS: // Define the private slots. void loadUrl(const QString &urlFromUser); + void pageLinkHovered(const QString &linkUrl); void updateUrlLineEdit(); private: diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp deleted file mode 100644 index c48e495..0000000 --- a/src/mainwindow.cpp +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright © 2022 Soren Stoutner . - * - * This file is part of Privacy Browser PC . - * - * Privacy Browser PC is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Privacy Browser PC is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Privacy Browser PC. If not, see . - */ - -// Application headers. -#include "mainview.h" -#include "mainwindow.h" -#include "settings.h" -#include "ui_settings.h" - -// KDE Frameworks headers. -#include -#include - -MainWindow::MainWindow() : KXmlGuiWindow() -{ - // Instantiate the main view pointer. - MainView *mainViewPointer = new MainView(this); - - // Set the main view as the central widget. - setCentralWidget(mainViewPointer); - - // Get a handle for the action collectoin. - KActionCollection *actionCollectionPointer = this->actionCollection(); - - // Add the standard actions. - KStandardAction::openNew(this, SLOT(fileNew()), actionCollectionPointer); - KStandardAction::quit(qApp, SLOT(closeAllWindows()), actionCollectionPointer); - KStandardAction::preferences(this, SLOT(settingsConfigure()), actionCollectionPointer); - - // Setup the GUI based on the privacybrowserui.rc file. - setupGUI(); -} - -void MainWindow::fileNew() -{ - // Display a new instance of Privacy Browser. - (new MainWindow)->show(); -} - -void MainWindow::settingsConfigure() -{ - // Check to make sure the dialog box isn't already displayed. - if (!KConfigDialog::exists(QStringLiteral("settings"))) - { - // Create a general settings page. - QWidget *generalSettingsWidgetPointer = new QWidget; - - // Instantiate the settings UI. - Ui::Settings settingsUi; - - // Setup the UI to display the general settings widget. - settingsUi.setupUi(generalSettingsWidgetPointer); - - // Instantiate a settings config dialog from the settings.kcfg file. - KConfigDialog *configDialogPointer = new KConfigDialog(this, QStringLiteral("settings"), Settings::self()); - - // Add the general settings widget page. - configDialogPointer->addPage(generalSettingsWidgetPointer, i18nc("@title:tab", "General"), QStringLiteral("breeze-settings")); - - // Delete the config dialog when it is closed. - configDialogPointer->setAttribute(Qt::WA_DeleteOnClose); - - // Make it so. - configDialogPointer->show(); - } -} diff --git a/src/mainwindow.h b/src/mainwindow.h deleted file mode 100644 index 588ac9e..0000000 --- a/src/mainwindow.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright © 2022 Soren Stoutner . - * - * This file is part of Privacy Browser PC . - * - * Privacy Browser PC is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Privacy Browser PC is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Privacy Browser PC. If not, see . - */ - -#ifndef MAINWINDOW_H -#define MAINWINDOW_H - -// KDE Frameworks headers. -#include - -class MainWindow : public KXmlGuiWindow -{ - // Include the Q_OBJECT macro. - Q_OBJECT - -public: - // The default constructor. - MainWindow(); - -private Q_SLOTS: - // Define the private slots. - void fileNew(); - void settingsConfigure(); -}; -#endif