/* Первая активность после start(): системный idle time или события приложения при ограничениях ОС. * stop() отменяет наблюдение и запоздалые D-Bus ответы. Все вызовы и сигнал — в GUI-потоке. */ #pragma once #include #include #include 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; };