aboutsummaryrefslogtreecommitdiff
path: root/src/autolockeventfilter.h
blob: c061fe8fe541af112d23f6e90d89ee602b9510fc (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#ifndef AUTOLOCKEVENTFILTER_H
#define AUTOLOCKEVENTFILTER_H

#include <QDebug>
#include <QEvent>
#include <QTimer>

class AutoLockEventFilter : public QObject {
  Q_OBJECT

public:
  explicit AutoLockEventFilter(int timeoutmillis)
      : timeoutmillis(timeoutmillis) {
    autoLockTimer = new QTimer(this);
    connect(autoLockTimer, &QTimer::timeout, this,
            QOverload<>::of(&AutoLockEventFilter::lockApp));
    resetTimer();
  }

  ~AutoLockEventFilter() {
    autoLockTimer->stop();
    delete autoLockTimer;
  }

signals:
  void autoLockTimerTimeout();

private:
  QTimer *autoLockTimer = nullptr;
  int timeoutmillis;

public slots:
  void stopTimer() { autoLockTimer->stop(); }
  void resetTimer() { autoLockTimer->start(timeoutmillis); }
  void lockApp() { emit autoLockTimerTimeout(); }
  void setTimeoutmillis(int newTimeoutmillis) {
    timeoutmillis = newTimeoutmillis;
  }

protected:
  bool eventFilter(QObject *obj, QEvent *ev) {
    if (ev->type() == QEvent::KeyPress || ev->type() == QEvent::MouseMove ||
        ev->type() == QEvent::Wheel || ev->type() == QEvent::TouchUpdate ||
        ev->type() == QEvent::MouseButtonRelease ||
        ev->type() == QEvent::MouseButtonPress ||
        ev->type() == QEvent::MouseButtonDblClick ||
        ev->type() == QEvent::Gesture || ev->type() == QEvent::FocusIn ||
        ev->type() == QEvent::FocusOut || ev->type() == QEvent::Enter) {
      resetTimer();
    }
    return QObject::eventFilter(obj, ev);
  }
};
#endif // AUTOLOCKEVENTFILTER_H