21 #include <config-kidletime.h>
24 #ifdef HAVE_XSCREENSAVER
38 #include <QWeakPointer>
46 KIdleTimeHelper() : q(0) {}
57 if (!s_globalKIdleTime->q) {
61 return s_globalKIdleTime->q;
64 class KIdleTimePrivate
69 KIdleTimePrivate() : catchResume(false), currentId(0) {}
72 void unloadCurrentSystem();
73 void _k_resumingFromIdle();
74 void _k_timeoutReached(
int msec);
76 QWeakPointer<AbstractSystemPoller> poller;
83 KIdleTime::KIdleTime()
85 , d_ptr(new KIdleTimePrivate())
87 Q_ASSERT(!s_globalKIdleTime->q);
88 s_globalKIdleTime->q =
this;
95 connect(d->poller.data(), SIGNAL(
resumingFromIdle()),
this, SLOT(_k_resumingFromIdle()));
96 connect(d->poller.data(), SIGNAL(
timeoutReached(
int)),
this, SLOT(_k_timeoutReached(
int)));
102 d->unloadCurrentSystem();
110 if (!d->catchResume) {
111 d->catchResume =
true;
112 d->poller.data()->catchIdleEvent();
120 if (d->catchResume) {
121 d->catchResume =
false;
122 d->poller.data()->stopCatchingIdleEvents();
130 d->poller.data()->addTimeout(msec);
133 d->associations[d->currentId] = msec;
142 if (!d->associations.contains(identifier)) {
146 int msec = d->associations[identifier];
148 d->associations.remove(identifier);
150 if (!d->associations.values().contains(msec)) {
151 d->poller.data()->removeTimeout(msec);
161 removed.reserve(d->associations.size());
163 while (i != d->associations.end()) {
164 int msec = d->associations[i.key()];
166 i = d->associations.erase(i);
168 if (!removed.contains(msec)) {
169 d->poller.data()->removeTimeout(msec);
170 removed.insert(msec);
175 void KIdleTimePrivate::loadSystem()
177 if (!poller.isNull()) {
178 unloadCurrentSystem();
185 #ifdef HAVE_XSCREENSAVER
195 #ifdef HAVE_XSCREENSAVER
207 if (!poller.isNull()) {
208 poller.data()->setUpPoller();
212 void KIdleTimePrivate::unloadCurrentSystem()
214 if (!poller.isNull()) {
215 poller.data()->unloadPoller();
217 if (qobject_cast<XSyncBasedPoller*>(poller.data()) == 0) {
219 poller.data()->deleteLater();
226 void KIdleTimePrivate::_k_resumingFromIdle()
231 emit q->resumingFromIdle();
232 q->stopCatchingResumeEvent();
236 void KIdleTimePrivate::_k_timeoutReached(
int msec)
240 if (associations.values().contains(msec)) {
241 foreach (
int key, associations.keys(msec)) {
242 emit q->timeoutReached(key);
243 emit q->timeoutReached(key, msec);
252 d->poller.data()->simulateUserActivity();
259 return d->poller.data()->forcePollRequest();
266 return d->associations;
269 #include "kidletime.moc"