Hello,The desklock's idle timer was apparently broken from the start. Keyboard activity was not considered when determining if the user was active or not.
Here are some patches which fix this. With these patches a persons keyboard and mouse activity are both taken into consideration when determining if the user is active.
This implementation requires that the XScreensaver extension be present. This is the "easy" fix. If the powers that be prefer that this functionality *not* depend on the XScreensaver extension, well... then its a bigger problem.
Questions/comments/complaints welcome. :) -- Regards, Ravenlock
Index: e17/apps/e/src/bin/e_desklock.c =================================================================== RCS file: /var/cvs/e/e17/apps/e/src/bin/e_desklock.c,v retrieving revision 1.34 diff -u -r1.34 e_desklock.c --- e17/apps/e/src/bin/e_desklock.c 11 Mar 2007 05:01:49 -0000 1.34 +++ e17/apps/e/src/bin/e_desklock.c 19 Mar 2007 05:00:36 -0000 @@ -794,23 +794,13 @@ static int _e_desklock_cb_idle_timer(void *data) { - static double time_of_last_event = 0; - static unsigned int xtime_of_last_user_activity = 0; - - if ( ecore_x_current_user_activity_time_get() > xtime_of_last_user_activity ) - { - xtime_of_last_user_activity = ecore_x_current_user_activity_time_get(); - time_of_last_event = ecore_time_get(); - } - if (e_config->desklock_autolock_idle) { /* If a desklock is already up, bail */ if ((_e_custom_desklock_exe) || (edd)) return 1; /* If we have exceeded our idle time... */ - double t = ecore_time_get(); - if (t - time_of_last_event >= e_config->desklock_autolock_idle_timeout) + if (ecore_x_screensaver_idle_time_get() >= e_config->desklock_autolock_idle_timeout) { /* * Unfortunately, not all "desklocks" stay up for as long as
Index: e17/libs/ecore/src/lib/ecore_x/Ecore_X.h =================================================================== RCS file: /var/cvs/e/e17/libs/ecore/src/lib/ecore_x/Ecore_X.h,v retrieving revision 1.184 diff -u -r1.184 Ecore_X.h --- e17/libs/ecore/src/lib/ecore_x/Ecore_X.h 13 Mar 2007 16:29:02 -0000 1.184 +++ e17/libs/ecore/src/lib/ecore_x/Ecore_X.h 19 Mar 2007 04:57:24 -0000 @@ -981,7 +981,6 @@ EAPI void ecore_x_kill(Ecore_X_Window win); EAPI Ecore_X_Time ecore_x_current_time_get(void); -EAPI Ecore_X_Time ecore_x_current_user_activity_time_get(void); EAPI void ecore_x_error_handler_set(void (*func) (void *data), const void *data); EAPI void ecore_x_io_error_handler_set(void (*func) (void *data), const void *data); @@ -1374,6 +1373,7 @@ EAPI int ecore_x_xinerama_screen_geometry_get(int screen, int *x, int *y, int *w, int *h); EAPI int ecore_x_screensaver_event_available_get(void); +EAPI int ecore_x_screensaver_idle_time_get(void); EAPI void ecore_x_screensaver_set(int timeout, int interval, int blank, int expose); EAPI void ecore_x_screensaver_timeout_set(double timeout); EAPI double ecore_x_screensaver_timeout_get(void); Index: e17/libs/ecore/src/lib/ecore_x/ecore_x.c =================================================================== RCS file: /var/cvs/e/e17/libs/ecore/src/lib/ecore_x/ecore_x.c,v retrieving revision 1.125 diff -u -r1.125 ecore_x.c --- e17/libs/ecore/src/lib/ecore_x/ecore_x.c 9 Mar 2007 01:11:09 -0000 1.125 +++ e17/libs/ecore/src/lib/ecore_x/ecore_x.c 19 Mar 2007 04:57:25 -0000 @@ -37,7 +37,6 @@ Display *_ecore_x_disp = NULL; double _ecore_x_double_click_time = 0.25; Time _ecore_x_event_last_time = 0; -Time _ecore_x_event_last_user_activity_time = 0; Window _ecore_x_event_last_win = 0; int _ecore_x_event_last_root_x = 0; int _ecore_x_event_last_root_y = 0; @@ -650,16 +649,6 @@ return _ecore_x_event_last_time; } -/* - * Return the last time a *USER* generated an event - * Should corespond to key-down, key-up, mouse-down, mouse-up, mouse move - */ -EAPI Ecore_X_Time -ecore_x_current_user_activity_time_get() -{ - return _ecore_x_event_last_user_activity_time; -} - static int _ecore_x_fd_handler(void *data, Ecore_Fd_Handler *fd_handler __UNUSED__) { Index: e17/libs/ecore/src/lib/ecore_x/ecore_x_events.c =================================================================== RCS file: /var/cvs/e/e17/libs/ecore/src/lib/ecore_x/ecore_x_events.c,v retrieving revision 1.94 diff -u -r1.94 ecore_x_events.c --- e17/libs/ecore/src/lib/ecore_x/ecore_x_events.c 13 Feb 2007 16:24:37 -0000 1.94 +++ e17/libs/ecore/src/lib/ecore_x/ecore_x_events.c 19 Mar 2007 04:57:26 -0000 @@ -228,7 +228,6 @@ e->time = xevent->xkey.time; e->modifiers = xevent->xkey.state; _ecore_x_event_last_time = e->time; - _ecore_x_event_last_user_activity_time = e->time; ecore_event_add(ECORE_X_EVENT_KEY_DOWN, e, _ecore_x_event_free_key_down, NULL); } @@ -280,7 +279,6 @@ e->time = xevent->xkey.time; e->modifiers = xevent->xkey.state; _ecore_x_event_last_time = e->time; - _ecore_x_event_last_user_activity_time = e->time; ecore_event_add(ECORE_X_EVENT_KEY_UP, e, _ecore_x_event_free_key_up, NULL); } @@ -334,7 +332,6 @@ e->event_win = xevent->xbutton.window; e->time = xevent->xbutton.time; _ecore_x_event_last_time = e->time; - _ecore_x_event_last_user_activity_time = e->time; _ecore_x_event_last_win = e->win; _ecore_x_event_last_root_x = e->root.x; _ecore_x_event_last_root_y = e->root.y; @@ -379,7 +376,6 @@ e->event_win = xevent->xbutton.window; e->time = xevent->xbutton.time; _ecore_x_event_last_time = e->time; - _ecore_x_event_last_user_activity_time = e->time; _ecore_x_event_last_win = e->win; _ecore_x_event_last_root_x = e->root.x; _ecore_x_event_last_root_y = e->root.y; @@ -435,7 +431,6 @@ if (!e->double_click && !e->triple_click) _ecore_x_mouse_up_count = 0; _ecore_x_event_last_time = e->time; - _ecore_x_event_last_user_activity_time = e->time; _ecore_x_event_last_win = e->win; _ecore_x_event_last_root_x = e->root.x; _ecore_x_event_last_root_y = e->root.y; @@ -502,7 +497,6 @@ e->event_win = xevent->xbutton.window; e->time = xevent->xbutton.time; _ecore_x_event_last_time = e->time; - _ecore_x_event_last_user_activity_time = e->time; _ecore_x_event_last_win = e->win; _ecore_x_event_last_root_x = e->root.x; _ecore_x_event_last_root_y = e->root.y; @@ -544,7 +538,6 @@ e->triple_click = 1; } _ecore_x_event_last_time = e->time; - _ecore_x_event_last_user_activity_time = e->time; _ecore_x_event_last_win = e->win; _ecore_x_event_last_root_x = e->root.x; _ecore_x_event_last_root_y = e->root.y; @@ -570,7 +563,6 @@ e->event_win = xevent->xmotion.window; e->time = xevent->xmotion.time; _ecore_x_event_last_time = e->time; - _ecore_x_event_last_user_activity_time = e->time; _ecore_x_event_last_win = e->win; _ecore_x_event_last_root_x = e->root.x; _ecore_x_event_last_root_y = e->root.y; Index: e17/libs/ecore/src/lib/ecore_x/ecore_x_private.h =================================================================== RCS file: /var/cvs/e/e17/libs/ecore/src/lib/ecore_x/ecore_x_private.h,v retrieving revision 1.59 diff -u -r1.59 ecore_x_private.h --- e17/libs/ecore/src/lib/ecore_x/ecore_x_private.h 9 Mar 2007 01:11:09 -0000 1.59 +++ e17/libs/ecore/src/lib/ecore_x/ecore_x_private.h 19 Mar 2007 04:57:26 -0000 @@ -149,7 +149,6 @@ extern Display *_ecore_x_disp; extern double _ecore_x_double_click_time; extern Time _ecore_x_event_last_time; -extern Time _ecore_x_event_last_user_activity_time; extern Window _ecore_x_event_last_win; extern int _ecore_x_event_last_root_x; extern int _ecore_x_event_last_root_y; Index: e17/libs/ecore/src/lib/ecore_x/ecore_x_screensaver.c =================================================================== RCS file: /var/cvs/e/e17/libs/ecore/src/lib/ecore_x/ecore_x_screensaver.c,v retrieving revision 1.9 diff -u -r1.9 ecore_x_screensaver.c --- e17/libs/ecore/src/lib/ecore_x/ecore_x_screensaver.c 14 Mar 2007 12:11:21 -0000 1.9 +++ e17/libs/ecore/src/lib/ecore_x/ecore_x_screensaver.c 19 Mar 2007 04:57:26 -0000 @@ -31,6 +31,24 @@ return _screensaver_available; } +EAPI int +ecore_x_screensaver_idle_time_get(void) +{ +#ifdef ECORE_XSS + XScreenSaverInfo *xss; + int idle; + + xss = XScreenSaverAllocInfo(); + XScreenSaverQueryInfo(_ecore_x_disp, RootWindow(_ecore_x_disp, DefaultScreen(_ecore_x_disp)), xss); + idle = xss->idle / 1000; + XFree(xss); + + return idle; +#endif + + return 0; +} + EAPI void ecore_x_screensaver_set(int timeout, int interval, int blank, int expose) {
------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel