1 #ifndef QSCREENSAVER_UNIX_H
2 #define QSCREENSAVER_UNIX_H
3 
4 #include <QObject>
5 #include <QDBusInterface>
6 #include <QDBusPendingCallWatcher>
7 #include <QDBusMessage>
8 #include "screensaver.h"
9 
10 Q_DECLARE_METATYPE(unsigned)
Q_DECLARE_METATYPE(uint64_t)11 Q_DECLARE_METATYPE(uint64_t)
12 
13 class ScreenSaverUnix : public ScreenSaver
14 {
15     Q_OBJECT
16 public:
17     explicit ScreenSaverUnix(QObject *parent = nullptr);
18 
19     QSet<Ability> abilities();
20 
21 public slots:
22     void inhibitSaver(const QString &reason);
23     void uninhibitSaver();
24     void launchSaver();
25     void lockScreen();
26     void hibernateSystem();
27     void suspendSystem();
28     void shutdownSystem();
29     void logOff();
30 
31 private slots:
32     void dbusScreensaver_inhibit(QDBusPendingCallWatcher *call);
33     void dbusScreensaver_uninhibit(QDBusPendingCallWatcher *call);
34     void dbusScreensaver_launch(QDBusPendingCallWatcher *call);
35     void dbusScreensaver_lock(QDBusPendingCallWatcher *call);
36     void dbusLogin_hibernate(QDBusPendingCallWatcher *call);
37     void dbusLogin_suspend(QDBusPendingCallWatcher *call);
38     void dbusLogin_shutdown(QDBusPendingCallWatcher *call);
39     void dbusLoginSelf_logoff(QDBusPendingCallWatcher *call);
40 
41 private:
42     QDBusInterface dbusScreensaver;
43     QDBusInterface dbusLogin;
44     QDBusInterface dbusLoginSelf;
45     uint32_t inhibitToken = 0;
46     bool inhibitCalled = false;
47 };
48 
49 #endif // QSCREENSAVER_UNIX_H
50