diff --git a/src/e_mod_places.c b/src/e_mod_places.c index 75755da..d2d1810 100644 --- a/src/e_mod_places.c +++ b/src/e_mod_places.c @@ -33,6 +33,10 @@ static const char *_places_human_size_get(unsigned long long size); static void _places_volume_object_update(Volume *vol, Evas_Object *obj); static void _places_run_fm_external(const char *fm, const char *directory); +/* EcoreEvent callbacks */ +static Eina_Bool _places_screensaver_on_cb(void *data, int type, void *event); +static Eina_Bool _places_screensaver_off_cb(void *data, int type, void *event); + /* Edje callbacks */ void _places_icon_activated_cb(void *data, Evas_Object *o, const char *emission, const char *source); void _places_custom_icon_activated_cb(void *data, Evas_Object *o, const char *emission, const char *source); @@ -44,6 +48,9 @@ static char theme_file[PATH_MAX]; static Eina_List *volumes = NULL; static Ecore_Timer *freespace_timer = NULL; static Ecore_Thread *freespace_thread = NULL; +static Ecore_Event_Handler *places_screensaver_on_handler = NULL; +static Ecore_Event_Handler *places_screensaver_off_handler = NULL; +#define PLACES_FREESPACE_INTERVAL 3.0 /* Implementation */ @@ -66,12 +73,31 @@ places_init(void) snprintf(theme_file, PATH_MAX, "%s/e-module-places.edj", places_conf->module->dir); - freespace_timer = ecore_timer_add(3.0, _places_freespace_timer_cb, NULL); + + places_screensaver_on_handler = + ecore_event_handler_add(E_EVENT_SCREENSAVER_ON, + _places_screensaver_on_cb, NULL); + places_screensaver_off_handler = + ecore_event_handler_add(E_EVENT_SCREENSAVER_OFF, + _places_screensaver_off_cb, NULL); + + freespace_timer = ecore_timer_add(PLACES_FREESPACE_INTERVAL, + _places_freespace_timer_cb, NULL); } void places_shutdown(void) { + if (places_screensaver_on_handler) + { + ecore_event_handler_del(places_screensaver_on_handler); + places_screensaver_on_handler = NULL; + } + if (places_screensaver_off_handler) + { + ecore_event_handler_del(places_screensaver_off_handler); + places_screensaver_off_handler = NULL; + } if (freespace_timer) { ecore_timer_del(freespace_timer); @@ -615,6 +641,7 @@ _places_freespace_timer_cb(void *data EINA_UNUSED) Eina_List *l, *tdl = NULL; FreespaceThreadData *td = NULL; + // printf("PLACES: TIMER %.1f\n", ecore_time_get()); if (freespace_thread) { // printf("PLACES: *** SOMETHING WRONG *** thread:%p still running...\n", freespace_thread); @@ -643,6 +670,28 @@ _places_freespace_timer_cb(void *data EINA_UNUSED) return ECORE_CALLBACK_RENEW; } +static Eina_Bool +_places_screensaver_on_cb(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED) +{ + if (freespace_timer) + { + ecore_timer_del(freespace_timer); + freespace_timer = NULL; + } + + return ECORE_CALLBACK_PASS_ON; +} + +static Eina_Bool +_places_screensaver_off_cb(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED) +{ + if (!freespace_timer) + freespace_timer = ecore_timer_add(PLACES_FREESPACE_INTERVAL, + _places_freespace_timer_cb, NULL); + + return ECORE_CALLBACK_PASS_ON; +} + static const char * _places_human_size_get(unsigned long long size) {