aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules/my/Idle_win.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/my/Idle_win.cpp')
-rw-r--r--src/modules/my/Idle_win.cpp109
1 files changed, 109 insertions, 0 deletions
diff --git a/src/modules/my/Idle_win.cpp b/src/modules/my/Idle_win.cpp
new file mode 100644
index 000000000..3317d255d
--- /dev/null
+++ b/src/modules/my/Idle_win.cpp
@@ -0,0 +1,109 @@
+/*
+ * Idle_win.cpp - detect desktop idle time
+ * Copyright (C) 2003 Justin Karneges
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+#if defined(COMPILE_ON_WINDOWS) || defined(COMPILE_ON_MINGW)
+
+ #include "Idle.h"
+
+ #include <QLibrary>
+ #include< windows.h>
+
+ typedef struct tagLASTINPUTINFO {
+ UINT cbSize;
+ DWORD dwTime;
+ } LASTINPUTINFO, *PLASTINPUTINFO;
+
+ class IdlePlatform::Private
+ {
+ public:
+ Private()
+ {
+ GetLastInputInfo = 0;
+ IdleUIGetLastInputTime = 0;
+ lib = 0;
+ }
+
+ BOOL (__stdcall * GetLastInputInfo)(PLASTINPUTINFO);
+ DWORD (__stdcall * IdleUIGetLastInputTime)(void);
+ QLibrary *lib;
+ };
+
+ IdlePlatform::IdlePlatform()
+ {
+ d = new Private;
+ }
+
+ IdlePlatform::~IdlePlatform()
+ {
+ delete d->lib;
+ delete d;
+ }
+
+ bool IdlePlatform::init()
+ {
+ if(d->lib)
+ return true;
+ void *p;
+
+ // try to find the built-in Windows 2000 function
+ d->lib = new QLibrary("user32");
+ if(d->lib->load() && (p = d->lib->resolve("GetLastInputInfo"))) {
+ d->GetLastInputInfo = (BOOL (__stdcall *)(PLASTINPUTINFO))p;
+ return true;
+ }
+ else {
+ delete d->lib;
+ d->lib = 0;
+ }
+
+ // fall back on idleui
+ d->lib = new QLibrary("idleui");
+ if(d->lib->load() && (p = d->lib->resolve("IdleUIGetLastInputTime"))) {
+ d->IdleUIGetLastInputTime = (DWORD (__stdcall *)(void))p;
+ return true;
+ }
+ else {
+ delete d->lib;
+ d->lib = 0;
+ }
+
+ return false;
+ }
+
+ int IdlePlatform::secondsIdle()
+ {
+ int i;
+ if(d->GetLastInputInfo) {
+ LASTINPUTINFO li;
+ li.cbSize = sizeof(LASTINPUTINFO);
+ bool ok = d->GetLastInputInfo(&li);
+ if(!ok)
+ return 0;
+ i = li.dwTime;
+ }
+ else if(d->IdleUIGetLastInputTime) {
+ i = d->IdleUIGetLastInputTime();
+ }
+ else
+ return 0;
+
+ return (GetTickCount() - i) / 1000;
+ }
+
+#endif