From 3d2e70c352736d809d6d0b705864ce17ffde68ae Mon Sep 17 00:00:00 2001 From: Soren Stoutner Date: Mon, 31 Jan 2022 15:55:09 -0700 Subject: [PATCH] Enable the forward and back mouse buttons. --- src/CMakeLists.txt | 1 + src/mainview.cpp | 10 +++++- src/mainview.h | 2 +- src/mouseeventfilter.cpp | 70 ++++++++++++++++++++++++++++++++++++++++ src/mouseeventfilter.h | 43 ++++++++++++++++++++++++ 5 files changed, 124 insertions(+), 2 deletions(-) create mode 100644 src/mouseeventfilter.cpp create mode 100644 src/mouseeventfilter.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 320ae9d..1043918 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -24,6 +24,7 @@ target_sources(privacy-browser PRIVATE browserwindow.cpp main.cpp mainview.cpp + mouseeventfilter.cpp ) # Add the Qt logging category. This will create the `debug.h` header file. diff --git a/src/mainview.cpp b/src/mainview.cpp index 75767bb..8749760 100644 --- a/src/mainview.cpp +++ b/src/mainview.cpp @@ -20,12 +20,13 @@ // Application headers #include "browserwindow.h" #include "mainview.h" +#include "mouseeventfilter.h" #include "settings.h" // KDE Framework headers. #include -// Qt framework headers. +// Qt headers. #include #include @@ -59,6 +60,12 @@ MainView::MainView(QWidget *parent) : QWidget(parent) connect(backButtonPointer, SIGNAL(clicked()), webEngineViewPointer, SLOT(back())); connect(forwardButtonPointer, SIGNAL(clicked()), webEngineViewPointer, SLOT(forward())); + // Instantiate the mouse event pointer. + MouseEventFilter *mouseEventFilterPointer = new MouseEventFilter(webEngineViewPointer); + + // Install the mouse event filter. + qApp->installEventFilter(mouseEventFilterPointer); + // Listen for hovered link URLs. connect(webEnginePagePointer, SIGNAL(linkHovered(QString)), this, SLOT(pageLinkHovered(QString))); @@ -96,6 +103,7 @@ void MainView::updateInterface() urlLineEditPointer->setUrl(webEngineViewPointer->url().toString()); } + // Update the status of the forward and back buttons. backButtonPointer->setEnabled(webEngineHistoryPointer->canGoBack()); forwardButtonPointer->setEnabled(webEngineHistoryPointer->canGoForward()); diff --git a/src/mainview.h b/src/mainview.h index a28565e..5e5535f 100644 --- a/src/mainview.h +++ b/src/mainview.h @@ -29,7 +29,7 @@ class MainView : public QWidget Q_OBJECT public: - // The default contructor. + // The primary contructor. explicit MainView(QWidget *parent); signals: diff --git a/src/mouseeventfilter.cpp b/src/mouseeventfilter.cpp new file mode 100644 index 0000000..4f1ec82 --- /dev/null +++ b/src/mouseeventfilter.cpp @@ -0,0 +1,70 @@ +/* + * 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 "mouseeventfilter.h" + +// Qt headers. +#include +#include + +// The primary constructor. +MouseEventFilter::MouseEventFilter(QWebEngineView *webEngineView) : QObject() +{ + // Save a handle to the WebEngine view. + webEngineViewPointer = webEngineView; +}; + +bool MouseEventFilter::eventFilter(QObject *objectPointer, QEvent *eventPointer) +{ + // Only process mouse button press events. + if (eventPointer->type() == QEvent::MouseButtonPress) + { + // Tell the compiler to ignore the unused object pointer. + (void)objectPointer; + + // Cast the event to a mouse event. + QMouseEvent *mouseEventPointer = static_cast(eventPointer); + + // Run the command according to the button that was pushed. + switch (mouseEventPointer->button()) + { + case (Qt::BackButton): + // Tell the WebEngine to go back. + webEngineViewPointer->back(); + + // Consume the event. + return true; + + case (Qt::ForwardButton): + // Tell the WebEngine to go forward. + webEngineViewPointer->forward(); + + // Consume the event. + return true; + + default: + // Do not consume the event. + return false; + } + } + + // Do not consume the event. + return false; +} diff --git a/src/mouseeventfilter.h b/src/mouseeventfilter.h new file mode 100644 index 0000000..82cee6f --- /dev/null +++ b/src/mouseeventfilter.h @@ -0,0 +1,43 @@ +/* + * 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 MOUSEEVENTFILTER_H +#define MOUSEEVENTFILTER_H + +// Qt headers. +#include +#include + +class MouseEventFilter : public QObject +{ + // Include the Q_OBJECT macro. + Q_OBJECT + +public: + // The primary constructor. + MouseEventFilter(QWebEngineView *webEngineView); + +protected: + bool eventFilter(QObject *objectPointer, QEvent *eventPointer) override; + +private: + // Define the private variables. + QWebEngineView *webEngineViewPointer; +}; +#endif -- 2.43.0