aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNathan Reiner <nathan@nathanreiner.xyz>2025-02-14 23:35:25 +0100
committerNathan Reiner <nathan@nathanreiner.xyz>2025-02-14 23:35:25 +0100
commite78e1a69d7200da8012d9ef3a3b8fb25796d498e (patch)
treed7d544b7758bd3227b4683991a5f2c0a9f6cbac6 /src
parent035ba2bd28eeca1b1658a1e69711842d3fbd152a (diff)
webtrayctl: add show
Diffstat (limited to 'src')
-rw-r--r--src/dbus.cpp7
-rw-r--r--src/dbus.hpp24
-rw-r--r--src/main.cpp38
-rw-r--r--src/permissionmanager.cpp39
-rw-r--r--src/permissionmanager.hpp4
-rw-r--r--src/tray.cpp46
-rw-r--r--src/tray.hpp6
-rw-r--r--src/webwindow.cpp46
-rw-r--r--src/webwindow.hpp2
9 files changed, 123 insertions, 89 deletions
diff --git a/src/dbus.cpp b/src/dbus.cpp
new file mode 100644
index 0000000..5e0ce6e
--- /dev/null
+++ b/src/dbus.cpp
@@ -0,0 +1,7 @@
+#include "dbus.hpp"
+
+#include <iostream>
+
+void DBusHandler::show() {
+ this->window->show();
+}
diff --git a/src/dbus.hpp b/src/dbus.hpp
new file mode 100644
index 0000000..ba0d558
--- /dev/null
+++ b/src/dbus.hpp
@@ -0,0 +1,24 @@
+#ifndef WEBTRAY_DBUS_HPP
+#define WEBTRAY_DBUS_HPP
+
+#include <QObject>
+
+#include "webwindow.hpp"
+
+static const char service_name[] = "xyz.nathanreiner.WebTray";
+
+class DBusHandler : public QObject {
+ Q_OBJECT;
+
+private:
+ WebWindow *window;
+
+public slots:
+ void show();
+
+public:
+ DBusHandler(WebWindow *window) : window(window) {}
+ virtual ~DBusHandler() {};
+};
+
+#endif
diff --git a/src/main.cpp b/src/main.cpp
index 385d3c3..1630680 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -1,21 +1,22 @@
#include <QtWidgets/QApplication>
+#include <QDBusConnection>
+#include <QDBusError>
#include <iostream>
-using namespace std::chrono_literals;
-
#include "permissionmanager.hpp"
#include "tray.hpp"
#include "webwindow.hpp"
+#include "dbus.hpp"
-const QWebEnginePage::Feature features[] = {
- QWebEnginePage::Feature::MouseLock,
- QWebEnginePage::Feature::Notifications,
- QWebEnginePage::Feature::Notifications,
- QWebEnginePage::Feature::DesktopVideoCapture,
- QWebEnginePage::Feature::DesktopAudioVideoCapture,
- QWebEnginePage::Feature::MediaAudioCapture,
- QWebEnginePage::Feature::MediaVideoCapture,
+const QWebEnginePermission::PermissionType permissions[] = {
+ QWebEnginePermission::PermissionType::MouseLock,
+ QWebEnginePermission::PermissionType::Notifications,
+ QWebEnginePermission::PermissionType::Notifications,
+ QWebEnginePermission::PermissionType::DesktopVideoCapture,
+ QWebEnginePermission::PermissionType::DesktopAudioVideoCapture,
+ QWebEnginePermission::PermissionType::MediaAudioCapture,
+ QWebEnginePermission::PermissionType::MediaVideoCapture,
};
void
@@ -54,8 +55,8 @@ main(int argc, char **argv)
bool start_hidden = not app->arguments().contains("--open-at-startup");
- for (auto feature : features) {
- tray->set_permission(feature, webwindow->permissions().get(feature));
+ for (auto permission: permissions) {
+ tray->set_permission(permission, webwindow->permissions().get(permission));
}
webwindow->connect_icon_changed([&](auto icon) {
@@ -75,11 +76,20 @@ main(int argc, char **argv)
tray->connect_toggle([&]() { webwindow->toggle_visibility(); });
tray->connect_quit([&]() { webwindow->quit(); });
- tray->connect_permission_changed([&](auto feature, auto value) {
- webwindow->permissions().set(feature, value);
+ tray->connect_permission_changed([&](auto permission, auto value) {
+ webwindow->permissions().set(permission, value);
});
tray->connect_reset_cookies([&]() { webwindow->reset_cookies(); });
+ auto connection = QDBusConnection::sessionBus();
+ DBusHandler dbus_handler = DBusHandler(webwindow);
+
+ if (!connection.registerService(QString(service_name) + "." + QUrl(url).host())) {
+ std::cerr << "could not register ipc\n";
+ }
+
+ connection.registerObject("/", &dbus_handler, QDBusConnection::ExportAllSlots);
+
webwindow->show();
if (start_hidden) {
webwindow->hide();
diff --git a/src/permissionmanager.cpp b/src/permissionmanager.cpp
index 22a7110..78564c6 100644
--- a/src/permissionmanager.cpp
+++ b/src/permissionmanager.cpp
@@ -39,59 +39,60 @@ PermissionManager::save()
}
bool
-PermissionManager::get(QWebEnginePage::Feature feature)
+PermissionManager::get(QWebEnginePermission::PermissionType feature)
{
switch (feature) {
- case QWebEnginePage::Feature::MouseLock:
+ case QWebEnginePermission::PermissionType::MouseLock:
return this->lock_mouse;
- case QWebEnginePage::Feature::Geolocation:
+ case QWebEnginePermission::PermissionType::Geolocation:
return this->location;
- case QWebEnginePage::Feature::Notifications:
+ case QWebEnginePermission::PermissionType::Notifications:
return this->notification;
- case QWebEnginePage::Feature::MediaAudioCapture:
+ case QWebEnginePermission::PermissionType::MediaAudioCapture:
return this->media_audio_capture;
- case QWebEnginePage::Feature::MediaVideoCapture:
+ case QWebEnginePermission::PermissionType::MediaVideoCapture:
return this->media_video_capture;
- case QWebEnginePage::Feature::MediaAudioVideoCapture:
+ case QWebEnginePermission::PermissionType::MediaAudioVideoCapture:
return this->media_video_capture && this->media_audio_capture;
- case QWebEnginePage::Feature::DesktopVideoCapture:
+ case QWebEnginePermission::PermissionType::DesktopVideoCapture:
return this->desktop_audio_video_capture;
- case QWebEnginePage::Feature::DesktopAudioVideoCapture:
+ case QWebEnginePermission::PermissionType::DesktopAudioVideoCapture:
return this->desktop_audio_video_capture;
default:
- /* unreachable except QWebEnginePage::Feature gets new entries */
+ /* unreachable except QWebEnginePermission::PermissionType gets new entries */
return false;
}
}
void
-PermissionManager::set(QWebEnginePage::Feature feature, bool value)
+PermissionManager::set(QWebEnginePermission::PermissionType feature, bool value)
{
switch (feature) {
- case QWebEnginePage::Feature::MouseLock:
+ case QWebEnginePermission::PermissionType::MouseLock:
this->lock_mouse = value;
break;
- case QWebEnginePage::Feature::Geolocation:
+ case QWebEnginePermission::PermissionType::Geolocation:
this->location = value;
break;
- case QWebEnginePage::Feature::Notifications:
+ case QWebEnginePermission::PermissionType::Notifications:
this->notification = value;
break;
- case QWebEnginePage::Feature::MediaAudioCapture:
+ case QWebEnginePermission::PermissionType::MediaAudioCapture:
this->media_audio_capture = value;
break;
- case QWebEnginePage::Feature::MediaVideoCapture:
+ case QWebEnginePermission::PermissionType::MediaVideoCapture:
this->media_video_capture = value;
break;
- case QWebEnginePage::Feature::MediaAudioVideoCapture:
+ case QWebEnginePermission::PermissionType::MediaAudioVideoCapture:
this->media_audio_capture = value;
this->media_video_capture = value;
break;
- case QWebEnginePage::Feature::DesktopVideoCapture:
+ case QWebEnginePermission::PermissionType::DesktopVideoCapture:
this->desktop_audio_video_capture = value;
break;
- case QWebEnginePage::Feature::DesktopAudioVideoCapture:
+ case QWebEnginePermission::PermissionType::DesktopAudioVideoCapture:
this->desktop_audio_video_capture = value;
break;
+ default: break;
}
}
diff --git a/src/permissionmanager.hpp b/src/permissionmanager.hpp
index 8d53597..d1ea720 100644
--- a/src/permissionmanager.hpp
+++ b/src/permissionmanager.hpp
@@ -20,8 +20,8 @@ public:
PermissionManager(std::string path);
~PermissionManager();
void save();
- bool get(QWebEnginePage::Feature feature);
- void set(QWebEnginePage::Feature feature, bool value);
+ bool get(QWebEnginePermission::PermissionType feature);
+ void set(QWebEnginePermission::PermissionType feature, bool value);
};
#endif
diff --git a/src/tray.cpp b/src/tray.cpp
index 8503cb7..d0f091a 100644
--- a/src/tray.cpp
+++ b/src/tray.cpp
@@ -25,13 +25,12 @@ Tray::Tray()
this->permissions.location->setCheckable(true);
this->permissions.lock_mouse->setCheckable(true);
- this->connect(this,
- &QSystemTrayIcon::activated,
- [&](QSystemTrayIcon::ActivationReason reason) {
- if (reason == QSystemTrayIcon::ActivationReason::Trigger) {
- this->toggle_signal();
- }
- });
+ this->connect(this, &QSystemTrayIcon::activated,
+ [&](QSystemTrayIcon::ActivationReason reason) {
+ if (reason == QSystemTrayIcon::ActivationReason::Trigger) {
+ this->toggle_signal();
+ }
+ });
this->menu.connect(&this->menu, &QMenu::triggered, [&](QAction *action) {
if (action == this->app_toggle) {
@@ -48,32 +47,32 @@ Tray::Tray()
} else if (action == this->permissions.camera) {
this->permission_changed_signal(
- QWebEnginePage::Feature::MediaVideoCapture,
+ QWebEnginePermission::PermissionType::MediaVideoCapture,
this->permissions.camera->isChecked());
} else if (action == this->permissions.microphone) {
this->permission_changed_signal(
- QWebEnginePage::Feature::MediaAudioCapture,
+ QWebEnginePermission::PermissionType::MediaAudioCapture,
this->permissions.microphone->isChecked());
} else if (action == this->permissions.screenshare) {
this->permission_changed_signal(
- QWebEnginePage::Feature::DesktopAudioVideoCapture,
+ QWebEnginePermission::PermissionType::DesktopAudioVideoCapture,
this->permissions.screenshare->isChecked());
} else if (action == this->permissions.notifications) {
this->permission_changed_signal(
- QWebEnginePage::Feature::Notifications,
+ QWebEnginePermission::PermissionType::Notifications,
this->permissions.notifications->isChecked());
} else if (action == this->permissions.location) {
this->permission_changed_signal(
- QWebEnginePage::Feature::Geolocation,
+ QWebEnginePermission::PermissionType::Geolocation,
this->permissions.location->isChecked());
} else if (action == this->permissions.lock_mouse) {
this->permission_changed_signal(
- QWebEnginePage::Feature::MouseLock,
+ QWebEnginePermission::PermissionType::MouseLock,
this->permissions.lock_mouse->isChecked());
}
});
@@ -101,7 +100,7 @@ Tray::connect_reset_cookies(std::function<void()> fn)
void
Tray::connect_permission_changed(
- std::function<void(QWebEnginePage::Feature, bool)> fn)
+ std::function<void(QWebEnginePermission::PermissionType, bool)> fn)
{
this->permission_changed_signal = fn;
}
@@ -123,33 +122,34 @@ Tray::send_notification(std::unique_ptr<QWebEngineNotification> notification)
}
void
-Tray::set_permission(QWebEnginePage::Feature feature, bool value)
+Tray::set_permission(QWebEnginePermission::PermissionType feature, bool value)
{
switch (feature) {
- case QWebEnginePage::Feature::MouseLock:
+ case QWebEnginePermission::PermissionType::MouseLock:
this->permissions.lock_mouse->setChecked(value);
break;
- case QWebEnginePage::Feature::Geolocation:
+ case QWebEnginePermission::PermissionType::Geolocation:
this->permissions.location->setChecked(value);
break;
- case QWebEnginePage::Feature::Notifications:
+ case QWebEnginePermission::PermissionType::Notifications:
this->permissions.notifications->setChecked(value);
break;
- case QWebEnginePage::Feature::MediaAudioCapture:
+ case QWebEnginePermission::PermissionType::MediaAudioCapture:
this->permissions.microphone->setChecked(value);
break;
- case QWebEnginePage::Feature::MediaVideoCapture:
+ case QWebEnginePermission::PermissionType::MediaVideoCapture:
this->permissions.camera->setChecked(value);
break;
- case QWebEnginePage::Feature::MediaAudioVideoCapture:
+ case QWebEnginePermission::PermissionType::MediaAudioVideoCapture:
this->permissions.microphone->setChecked(value);
this->permissions.camera->setChecked(value);
break;
- case QWebEnginePage::Feature::DesktopVideoCapture:
+ case QWebEnginePermission::PermissionType::DesktopVideoCapture:
this->permissions.screenshare->setChecked(value);
break;
- case QWebEnginePage::Feature::DesktopAudioVideoCapture:
+ case QWebEnginePermission::PermissionType::DesktopAudioVideoCapture:
this->permissions.screenshare->setChecked(value);
break;
+ default: break;
}
}
diff --git a/src/tray.hpp b/src/tray.hpp
index 865c586..280c191 100644
--- a/src/tray.hpp
+++ b/src/tray.hpp
@@ -28,7 +28,7 @@ private:
std::function<void()> toggle_signal;
std::function<void()> quit_signal;
std::function<void()> reset_cookies_signal;
- std::function<void(QWebEnginePage::Feature, bool)> permission_changed_signal;
+ std::function<void(QWebEnginePermission::PermissionType, bool)> permission_changed_signal;
public:
Tray();
@@ -36,10 +36,10 @@ public:
void connect_quit(std::function<void()> fn);
void connect_reset_cookies(std::function<void()> fn);
void connect_permission_changed(
- std::function<void(QWebEnginePage::Feature, bool)> fn);
+ std::function<void(QWebEnginePermission::PermissionType, bool)> fn);
void set_title(const QString &title);
void send_notification(std::unique_ptr<QWebEngineNotification> notification);
- void set_permission(QWebEnginePage::Feature feature, bool value);
+ void set_permission(QWebEnginePermission::PermissionType feature, bool value);
};
#endif
diff --git a/src/webwindow.cpp b/src/webwindow.cpp
index 823eec7..54634ad 100644
--- a/src/webwindow.cpp
+++ b/src/webwindow.cpp
@@ -48,25 +48,22 @@ WebWindow::web_configure()
this->profile->setPushServiceEnabled(true);
- this->page->connect(this->page,
- &QWebEnginePage::featurePermissionRequested,
- [&](const QUrl origin, QWebEnginePage::Feature feature) {
- this->permission_requested(origin, feature);
- });
+ this->page->connect(this->page, &QWebEnginePage::permissionRequested,
+ [&](QWebEnginePermission permission) {
+ this->permission_requested(permission);
+ }
+ );
- this->profile->connect(this->profile,
- &QWebEngineProfile::downloadRequested,
- [&](QWebEngineDownloadRequest *request) {
- const QUrl url = QFileDialog::getSaveFileUrl(
- this,
- "",
- QUrl(this->profile->downloadPath() + "/" +
- request->downloadFileName()));
- if (!url.isEmpty()) {
- request->setDownloadFileName(url.path());
- request->accept();
- }
- });
+ this->profile->connect(this->profile, &QWebEngineProfile::downloadRequested,
+ [&](QWebEngineDownloadRequest *request) {
+ const QUrl path = QUrl(this->profile->downloadPath() + "/" + request->downloadFileName());
+ const QUrl url = QFileDialog::getSaveFileUrl(this, "", path);
+ if (!url.isEmpty()) {
+ request->setDownloadFileName(url.path());
+ request->accept();
+ }
+ }
+ );
this->page->connect(this->page,
&QWebEnginePage::newWindowRequested,
@@ -87,18 +84,13 @@ WebWindow::web_configure()
}
void
-WebWindow::permission_requested(const QUrl origin,
- QWebEnginePage::Feature feature)
+WebWindow::permission_requested(QWebEnginePermission permission)
{
- if (this->perm->get(feature)) {
- this->page->setFeaturePermission(
- origin, feature, QWebEnginePage::PermissionGrantedByUser);
+ if (this->perm->get(permission.permissionType())) {
+ permission.grant();
} else {
- this->page->setFeaturePermission(
- origin, feature, QWebEnginePage::PermissionDeniedByUser);
+ permission.deny();
}
- this->page->setFeaturePermission(
- origin, feature, QWebEnginePage::PermissionUnknown);
}
void
diff --git a/src/webwindow.hpp b/src/webwindow.hpp
index c29a953..a9183d7 100644
--- a/src/webwindow.hpp
+++ b/src/webwindow.hpp
@@ -20,7 +20,7 @@ private:
PermissionManager *perm;
void web_configure();
- void permission_requested(const QUrl origin, QWebEnginePage::Feature feature);
+ void permission_requested(QWebEnginePermission permission);
void closeEvent(QCloseEvent *event);
public: