From 2acc18ead43d42e091196cb4d2346b6fd5a77e9b Mon Sep 17 00:00:00 2001 From: Vadim Troshchinskiy Shmelev Date: Fri, 16 May 2025 23:41:39 +0200 Subject: [PATCH 1/4] Fix CMake warning by bumping version --- CMakeLists.txt | 2 +- digitalclock/CMakeLists.txt | 2 +- qtermwidget/CMakeLists.txt | 2 +- src/CMakeLists.txt | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3d246dd..f3c7251 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.16) +cmake_minimum_required(VERSION 3.20) project(Browser) diff --git a/digitalclock/CMakeLists.txt b/digitalclock/CMakeLists.txt index 58bd30c..fe95830 100644 --- a/digitalclock/CMakeLists.txt +++ b/digitalclock/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.16) +cmake_minimum_required(VERSION 3.20) project(DigitalClock LANGUAGES CXX) diff --git a/qtermwidget/CMakeLists.txt b/qtermwidget/CMakeLists.txt index b664834..7870302 100644 --- a/qtermwidget/CMakeLists.txt +++ b/qtermwidget/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.5 FATAL_ERROR) +cmake_minimum_required(VERSION 3.20 FATAL_ERROR) # CMP0000: Call the cmake_minimum_required() command at the beginning of the top-level # CMakeLists.txt file even before calling the project() command. # The cmake_minimum_required(VERSION) command implicitly invokes the cmake_policy(VERSION) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2dc6ac0..0c34475 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.16) +cmake_minimum_required(VERSION 3.20) project(OGBrowser LANGUAGES CXX) -- 2.40.1 From 98db1963ec9bb33fde4d6411d7ee6de238ce1775 Mon Sep 17 00:00:00 2001 From: Vadim Troshchinskiy Shmelev Date: Fri, 16 May 2025 23:42:03 +0200 Subject: [PATCH 2/4] Use DBus to command browser to quit or change URL --- src/CMakeLists.txt | 10 ++++---- src/dbusinterface.cpp | 25 ++++++++++++++++++++ src/dbusinterface.h | 25 ++++++++++++++++++++ src/main.cpp | 54 ++++++++++++++++++++++++++++++++++++++++++- src/mainwindow.cpp | 18 +++++---------- src/mainwindow.h | 1 + 6 files changed, 116 insertions(+), 17 deletions(-) create mode 100644 src/dbusinterface.cpp create mode 100644 src/dbusinterface.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0c34475..5a391d2 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -29,8 +29,8 @@ endif() set(KB_LAYOUT_DIR "/usr/lib/qtermwidget/kb" CACHE INTERNAL "") -find_package(QT NAMES Qt6 COMPONENTS Widgets LinguistTools Network WebEngineWidgets REQUIRED) -find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets LinguistTools Network WebEngineWidgets REQUIRED) +find_package(QT NAMES Qt6 COMPONENTS Widgets LinguistTools Network WebEngineWidgets DBus REQUIRED) +find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets LinguistTools Network WebEngineWidgets DBus REQUIRED) message(STATUS "Building browser with Qt ${QT_VERSION}") @@ -42,6 +42,7 @@ set(SOURCES ogurlhandler.cpp desktopparser.cpp ogwebpage.cpp + dbusinterface.cpp ) file(GLOB TRANSLATIONS "${PROJECT_SOURCE_DIR}/i18n/*.ts") @@ -50,7 +51,8 @@ message(STATUS "Translations: ${TRANSLATIONS}") -add_executable(OGBrowser ${SOURCES}) +add_executable(OGBrowser ${SOURCES} + dbusinterface.h dbusinterface.cpp) qt6_add_translations(OGBrowser TS_FILES ${TRANSLATIONS} QM_FILES_OUTPUT_VARIABLE qm_files) @@ -58,7 +60,7 @@ set_property(TARGET OGBrowser PROPERTY CXX_STANDARD 17) set_property(TARGET OGBrowser PROPERTY CXX_STANDARD_REQUIRED ON) target_include_directories(OGBrowser PRIVATE "digitalclock" "qtermwidget/lib") -target_link_libraries(OGBrowser PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Network Qt${QT_VERSION_MAJOR}::WebEngineWidgets DigitalClock qtermwidget6) +target_link_libraries(OGBrowser PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Network Qt${QT_VERSION_MAJOR}::WebEngineWidgets Qt${QT_VERSION_MAJOR}::DBus DigitalClock qtermwidget6) message(STATUS "Looking for headers in ${PROJECT_BINARY_DIR}") target_include_directories(OGBrowser PRIVATE ${qtermwidget_INCLUDE_DIRS} ${DigitalClock_INCLUDE_DIRS} ${qtermwidget_LIB_DIRS}/lib ${PROJECT_BINARY_DIR}/../lib) diff --git a/src/dbusinterface.cpp b/src/dbusinterface.cpp new file mode 100644 index 0000000..827ad28 --- /dev/null +++ b/src/dbusinterface.cpp @@ -0,0 +1,25 @@ +#include "dbusinterface.h" +#include +#include +#include + + +DBusInterface::DBusInterface(QObject *parent) : QObject{parent} { + + +} + +void DBusInterface::quit() { + qInfo() << "Quitting"; + QCoreApplication::quit(); +} + + +void DBusInterface::setURL(const QString &url) { + if (_mainWindow) { + qInfo() << "Setting URL to" << url; + _mainWindow->slotSetUrl(QUrl(url)); + } else { + qWarning() << "Can't set URL, no window reference"; + } +} diff --git a/src/dbusinterface.h b/src/dbusinterface.h new file mode 100644 index 0000000..f1b7e74 --- /dev/null +++ b/src/dbusinterface.h @@ -0,0 +1,25 @@ +#ifndef DBUSINTERFACE_H +#define DBUSINTERFACE_H + +#include +#include "mainwindow.h" + + +class DBusInterface : public QObject +{ + Q_OBJECT +public: + explicit DBusInterface(QObject *parent = nullptr); + + void setMainWindow(MainWindow *window) { _mainWindow = window; }; + +public slots: + void quit(); + void setURL(const QString &url); + +signals: +private: + MainWindow* _mainWindow{nullptr}; +}; + +#endif // DBUSINTERFACE_H diff --git a/src/main.cpp b/src/main.cpp index f606106..cff8758 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2,12 +2,17 @@ #include #include #include +#include +#include +#include #include "mainwindow.h" #include "ogcommandline.h" #include "desktopparser.h" +#include "dbusinterface.h" +const QString SERVICE_NAME{"es.opengnsys.OGBrowser.browser"}; int main(int argc, char *argv[]) { @@ -19,6 +24,9 @@ int main(int argc, char *argv[]) QTranslator translator; QStringList translationDirs{QCoreApplication::applicationDirPath(), "", "."}; + DBusInterface dbus_interface = DBusInterface(); + + bool translationsOk = false; for(const QString &dir : translationDirs) { @@ -59,17 +67,60 @@ int main(int argc, char *argv[]) QCommandLineOption ignoreSslErrors("ignore-ssl-errors", "Ignore SSL certificate errors"); parser.addOption(ignoreSslErrors); + QCommandLineOption stopRunning("stop-running", "Stop any running instances"); + parser.addOption(stopRunning); + + QCommandLineOption helpOption = parser.addHelpOption(); OGCommandLineOptions &options = OGCommandLineOptions::getInstance(); parser.process(a); + QStringList positional = parser.positionalArguments(); if (parser.isSet(helpOption)) { return 0; } + auto connection = QDBusConnection::sessionBus(); + if (!connection.isConnected()) { + qWarning() << "Can't connect to the D-Bus session bus!"; + } else { + if (parser.isSet(stopRunning)) { + QDBusInterface iface(SERVICE_NAME, "/"); + if(iface.isValid()) { + auto reply = iface.call("quit"); + return 0; + } else { + qCritical() << "Can't connect to running browser"; + return 1; + } + + return 0; + } + + + if (!connection.registerService(SERVICE_NAME)) { + qCritical() << "Can't register service" << SERVICE_NAME << ", browser already running"; + + if (positional.length() > 0) { + qInfo() << "Setting URL on running browser"; + QDBusInterface iface(SERVICE_NAME, "/"); + if (iface.isValid()) { + auto reply = iface.call("setURL", positional[0]); + exit(0); + } + } + exit(1); + } + + qDebug() << "DBus service" << SERVICE_NAME << "registered"; + + connection.registerObject("/", &dbus_interface, QDBusConnection::ExportAllSlots); + qDebug() << "DBus object registered"; + } + if (parser.isSet(openInNewTabOption)) { options.setNewTabBehavior(OGCommandLineOptions::NewTabBehavior::NewTab); } @@ -86,12 +137,13 @@ int main(int argc, char *argv[]) options.setIgnoreSslErrors(true); } - QStringList positional = parser.positionalArguments(); + if ( positional.length() > 0) { options.setUrl( positional[0 ] ); } MainWindow w; + dbus_interface.setMainWindow(&w); w.show(); return a.exec(); } diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index c54824f..bbfe92a 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -190,18 +190,7 @@ MainWindow::MainWindow(QWidget *parent) m_webBar->setText(url.toString()); - qInfo() << "Page set to" << url; - m_web->load(url); - - - - - - - - - // auto ktm = Konsole::KeyboardTranslatorManager::instance(); - + slotSetUrl(url); showMaximized(); @@ -335,6 +324,11 @@ void MainWindow::slotWebLoadFinished(bool ok) } +void MainWindow::slotSetUrl(const QUrl &url) { + qInfo() << "Page set to" << url; + m_web->load(url); +} + void MainWindow::slotUrlChanged(const QUrl &url) { m_webBar->setText(url.toString()); diff --git a/src/mainwindow.h b/src/mainwindow.h index 6bc6937..e257fa1 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -73,6 +73,7 @@ class MainWindow : public QMainWindow void slotDeleteTerminal(); // Funcion para el webar + void slotSetUrl(const QUrl &url); void slotUrlChanged(const QUrl &url); void commandQueued(const QString &command, bool confirm, bool returnOutput); -- 2.40.1 From ada499dbb6a901fbad5ec35a5d6a3233d5236c8b Mon Sep 17 00:00:00 2001 From: Vadim Troshchinskiy Shmelev Date: Mon, 19 May 2025 12:15:58 +0200 Subject: [PATCH 3/4] Increment version --- src/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5a391d2..e4c3b3d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -22,7 +22,7 @@ endif() if (NOT DEFINED CPACK_PACKAGE_VERSION_PATCH) - set(CPACK_PACKAGE_VERSION_PATCH "0") + set(CPACK_PACKAGE_VERSION_PATCH "1") endif() -- 2.40.1 From 413e86b330eca2be31d894ac535c2685f2fee82f Mon Sep 17 00:00:00 2001 From: Natalia Serrano Date: Mon, 19 May 2025 14:25:06 +0200 Subject: [PATCH 4/4] refs #2019 Increment version --- CHANGELOG.md | 19 +++++++++++++++++++ src/CMakeLists.txt | 4 ++-- 2 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..ada87e4 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,19 @@ + +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [2.1.0] - 2025-05-19 + +### Changed + +- Use DBus, allow to change the browser's URL + +## [2.0.0] - 2024-10-14 + +### Added + +- Initial release of the QT6 browser diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e4c3b3d..8935f7a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -17,12 +17,12 @@ endif() if (NOT DEFINED CPACK_PACKAGE_VERSION_MINOR) - set(CPACK_PACKAGE_VERSION_MINOR "0") + set(CPACK_PACKAGE_VERSION_MINOR "1") endif() if (NOT DEFINED CPACK_PACKAGE_VERSION_PATCH) - set(CPACK_PACKAGE_VERSION_PATCH "1") + set(CPACK_PACKAGE_VERSION_PATCH "0") endif() -- 2.40.1