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)11Q_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