diff options
Diffstat (limited to 'src/modules/my/Idle_win.cpp')
| -rw-r--r-- | src/modules/my/Idle_win.cpp | 143 |
1 files changed, 76 insertions, 67 deletions
diff --git a/src/modules/my/Idle_win.cpp b/src/modules/my/Idle_win.cpp index e1a84ff82..d79ab379d 100644 --- a/src/modules/my/Idle_win.cpp +++ b/src/modules/my/Idle_win.cpp @@ -19,90 +19,99 @@ */ #if defined(COMPILE_ON_WINDOWS) || defined(COMPILE_ON_MINGW) - #include "Idle.h" +#include "Idle.h" - #include <QLibrary> +#include <QLibrary> - typedef struct tagLASTINPUTINFO { - UINT cbSize; - DWORD dwTime; - } LASTINPUTINFO, *PLASTINPUTINFO; +typedef struct tagLASTINPUTINFO +{ + UINT cbSize; + DWORD dwTime; +} LASTINPUTINFO, *PLASTINPUTINFO; - class IdlePlatform::Private +class IdlePlatform::Private +{ +public: + Private() { - public: - Private() - { - GetLastInputInfo = 0; - IdleUIGetLastInputTime = 0; - lib = 0; - } + 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 (__stdcall * GetLastInputInfo)(PLASTINPUTINFO); - DWORD (__stdcall * IdleUIGetLastInputTime)(void); - QLibrary *lib; - }; +bool IdlePlatform::init() +{ + if(d->lib) + return true; + void * p; - IdlePlatform::IdlePlatform() + // try to find the built-in Windows 2000 function + d->lib = new QLibrary("user32"); + if(d->lib->load() && (p = d->lib->resolve("GetLastInputInfo"))) { - d = new Private; + d->GetLastInputInfo = (BOOL(__stdcall *)(PLASTINPUTINFO))p; + return true; } - - IdlePlatform::~IdlePlatform() + else { delete d->lib; - delete d; + d->lib = 0; } - bool IdlePlatform::init() + // fall back on idleui + d->lib = new QLibrary("idleui"); + if(d->lib->load() && (p = d->lib->resolve("IdleUIGetLastInputTime"))) { - 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; + d->IdleUIGetLastInputTime = (DWORD(__stdcall *)(void))p; + return true; } + else + { + delete d->lib; + d->lib = 0; + } + + return false; +} - int IdlePlatform::secondsIdle() +int IdlePlatform::secondsIdle() +{ + int i; + if(d->GetLastInputInfo) { - 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 + LASTINPUTINFO li; + li.cbSize = sizeof(LASTINPUTINFO); + bool ok = d->GetLastInputInfo(&li); + if(!ok) return 0; - - return (GetTickCount() - i) / 1000; + i = li.dwTime; + } + else if(d->IdleUIGetLastInputTime) + { + i = d->IdleUIGetLastInputTime(); } + else + return 0; + + return (GetTickCount() - i) / 1000; +} #endif |
