Enlightenment CVS committal Author : raster Project : e17 Module : apps/e
Dir : e17/apps/e/src/bin Modified Files: e_desklock.c Log Message: ravenlock screensaver stuff =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_desklock.c,v retrieving revision 1.36 retrieving revision 1.37 diff -u -3 -r1.36 -r1.37 --- e_desklock.c 4 Apr 2007 10:18:19 -0000 1.36 +++ e_desklock.c 4 Apr 2007 11:43:36 -0000 1.37 @@ -54,6 +54,8 @@ #endif static Ecore_Exe *_e_custom_desklock_exe = NULL; static Ecore_Event_Handler *_e_custom_desklock_exe_handler = NULL; +static Ecore_Timer *_e_desklock_idle_timer = NULL; +static int _e_desklock_user_idle = 0; /***********************************************************************/ @@ -63,6 +65,7 @@ static int _e_desklock_cb_mouse_wheel(void *data, int type, void *event); static int _e_desklock_cb_mouse_move(void *data, int type, void *event); static int _e_desklock_cb_custom_desklock_exit(void *data, int type, void *event); +static int _e_desklock_cb_idle_timer(void *data); static void _e_desklock_passwd_update(); static void _e_desklock_backspace(); @@ -82,8 +85,13 @@ EAPI int e_desklock_init(void) { + /* A timer to tick every second, watching for an idle user */ + _e_desklock_idle_timer = ecore_timer_add(1.0, + _e_desklock_cb_idle_timer, NULL); + if (e_config->desklock_background) e_filereg_register(e_config->desklock_background); + return 1; } @@ -781,4 +789,38 @@ e_desklock_hide(); return 0; +} + +static int +_e_desklock_cb_idle_timer(void *data) +{ + 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... */ + if (ecore_x_screensaver_idle_time_get() >= e_config->desklock_autolock_idle_timeout) + { + /* + * Unfortunately, not all "desklocks" stay up for as long as + * the user is idle or until it is unlocked. + * + * 'xscreensaver-command -lock' for example sends a command + * to xscreensaver and then terminates. So, we have another + * check (_e_desklock_user_idle) which lets us know that we + * have locked the screen due to idleness. + */ + if (!_e_desklock_user_idle) + { + _e_desklock_user_idle = 1; + e_desklock_show(); + } + } + else + _e_desklock_user_idle = 0; + } + + /* Make sure our timer persists. */ + return 1; } ------------------------------------------------------------------------- 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-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs