delay order re-load from monitor signal

SVN revision: 46351
This commit is contained in:
Carsten Haitzler 2010-02-22 08:04:41 +00:00
parent 1a705408c8
commit c5ab22f34a
2 changed files with 17 additions and 6 deletions

View File

@ -152,6 +152,7 @@ e_order_clear(E_Order *eo)
static void static void
_e_order_free(E_Order *eo) _e_order_free(E_Order *eo)
{ {
if (eo->delay) ecore_timer_del(eo->delay);
E_FREE_LIST(eo->desktops, efreet_desktop_free); E_FREE_LIST(eo->desktops, efreet_desktop_free);
if (eo->path) eina_stringshare_del(eo->path); if (eo->path) eina_stringshare_del(eo->path);
if (eo->monitor) ecore_file_monitor_del(eo->monitor); if (eo->monitor) ecore_file_monitor_del(eo->monitor);
@ -159,16 +160,25 @@ _e_order_free(E_Order *eo)
free(eo); free(eo);
} }
static void static int
_e_order_cb_monitor(void *data, Ecore_File_Monitor *em, Ecore_File_Event event, const char *path) _e_order_cb_monitor_delay(void *data)
{ {
E_Order *eo; E_Order *eo = data;
eo = data;
/* It doesn't really matter what the change is, just re-read the file */ /* It doesn't really matter what the change is, just re-read the file */
_e_order_read(eo); _e_order_read(eo);
if (eo->cb.update) eo->cb.update(eo->cb.data, eo); if (eo->cb.update) eo->cb.update(eo->cb.data, eo);
eo->delay = NULL;
return 0;
}
static void
_e_order_cb_monitor(void *data, Ecore_File_Monitor *em, Ecore_File_Event event, const char *path)
{
E_Order *eo = data;
if (eo->delay) ecore_timer_del(eo->delay);
eo->delay = ecore_timer_add(0.2, _e_order_cb_monitor_delay, eo);
} }
static void static void

View File

@ -18,6 +18,7 @@ struct _E_Order
const char *path; const char *path;
Eina_List *desktops; /* A list of Efreet_Desktop files this .order contains */ Eina_List *desktops; /* A list of Efreet_Desktop files this .order contains */
Ecore_File_Monitor *monitor; /* Check for changes int the .order file */ Ecore_File_Monitor *monitor; /* Check for changes int the .order file */
Ecore_Timer *delay;
struct { struct {
void (*update)(void *data, E_Order *eo); void (*update)(void *data, E_Order *eo);