• Skip to content
  • Skip to link menu
  • KDE API Reference
  • kdelibs-4.14.38 API Reference
  • KDE Home
  • Contact Us
 

KUtils

  • kutils
  • kidletime
widgetbasedpoller.cpp
Go to the documentation of this file.
1/* This file is part of the KDE libraries
2 Copyright (C) 2009 Dario Freddi <drf at kde.org>
3
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public
6 License version 2 as published by the Free Software Foundation.
7
8 This library is distributed in the hope that it will be useful,
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 Library General Public License for more details.
12
13 You should have received a copy of the GNU Library General Public License
14 along with this library; see the file COPYING.LIB. If not, write to
15 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
16 Boston, MA 02110-1301, USA.
17*/
18
19#include "widgetbasedpoller.h"
20
21#include <QWidget>
22#include <QTimer>
23#include <QEvent>
24
25#ifndef WIN32
26#include <fixx11h.h>
27#endif
28
29WidgetBasedPoller::WidgetBasedPoller(QWidget *parent)
30 : AbstractSystemPoller(parent)
31{
32}
33
34WidgetBasedPoller::~WidgetBasedPoller()
35{
36}
37
38bool WidgetBasedPoller::isAvailable()
39{
40 return true;
41}
42
43bool WidgetBasedPoller::setUpPoller()
44{
45 m_pollTimer = new QTimer(this);
46
47 //setup idle timer, with some smart polling
48 connect(m_pollTimer, SIGNAL(timeout()), this, SLOT(poll()));
49
50 // This code was taken from Lithium/KDE4Powersave
51 m_grabber = new QWidget(0, Qt::X11BypassWindowManagerHint);
52 m_grabber->move(-1000, -1000);
53 m_grabber->setMouseTracking(true);
54 m_grabber->installEventFilter(this);
55 m_grabber->setObjectName("KIdleGrabberWidget");
56
57 return additionalSetUp();
58}
59
60void WidgetBasedPoller::unloadPoller()
61{
62 m_pollTimer->deleteLater();
63 m_grabber->deleteLater();
64}
65
66QList<int> WidgetBasedPoller::timeouts() const
67{
68 return m_timeouts;
69}
70
71void WidgetBasedPoller::addTimeout(int nextTimeout)
72{
73 m_timeouts.append(nextTimeout);
74 poll();
75}
76
77bool WidgetBasedPoller::eventFilter(QObject *object, QEvent *event)
78{
79 if (object == m_grabber
80 && (event->type() == QEvent::MouseMove || event->type() == QEvent::KeyPress)) {
81 detectedActivity();
82 return true;
83 } else if (object != m_grabber) {
84 // If it's not the grabber, fallback to default event filter
85 return false;
86 }
87
88 // Otherwise, simply ignore it
89 return false;
90
91}
92
93void WidgetBasedPoller::waitForActivity()
94{
95 // This code was taken from Lithium/KDE4Powersave
96
97 m_grabber->show();
98 m_grabber->grabMouse();
99 m_grabber->grabKeyboard();
100
101}
102
103void WidgetBasedPoller::detectedActivity()
104{
105 stopCatchingIdleEvents();
106 emit resumingFromIdle();
107}
108
109void WidgetBasedPoller::releaseInputLock()
110{
111 m_grabber->releaseMouse();
112 m_grabber->releaseKeyboard();
113 m_grabber->hide();
114}
115
116int WidgetBasedPoller::poll()
117{
118 int idle = getIdleTime();
119
120 // Check if we reached a timeout..
121 foreach(int i, m_timeouts) {
122 if ((i - idle < 300 && i > idle) || (idle - i < 300 && idle > i)) {
123 // Bingo!
124 emit timeoutReached(i);
125 }
126 }
127
128 // Let's check the timer now!
129 int mintime = 0;
130
131 foreach(int i, m_timeouts) {
132 if (i > idle && (i < mintime || mintime == 0)) {
133 mintime = i;
134 }
135 }
136
137 //qDebug() << "mintime " << mintime << "idle " << idle;
138
139 if (mintime != 0) {
140 m_pollTimer->start(mintime - idle);
141 } else {
142 m_pollTimer->stop();
143 }
144
145 return idle;
146}
147
148int WidgetBasedPoller::forcePollRequest()
149{
150 return poll();
151}
152
153void WidgetBasedPoller::removeTimeout(int timeout)
154{
155 m_timeouts.removeOne(timeout);
156 poll();
157}
158
159void WidgetBasedPoller::catchIdleEvent()
160{
161 waitForActivity();
162}
163
164void WidgetBasedPoller::stopCatchingIdleEvents()
165{
166 releaseInputLock();
167}
168
169#include "widgetbasedpoller.moc"
AbstractSystemPoller
Definition: abstractsystempoller.h:25
AbstractSystemPoller::resumingFromIdle
void resumingFromIdle()
AbstractSystemPoller::timeoutReached
void timeoutReached(int msec)
QList
QObject
QWidget
WidgetBasedPoller::removeTimeout
void removeTimeout(int nextTimeout)
Definition: widgetbasedpoller.cpp:153
WidgetBasedPoller::isAvailable
bool isAvailable()
Definition: widgetbasedpoller.cpp:38
WidgetBasedPoller::addTimeout
void addTimeout(int nextTimeout)
Definition: widgetbasedpoller.cpp:71
WidgetBasedPoller::~WidgetBasedPoller
virtual ~WidgetBasedPoller()
Definition: widgetbasedpoller.cpp:34
WidgetBasedPoller::catchIdleEvent
virtual void catchIdleEvent()
Definition: widgetbasedpoller.cpp:159
WidgetBasedPoller::forcePollRequest
int forcePollRequest()
Definition: widgetbasedpoller.cpp:148
WidgetBasedPoller::timeouts
QList< int > timeouts() const
Definition: widgetbasedpoller.cpp:66
WidgetBasedPoller::stopCatchingIdleEvents
virtual void stopCatchingIdleEvents()
Definition: widgetbasedpoller.cpp:164
WidgetBasedPoller::unloadPoller
void unloadPoller()
Definition: widgetbasedpoller.cpp:60
WidgetBasedPoller::setUpPoller
bool setUpPoller()
Definition: widgetbasedpoller.cpp:43
WidgetBasedPoller::WidgetBasedPoller
WidgetBasedPoller(QWidget *parent=0)
Definition: widgetbasedpoller.cpp:29
WidgetBasedPoller::eventFilter
bool eventFilter(QObject *object, QEvent *event)
Definition: widgetbasedpoller.cpp:77
fixx11h.h
timeout
int timeout
widgetbasedpoller.h
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Mon Feb 20 2023 00:00:00 by doxygen 1.9.6 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

KUtils

Skip menu "KUtils"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdelibs-4.14.38 API Reference

Skip menu "kdelibs-4.14.38 API Reference"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDEWebKit
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • kio
  • KIOSlave
  • KJS
  •   KJS-API
  •   WTF
  • kjsembed
  • KNewStuff
  • KParts
  • KPty
  • Kross
  • KUnitConversion
  • KUtils
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver
Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal