karm

idletimedetector.cpp
1#include "idletimedetector.h"
2
3#include <tqdatetime.h>
4#include <tqmessagebox.h>
5#include <tqtimer.h>
6
7#include <tdeglobal.h>
8#include <tdelocale.h> // i18n
9
11// Trigger a warning after maxIdle minutes
12{
13 kdDebug(5970) << "Entering IdleTimeDetector::IdleTimeDetector" << endl;
14 _maxIdle = maxIdle;
15
16#ifdef HAVE_LIBXSS
17 kdDebug(5970) << "IdleTimeDetector: LIBXSS detected @ compile time" << endl;
18 int event_base, error_base;
19 if(XScreenSaverQueryExtension(tqt_xdisplay(), &event_base, &error_base))
20 {
21 _idleDetectionPossible = true;
22 _mit_info = XScreenSaverAllocInfo ();
23 }
24 else
25 {
26 _idleDetectionPossible = false;
27 }
28
29 _timer = new TQTimer(this);
30 connect(_timer, TQ_SIGNAL(timeout()), this, TQ_SLOT(check()));
31#else
32 _idleDetectionPossible = false;
33#endif // HAVE_LIBXSS
34
35}
36
38{
39 return _idleDetectionPossible;
40}
41
42void IdleTimeDetector::check()
43{
44 kdDebug(5970) << "Entering IdleTimeDetector::check" << endl;
45#ifdef HAVE_LIBXSS
46 if (_idleDetectionPossible)
47 {
48 XScreenSaverQueryInfo(tqt_xdisplay(), tqt_xrootwin(), _mit_info);
49 int idleSeconds = (_mit_info->idle/1000);
50 if (idleSeconds >= _maxIdle)
51 informOverrun(idleSeconds);
52 }
53#endif // HAVE_LIBXSS
54}
55
57{
58 _maxIdle = maxIdle;
59}
60
61#ifdef HAVE_LIBXSS
62void IdleTimeDetector::informOverrun(int idleSeconds)
63{
64 kdDebug(5970) << "Entering IdleTimeDetector::informOverrun" << endl;
65 if (!_overAllIdleDetect)
66 return; // preferences say the user does not want idle detection.
67
68 _timer->stop();
69
70 TQDateTime idleStart = TQDateTime::currentDateTime().addSecs(-idleSeconds);
71 TQString idleStartTQString = TDEGlobal::locale()->formatTime(idleStart.time());
72
73 int id = TQMessageBox::warning( 0, i18n("Idle Detection"),
74 i18n("Desktop has been idle since %1."
75 " What should we do?").arg(idleStartTQString),
76 i18n("Revert && Stop"),
77 i18n("Revert && Continue"),
78 i18n("Continue Timing"),0,2);
79 TQDateTime end = TQDateTime::currentDateTime();
80 int diff = idleStart.secsTo(end)/secsPerMinute;
81
82 if (id == 0)
83 {
84 // Revert And Stop
85 kdDebug(5970) << "Now it is " << TQDateTime::currentDateTime() << endl;
86 kdDebug(5970) << "Reverting timer to " << TDEGlobal::locale()->formatTime(idleStart.time()).ascii() << endl;
87 emit(extractTime(idleSeconds/60+diff)); // we need to subtract the time that has been added during idleness.
88 emit(stopAllTimersAt(idleStart));
89 }
90 else if (id == 1)
91 {
92 // Revert and Continue
93 emit(extractTime(idleSeconds/60+diff));
94 _timer->start(testInterval);
95 }
96 else
97 {
98 // Continue
99 _timer->start(testInterval);
100 }
101}
102#endif // HAVE_LIBXSS
103
105{
106 kdDebug(5970) << "Entering IdleTimeDetector::startIdleDetection" << endl;
107#ifdef HAVE_LIBXSS
108 kdDebug(5970) << "Starting Timer" << endl;
109 if (!_timer->isActive())
110 _timer->start(testInterval);
111#endif //HAVE_LIBXSS
112}
113
115{
116#ifdef HAVE_LIBXSS
117 if (_timer->isActive())
118 _timer->stop();
119#endif // HAVE_LIBXSS
120}
122{
123 _overAllIdleDetect = on;
124}
125
126#include "idletimedetector.moc"
void extractTime(int minutes)
Tells the listener to extract time from current timing.
void startIdleDetection()
Starts detecting idle time.
IdleTimeDetector(int maxIdle)
Initializes and idle test timer.
void toggleOverAllIdleDetection(bool on)
Sets whether idle detection should be done at all.
void stopIdleDetection()
Stops detecting idle time.
void setMaxIdle(int maxIdle)
Sets the maximum allowed idle.
bool isIdleDetectionPossible()
Returns true if it is possible to do idle detection.
void stopAllTimersAt(TQDateTime qdt)
Tells the listener to stop timing for TQDateTime.