66 lines
1.3 KiB
C
66 lines
1.3 KiB
C
#include <string.h>
|
|
#include "debug.h"
|
|
#include "delayed.h"
|
|
#include "util.h"
|
|
|
|
static void
|
|
e_delayed_action_cleanup(E_Delayed_Action * eda)
|
|
{
|
|
D_ENTER;
|
|
|
|
e_delayed_action_cancel(eda);
|
|
e_observer_cleanup(E_OBSERVER(eda));
|
|
|
|
D_RETURN;
|
|
}
|
|
|
|
E_Delayed_Action *
|
|
e_delayed_action_new(E_Event_Type event, E_Delay_Val delay,
|
|
E_Delay_Func delay_func)
|
|
{
|
|
E_Delayed_Action *eda = NULL;
|
|
|
|
D_ENTER;
|
|
|
|
eda = NEW(E_Delayed_Action, 1);
|
|
memset(eda, 0, sizeof(E_Delayed_Action));
|
|
|
|
e_observer_init(E_OBSERVER(eda), event, e_delayed_action_start,
|
|
(E_Cleanup_Func) e_delayed_action_cleanup);
|
|
|
|
eda->delay = delay;
|
|
eda->delay_func = delay_func;
|
|
|
|
D_RETURN_(eda);
|
|
}
|
|
|
|
void
|
|
e_delayed_action_start(E_Observer * obs, E_Observee * obj, E_Event_Type event, void *data)
|
|
{
|
|
char event_name[PATH_MAX];
|
|
E_Delayed_Action *eda = (E_Delayed_Action *) obs;
|
|
|
|
D_ENTER;
|
|
|
|
snprintf(event_name, PATH_MAX, "_e_delayed_action_notify(%d)", obs->event);
|
|
ecore_add_event_timer(event_name, eda->delay(), eda->delay_func, 0, obj);
|
|
|
|
D_RETURN;
|
|
UN(event);
|
|
UN(data);
|
|
}
|
|
|
|
void
|
|
e_delayed_action_cancel(E_Delayed_Action * eda)
|
|
{
|
|
char event_name[PATH_MAX];
|
|
|
|
D_ENTER;
|
|
|
|
snprintf(event_name, PATH_MAX, "_e_delayed_action_notify(%d)",
|
|
E_OBSERVER(eda)->event);
|
|
ecore_del_event_timer(event_name);
|
|
|
|
D_RETURN;
|
|
}
|