diff --git a/common/idle.c b/common/idle.c index 881905908..881d488d4 100644 --- a/common/idle.c +++ b/common/idle.c @@ -16,26 +16,51 @@ * GNU General Public License for more details. */ -#include -#include -#include -#include -#include +#ifndef _WIN32 + #include + #include + #include + #include + #include +#else + #define _WIN32_WINNT 0x0500 + #include + #define EXPORT __declspec(dllexport) +#endif + +#include + +#ifdef _WIN32 + typedef BOOL (WINAPI *GETLASTINPUTINFO)(LASTINPUTINFO *); + static HMODULE g_user32 = NULL; + static GETLASTINPUTINFO g_GetLastInputInfo = NULL; +#endif -#include static PyObject * idle_init(PyObject *self, PyObject *args) -{ +{ +#ifndef _WIN32 gtk_init (NULL, NULL); +#else + g_user32 = LoadLibrary("user32.dll"); + if (g_user32) { + g_GetLastInputInfo = (GETLASTINPUTINFO)GetProcAddress(g_user32, "GetLastInputInfo"); + } +#endif Py_INCREF(Py_None); return Py_None; } static PyObject * idle_getIdleSec(PyObject *self, PyObject *args) { +#ifndef _WIN32 static XScreenSaverInfo *mit_info = NULL; int idle_time, event_base, error_base; +#else + int idle_time = 0; +#endif +#ifndef _WIN32 gtk_init (NULL, NULL); if (XScreenSaverQueryExtension(GDK_DISPLAY(), &event_base, &error_base)) { @@ -46,12 +71,28 @@ static PyObject * idle_getIdleSec(PyObject *self, PyObject *args) } else idle_time = 0; +#else + if (g_GetLastInputInfo != NULL) { + LASTINPUTINFO lii; + memset(&lii, 0, sizeof(lii)); + lii.cbSize = sizeof(lii); + if (g_GetLastInputInfo(&lii)) { + idle_time = lii.dwTime; + } + idle_time = (GetTickCount() - idle_time) / 1000; + } +#endif return Py_BuildValue("i", idle_time); } static PyObject * idle_close(PyObject *self, PyObject *args) -{ +{ +#ifndef _WIN32 gtk_main_quit (); +#else + if (g_user32 != NULL) + FreeLibrary(g_user32); +#endif Py_INCREF(Py_None); return Py_None; } diff --git a/common/setup.py b/common/setup.py index 09ac52a90..11a665972 100644 --- a/common/setup.py +++ b/common/setup.py @@ -17,13 +17,20 @@ ## from distutils.core import setup, Extension +import os -module1 = Extension( 'idle', - sources = ['idle.c'], -# extra_compile_args = ['-W'], - libraries = ['gtk-x11-2.0','gdk-x11-2.0','glib-2.0','X11','Xext','Xss','atk-1.0'], - library_dirs = ['/usr/X11R6/lib'], - include_dirs = ['/usr/include/gtk-2.0', '/usr/include/glib-2.0','/usr/lib/gtk-2.0/include','/usr/lib/glib-2.0/include','/usr/include/pango-1.0','/usr/include/atk-1.0'] - ) +if os.name == 'posix': + module1 = Extension( 'idle', + sources = ['idle.c'], +# extra_compile_args = ['-W'], + libraries = ['gtk-x11-2.0','gdk-x11-2.0','glib-2.0','X11','Xext','Xss','atk-1.0'], + library_dirs = ['/usr/X11R6/lib'], + include_dirs = ['/usr/include/gtk-2.0', '/usr/include/glib-2.0','/usr/lib/gtk-2.0/include','/usr/lib/glib-2.0/include','/usr/include/pango-1.0','/usr/include/atk-1.0'] + ) +elif os.name == 'nt': + module1 = Extension( 'idle', + sources = ['idle.c'], +# extra_compile_args = ['-W'], + ) setup (name = 'idle', version = '1.0', description = 'interface to X11/scrnserver.h', ext_modules = [module1])