summaryrefslogtreecommitdiff
path: root/plugin/src/Caelestia/Internal
diff options
context:
space:
mode:
Diffstat (limited to 'plugin/src/Caelestia/Internal')
-rw-r--r--plugin/src/Caelestia/Internal/CMakeLists.txt2
-rw-r--r--plugin/src/Caelestia/Internal/logindmanager.cpp65
-rw-r--r--plugin/src/Caelestia/Internal/logindmanager.hpp (renamed from plugin/src/Caelestia/Internal/sleepnotifier.hpp)8
-rw-r--r--plugin/src/Caelestia/Internal/sleepnotifier.cpp32
4 files changed, 72 insertions, 35 deletions
diff --git a/plugin/src/Caelestia/Internal/CMakeLists.txt b/plugin/src/Caelestia/Internal/CMakeLists.txt
index 3a49d5a..bdc58db 100644
--- a/plugin/src/Caelestia/Internal/CMakeLists.txt
+++ b/plugin/src/Caelestia/Internal/CMakeLists.txt
@@ -5,7 +5,7 @@ qml_module(caelestia-internal
circularindicatormanager.hpp circularindicatormanager.cpp
hyprdevices.hpp hyprdevices.cpp
hyprextras.hpp hyprextras.cpp
- sleepnotifier.hpp sleepnotifier.cpp
+ logindmanager.hpp logindmanager.cpp
LIBRARIES
Qt::Gui
Qt::Quick
diff --git a/plugin/src/Caelestia/Internal/logindmanager.cpp b/plugin/src/Caelestia/Internal/logindmanager.cpp
new file mode 100644
index 0000000..4194ee1
--- /dev/null
+++ b/plugin/src/Caelestia/Internal/logindmanager.cpp
@@ -0,0 +1,65 @@
+#include "logindmanager.hpp"
+
+#include <QtDBus/qdbusconnection.h>
+#include <QtDBus/qdbuserror.h>
+#include <QtDBus/qdbusinterface.h>
+#include <QtDBus/qdbusreply.h>
+
+namespace caelestia::internal {
+
+LogindManager::LogindManager(QObject* parent)
+ : QObject(parent) {
+ auto bus = QDBusConnection::systemBus();
+ if (!bus.isConnected()) {
+ qWarning() << "LogindManager::LogindManager: failed to connect to system bus:" << bus.lastError().message();
+ return;
+ }
+
+ bool ok = bus.connect("org.freedesktop.login1", "/org/freedesktop/login1", "org.freedesktop.login1.Manager",
+ "PrepareForSleep", this, SLOT(handlePrepareForSleep(bool)));
+
+ if (!ok) {
+ qWarning() << "LogindManager::LogindManager: failed to connect to PrepareForSleep signal:"
+ << bus.lastError().message();
+ }
+
+ QDBusInterface login1("org.freedesktop.login1", "/org/freedesktop/login1", "org.freedesktop.login1.Manager", bus);
+ const QDBusReply<QDBusObjectPath> reply = login1.call("GetSession", "auto");
+ if (!reply.isValid()) {
+ qWarning() << "LogindManager::LogindManager: failed to get session path";
+ return;
+ }
+ const auto sessionPath = reply.value().path();
+
+ ok = bus.connect("org.freedesktop.login1", sessionPath, "org.freedesktop.login1.Session", "Lock", this,
+ SLOT(handleLockRequested()));
+
+ if (!ok) {
+ qWarning() << "LogindManager::LogindManager: failed to connect to Lock signal:" << bus.lastError().message();
+ }
+
+ ok = bus.connect("org.freedesktop.login1", sessionPath, "org.freedesktop.login1.Session", "Unlock", this,
+ SLOT(handleUnlockRequested()));
+
+ if (!ok) {
+ qWarning() << "LogindManager::LogindManager: failed to connect to Unlock signal:" << bus.lastError().message();
+ }
+}
+
+void LogindManager::handlePrepareForSleep(bool sleep) {
+ if (sleep) {
+ emit aboutToSleep();
+ } else {
+ emit resumed();
+ }
+}
+
+void LogindManager::handleLockRequested() {
+ emit lockRequested();
+}
+
+void LogindManager::handleUnlockRequested() {
+ emit unlockRequested();
+}
+
+} // namespace caelestia::internal
diff --git a/plugin/src/Caelestia/Internal/sleepnotifier.hpp b/plugin/src/Caelestia/Internal/logindmanager.hpp
index aaa6c68..72a3401 100644
--- a/plugin/src/Caelestia/Internal/sleepnotifier.hpp
+++ b/plugin/src/Caelestia/Internal/logindmanager.hpp
@@ -5,19 +5,23 @@
namespace caelestia::internal {
-class SleepNotifier : public QObject {
+class LogindManager : public QObject {
Q_OBJECT
QML_ELEMENT
public:
- explicit SleepNotifier(QObject* parent = nullptr);
+ explicit LogindManager(QObject* parent = nullptr);
signals:
void aboutToSleep();
void resumed();
+ void lockRequested();
+ void unlockRequested();
private slots:
void handlePrepareForSleep(bool sleep);
+ void handleLockRequested();
+ void handleUnlockRequested();
};
} // namespace caelestia::internal
diff --git a/plugin/src/Caelestia/Internal/sleepnotifier.cpp b/plugin/src/Caelestia/Internal/sleepnotifier.cpp
deleted file mode 100644
index b730f38..0000000
--- a/plugin/src/Caelestia/Internal/sleepnotifier.cpp
+++ /dev/null
@@ -1,32 +0,0 @@
-#include "sleepnotifier.hpp"
-
-#include <QtDBus/qdbusconnection.h>
-#include <QtDBus/qdbuserror.h>
-
-namespace caelestia::internal {
-
-SleepNotifier::SleepNotifier(QObject* parent)
- : QObject(parent) {
- auto bus = QDBusConnection::systemBus();
- if (!bus.isConnected()) {
- qWarning() << "SleepNotifier::SleepNotifier: failed to connect to system bus:" << bus.lastError().message();
- return;
- }
-
- const bool ok = bus.connect("org.freedesktop.login1", "/org/freedesktop/login1", "org.freedesktop.login1.Manager",
- "PrepareForSleep", this, SLOT(handlePrepareForSleep(bool)));
-
- if (!ok) {
- qWarning() << "SleepNotifier::SleepNotifier: failed to connect to dbus:" << bus.lastError().message();
- }
-}
-
-void SleepNotifier::handlePrepareForSleep(bool sleep) {
- if (sleep) {
- emit aboutToSleep();
- } else {
- emit resumed();
- }
-}
-
-} // namespace caelestia::internal