diff --git a/src/idledetector.cpp b/src/idledetector.cpp index f02eb4974a..e3cb8b748d 100644 --- a/src/idledetector.cpp +++ b/src/idledetector.cpp @@ -14,13 +14,10 @@ namespace KWin IdleDetector::IdleDetector(std::chrono::milliseconds timeout, QObject *parent) : QObject(parent) - , m_timer(new QTimer(this)) + , m_timeout(timeout) { Q_ASSERT(timeout >= 0ms); - m_timer->setSingleShot(true); - m_timer->setInterval(timeout); - connect(m_timer, &QTimer::timeout, this, &IdleDetector::markAsIdle); - m_timer->start(); + m_timer.start(timeout, this); input()->addIdleDetector(this); } @@ -32,6 +29,14 @@ IdleDetector::~IdleDetector() } } +void IdleDetector::timerEvent(QTimerEvent *event) +{ + if (event->timerId() == m_timer.timerId()) { + m_timer.stop(); + markAsIdle(); + } +} + bool IdleDetector::isInhibited() const { return m_isInhibited; @@ -44,16 +49,16 @@ void IdleDetector::setInhibited(bool inhibited) } m_isInhibited = inhibited; if (inhibited) { - m_timer->stop(); + m_timer.stop(); } else { - m_timer->start(); + m_timer.start(m_timeout, this); } } void IdleDetector::activity() { if (!m_isInhibited) { - m_timer->start(); + m_timer.start(m_timeout, this); markAsResumed(); } } diff --git a/src/idledetector.h b/src/idledetector.h index 035463efbb..853513b87e 100644 --- a/src/idledetector.h +++ b/src/idledetector.h @@ -8,7 +8,8 @@ #include -#include +#include +#include namespace KWin { @@ -30,11 +31,15 @@ Q_SIGNALS: void idle(); void resumed(); +protected: + void timerEvent(QTimerEvent *event) override; + private: void markAsIdle(); void markAsResumed(); - QTimer *m_timer; + QBasicTimer m_timer; + std::chrono::milliseconds m_timeout; bool m_isIdle = false; bool m_isInhibited = false; };