You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.3 KiB
43 lines
1.3 KiB
/* Первая активность после start(): системный idle time или события приложения при ограничениях ОС. |
|
* stop() отменяет наблюдение и запоздалые D-Bus ответы. Все вызовы и сигнал — в GUI-потоке. */ |
|
#pragma once |
|
|
|
#include <QObject> |
|
#include <QElapsedTimer> |
|
#include <QTimer> |
|
|
|
class UserActivityMonitor : public QObject { |
|
Q_OBJECT |
|
public: |
|
explicit UserActivityMonitor(QObject* parent = nullptr); |
|
~UserActivityMonitor() override; |
|
void start(); |
|
void stop(); |
|
|
|
signals: |
|
void activity(); |
|
|
|
protected: |
|
bool eventFilter(QObject* object, QEvent* event) override; |
|
virtual qint64 systemIdleTime(); |
|
|
|
private: |
|
void poll(); |
|
void checkIdleTime(qint64 idleMs, qint64 elapsedMs); |
|
void useLocalActivity(); |
|
void startWaylandFallback(); |
|
|
|
QTimer m_pollTimer; |
|
QElapsedTimer m_elapsed; |
|
bool m_watching = false; |
|
bool m_localWarningLogged = false; |
|
bool m_dbusPending = false; |
|
bool m_useGnome = false; |
|
bool m_gnomeUnavailable = false; |
|
bool m_gnomeReadyLogged = false; |
|
bool m_useKIdleTime = false; |
|
QMetaObject::Connection m_kIdleConnection; |
|
quint64 m_generation = 0; |
|
void* m_display = nullptr; |
|
bool m_x11Checked = false; |
|
};
|
|
|