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

KUtils

  • sources
  • kde-4.14
  • kdelibs
  • 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 
29 WidgetBasedPoller::WidgetBasedPoller(QWidget *parent)
30  : AbstractSystemPoller(parent)
31 {
32 }
33 
34 WidgetBasedPoller::~WidgetBasedPoller()
35 {
36 }
37 
38 bool WidgetBasedPoller::isAvailable()
39 {
40  return true;
41 }
42 
43 bool 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 
60 void WidgetBasedPoller::unloadPoller()
61 {
62  m_pollTimer->deleteLater();
63  m_grabber->deleteLater();
64 }
65 
66 QList<int> WidgetBasedPoller::timeouts() const
67 {
68  return m_timeouts;
69 }
70 
71 void WidgetBasedPoller::addTimeout(int nextTimeout)
72 {
73  m_timeouts.append(nextTimeout);
74  poll();
75 }
76 
77 bool 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 
93 void 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 
103 void WidgetBasedPoller::detectedActivity()
104 {
105  stopCatchingIdleEvents();
106  emit resumingFromIdle();
107 }
108 
109 void WidgetBasedPoller::releaseInputLock()
110 {
111  m_grabber->releaseMouse();
112  m_grabber->releaseKeyboard();
113  m_grabber->hide();
114 }
115 
116 int 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 
148 int WidgetBasedPoller::forcePollRequest()
149 {
150  return poll();
151 }
152 
153 void WidgetBasedPoller::removeTimeout(int timeout)
154 {
155  m_timeouts.removeOne(timeout);
156  poll();
157 }
158 
159 void WidgetBasedPoller::catchIdleEvent()
160 {
161  waitForActivity();
162 }
163 
164 void WidgetBasedPoller::stopCatchingIdleEvents()
165 {
166  releaseInputLock();
167 }
168 
169 #include "widgetbasedpoller.moc"
QWidget::releaseMouse
void releaseMouse()
WidgetBasedPoller::eventFilter
bool eventFilter(QObject *object, QEvent *event)
Definition: widgetbasedpoller.cpp:77
QEvent
QWidget
AbstractSystemPoller::timeoutReached
void timeoutReached(int msec)
QEvent::type
Type type() const
WidgetBasedPoller::WidgetBasedPoller
WidgetBasedPoller(QWidget *parent=0)
Definition: widgetbasedpoller.cpp:29
WidgetBasedPoller::unloadPoller
void unloadPoller()
Definition: widgetbasedpoller.cpp:60
timeout
int timeout
widgetbasedpoller.h
WidgetBasedPoller::setUpPoller
bool setUpPoller()
Definition: widgetbasedpoller.cpp:43
WidgetBasedPoller::forcePollRequest
int forcePollRequest()
Definition: widgetbasedpoller.cpp:148
WidgetBasedPoller::removeTimeout
void removeTimeout(int nextTimeout)
Definition: widgetbasedpoller.cpp:153
AbstractSystemPoller::resumingFromIdle
void resumingFromIdle()
QList::append
void append(const T &value)
WidgetBasedPoller::~WidgetBasedPoller
virtual ~WidgetBasedPoller()
Definition: widgetbasedpoller.cpp:34
QObject::installEventFilter
void installEventFilter(QObject *filterObj)
QTimer
WidgetBasedPoller::isAvailable
bool isAvailable()
Definition: widgetbasedpoller.cpp:38
QObject
QObject::setObjectName
void setObjectName(const QString &name)
WidgetBasedPoller::timeouts
QList< int > timeouts() const
Definition: widgetbasedpoller.cpp:66
QWidget::move
void move(int x, int y)
QObject::deleteLater
void deleteLater()
QList< int >
QWidget::hide
void hide()
WidgetBasedPoller::stopCatchingIdleEvents
virtual void stopCatchingIdleEvents()
Definition: widgetbasedpoller.cpp:164
fixx11h.h
QTimer::stop
void stop()
WidgetBasedPoller::catchIdleEvent
virtual void catchIdleEvent()
Definition: widgetbasedpoller.cpp:159
AbstractSystemPoller
Definition: abstractsystempoller.h:24
QWidget::grabMouse
void grabMouse()
QWidget::releaseKeyboard
void releaseKeyboard()
QWidget::QWidget
QWidget(QWidget *parent, QFlags< Qt::WindowType > f)
QWidget::setMouseTracking
void setMouseTracking(bool enable)
QTimer::start
void start(int msec)
QWidget::show
void show()
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
QWidget::grabKeyboard
void grabKeyboard()
QList::removeOne
bool removeOne(const T &value)
WidgetBasedPoller::addTimeout
void addTimeout(int nextTimeout)
Definition: widgetbasedpoller.cpp:71
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:25:27 by doxygen 1.8.7 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 API Reference

Skip menu "kdelibs 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

Search



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