File indexing completed on 2024-02-25 17:23:37

0001 /*
0002     SPDX-FileCopyrightText: 2021 Vlad Zahorodnii <vlad.zahorodnii@kde.org>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "idledetector.h"
0008 #include "input.h"
0009 
0010 namespace KWin
0011 {
0012 
0013 IdleDetector::IdleDetector(std::chrono::milliseconds timeout, QObject *parent)
0014     : QObject(parent)
0015     , m_timer(new QTimer(this))
0016 {
0017     m_timer->setSingleShot(true);
0018     m_timer->setInterval(timeout);
0019     connect(m_timer, &QTimer::timeout, this, &IdleDetector::markAsIdle);
0020     m_timer->start();
0021 
0022     input()->addIdleDetector(this);
0023 }
0024 
0025 IdleDetector::~IdleDetector()
0026 {
0027     if (input()) {
0028         input()->removeIdleDetector(this);
0029     }
0030 }
0031 
0032 bool IdleDetector::isInhibited() const
0033 {
0034     return m_isInhibited;
0035 }
0036 
0037 void IdleDetector::setInhibited(bool inhibited)
0038 {
0039     if (m_isInhibited == inhibited) {
0040         return;
0041     }
0042     m_isInhibited = inhibited;
0043     if (inhibited) {
0044         m_timer->stop();
0045     } else {
0046         m_timer->start();
0047     }
0048 }
0049 
0050 void IdleDetector::activity()
0051 {
0052     if (!m_isInhibited) {
0053         m_timer->start();
0054         markAsResumed();
0055     }
0056 }
0057 
0058 void IdleDetector::markAsIdle()
0059 {
0060     if (!m_isIdle) {
0061         m_isIdle = true;
0062         Q_EMIT idle();
0063     }
0064 }
0065 
0066 void IdleDetector::markAsResumed()
0067 {
0068     if (m_isIdle) {
0069         m_isIdle = false;
0070         Q_EMIT resumed();
0071     }
0072 }
0073 
0074 } // namespace KWin