File indexing completed on 2025-03-16 06:51:02
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 : KWindowBasedIdleTimePoller(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"