Merge pull request 'dbus-interface' (#7) from dbus-interface into main

Reviewed-on: #7
main 2.1.0
Natalia Serrano 2025-05-19 14:26:35 +02:00
commit c4d19d9aca
10 changed files with 140 additions and 22 deletions

19
CHANGELOG.md 100644
View File

@ -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

View File

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.16) cmake_minimum_required(VERSION 3.20)
project(Browser) project(Browser)

View File

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.16) cmake_minimum_required(VERSION 3.20)
project(DigitalClock LANGUAGES CXX) project(DigitalClock LANGUAGES CXX)

View File

@ -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 # CMP0000: Call the cmake_minimum_required() command at the beginning of the top-level
# CMakeLists.txt file even before calling the project() command. # CMakeLists.txt file even before calling the project() command.
# The cmake_minimum_required(VERSION) command implicitly invokes the cmake_policy(VERSION) # The cmake_minimum_required(VERSION) command implicitly invokes the cmake_policy(VERSION)

View File

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.16) cmake_minimum_required(VERSION 3.20)
project(OGBrowser LANGUAGES CXX) project(OGBrowser LANGUAGES CXX)
@ -17,7 +17,7 @@ endif()
if (NOT DEFINED CPACK_PACKAGE_VERSION_MINOR) if (NOT DEFINED CPACK_PACKAGE_VERSION_MINOR)
set(CPACK_PACKAGE_VERSION_MINOR "0") set(CPACK_PACKAGE_VERSION_MINOR "1")
endif() endif()
@ -29,8 +29,8 @@ endif()
set(KB_LAYOUT_DIR "/usr/lib/qtermwidget/kb" CACHE INTERNAL "") set(KB_LAYOUT_DIR "/usr/lib/qtermwidget/kb" CACHE INTERNAL "")
find_package(QT NAMES Qt6 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 REQUIRED) find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets LinguistTools Network WebEngineWidgets DBus REQUIRED)
message(STATUS "Building browser with Qt ${QT_VERSION}") message(STATUS "Building browser with Qt ${QT_VERSION}")
@ -42,6 +42,7 @@ set(SOURCES
ogurlhandler.cpp ogurlhandler.cpp
desktopparser.cpp desktopparser.cpp
ogwebpage.cpp ogwebpage.cpp
dbusinterface.cpp
) )
file(GLOB TRANSLATIONS "${PROJECT_SOURCE_DIR}/i18n/*.ts") 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) 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) set_property(TARGET OGBrowser PROPERTY CXX_STANDARD_REQUIRED ON)
target_include_directories(OGBrowser PRIVATE "digitalclock" "qtermwidget/lib") 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}") 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) target_include_directories(OGBrowser PRIVATE ${qtermwidget_INCLUDE_DIRS} ${DigitalClock_INCLUDE_DIRS} ${qtermwidget_LIB_DIRS}/lib ${PROJECT_BINARY_DIR}/../lib)

View File

@ -0,0 +1,25 @@
#include "dbusinterface.h"
#include <QCoreApplication>
#include <QDebug>
#include <QUrl>
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";
}
}

View File

@ -0,0 +1,25 @@
#ifndef DBUSINTERFACE_H
#define DBUSINTERFACE_H
#include <QObject>
#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

View File

@ -2,12 +2,17 @@
#include <QTranslator> #include <QTranslator>
#include <QDebug> #include <QDebug>
#include <QCommandLineParser> #include <QCommandLineParser>
#include <QDBusConnection>
#include <QDBusInterface>
#include <QDBusError>
#include "mainwindow.h" #include "mainwindow.h"
#include "ogcommandline.h" #include "ogcommandline.h"
#include "desktopparser.h" #include "desktopparser.h"
#include "dbusinterface.h"
const QString SERVICE_NAME{"es.opengnsys.OGBrowser.browser"};
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
@ -19,6 +24,9 @@ int main(int argc, char *argv[])
QTranslator translator; QTranslator translator;
QStringList translationDirs{QCoreApplication::applicationDirPath(), "", "."}; QStringList translationDirs{QCoreApplication::applicationDirPath(), "", "."};
DBusInterface dbus_interface = DBusInterface();
bool translationsOk = false; bool translationsOk = false;
for(const QString &dir : translationDirs) { for(const QString &dir : translationDirs) {
@ -59,17 +67,60 @@ int main(int argc, char *argv[])
QCommandLineOption ignoreSslErrors("ignore-ssl-errors", "Ignore SSL certificate errors"); QCommandLineOption ignoreSslErrors("ignore-ssl-errors", "Ignore SSL certificate errors");
parser.addOption(ignoreSslErrors); parser.addOption(ignoreSslErrors);
QCommandLineOption stopRunning("stop-running", "Stop any running instances");
parser.addOption(stopRunning);
QCommandLineOption helpOption = parser.addHelpOption(); QCommandLineOption helpOption = parser.addHelpOption();
OGCommandLineOptions &options = OGCommandLineOptions::getInstance(); OGCommandLineOptions &options = OGCommandLineOptions::getInstance();
parser.process(a); parser.process(a);
QStringList positional = parser.positionalArguments();
if (parser.isSet(helpOption)) { if (parser.isSet(helpOption)) {
return 0; 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)) { if (parser.isSet(openInNewTabOption)) {
options.setNewTabBehavior(OGCommandLineOptions::NewTabBehavior::NewTab); options.setNewTabBehavior(OGCommandLineOptions::NewTabBehavior::NewTab);
} }
@ -86,12 +137,13 @@ int main(int argc, char *argv[])
options.setIgnoreSslErrors(true); options.setIgnoreSslErrors(true);
} }
QStringList positional = parser.positionalArguments();
if ( positional.length() > 0) { if ( positional.length() > 0) {
options.setUrl( positional[0 ] ); options.setUrl( positional[0 ] );
} }
MainWindow w; MainWindow w;
dbus_interface.setMainWindow(&w);
w.show(); w.show();
return a.exec(); return a.exec();
} }

View File

@ -190,18 +190,7 @@ MainWindow::MainWindow(QWidget *parent)
m_webBar->setText(url.toString()); m_webBar->setText(url.toString());
qInfo() << "Page set to" << url; slotSetUrl(url);
m_web->load(url);
// auto ktm = Konsole::KeyboardTranslatorManager::instance();
showMaximized(); 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) void MainWindow::slotUrlChanged(const QUrl &url)
{ {
m_webBar->setText(url.toString()); m_webBar->setText(url.toString());

View File

@ -73,6 +73,7 @@ class MainWindow : public QMainWindow
void slotDeleteTerminal(); void slotDeleteTerminal();
// Funcion para el webar // Funcion para el webar
void slotSetUrl(const QUrl &url);
void slotUrlChanged(const QUrl &url); void slotUrlChanged(const QUrl &url);
void commandQueued(const QString &command, bool confirm, bool returnOutput); void commandQueued(const QString &command, bool confirm, bool returnOutput);