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

/* Первая активность после 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;
};