Do not poll freespace while the screensaver is on

This commit is contained in:
Davide Andreoli 2020-11-12 08:08:46 +01:00
parent b682a5f902
commit efe3ca5115
1 changed files with 50 additions and 1 deletions

View File

@ -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)
{