File indexing completed on 2024-04-28 15:25:35

0001 /* This file is part of the KDE libraries
0002  * SPDX-FileCopyrightText: 2009 Dario Freddi <drf at kde.org>
0003  *
0004  * SPDX-License-Identifier: LGPL-2.1-or-later
0005  */
0006 
0007 #include "windowspoller.h"
0008 
0009 #include <windows.h>
0010 
0011 #include <QTimer>
0012 
0013 WindowsPoller::WindowsPoller(QObject *parent)
0014     : WidgetBasedPoller(parent)
0015 {
0016 }
0017 
0018 WindowsPoller::~WindowsPoller()
0019 {
0020 }
0021 
0022 int WindowsPoller::getIdleTime()
0023 {
0024 #ifndef _WIN32_WCE
0025     int idle = 0;
0026 
0027     LASTINPUTINFO lii;
0028     memset(&lii, 0, sizeof(lii));
0029 
0030     lii.cbSize = sizeof(lii);
0031 
0032     BOOL ok = GetLastInputInfo(&lii);
0033     if (ok) {
0034         idle = GetTickCount() - lii.dwTime;
0035     }
0036 
0037     return idle;
0038 #else
0039     return GetIdleTime();
0040 #endif
0041 }
0042 
0043 bool WindowsPoller::additionalSetUp()
0044 {
0045     m_idleTimer = new QTimer(this);
0046     connect(m_idleTimer, &QTimer::timeout, this, &WindowsPoller::checkForIdle);
0047     return true;
0048 }
0049 
0050 void WindowsPoller::simulateUserActivity()
0051 {
0052     int width = GetSystemMetrics(SM_CXSCREEN);
0053     int height = GetSystemMetrics(SM_CYSCREEN);
0054 
0055     int x = (int)100 * 65536 / width;
0056     int y = (int)100 * 65536 / height;
0057 
0058     mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, x, y, NULL, NULL);
0059 }
0060 
0061 void WindowsPoller::catchIdleEvent()
0062 {
0063     m_idleTimer->start(800);
0064 }
0065 
0066 void WindowsPoller::stopCatchingIdleEvents()
0067 {
0068     m_idleTimer->stop();
0069 }
0070 
0071 void WindowsPoller::checkForIdle()
0072 {
0073     if (getIdleTime() < 1000) {
0074         stopCatchingIdleEvents();
0075         Q_EMIT resumingFromIdle();
0076     }
0077 }
0078 
0079 #include "moc_windowspoller.cpp"