44 lines
1.3 KiB
C++
44 lines
1.3 KiB
C++
/* Первая активность после 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 pollIdleTime();
|
|
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;
|
|
};
|