{
E_TC_Event_Item *recv_item = NULL;
Eina_Bool res = EINA_FALSE;
+ Eina_List *l = NULL;
// swap event
switch (ev_type)
// pre-waiting events
work(0.5);
- if (ev.recv_queue == NULL)
+ if (ev.wait_event_index == ev.last_event)
{
work(0.5); // waiting additional time
- if (ev.recv_queue == NULL)
+ if (ev.wait_event_index == ev.last_event)
return EINA_FALSE;
}
- EINA_LIST_CAST_FREE(ev.recv_queue, recv_item, E_TC_Event_Item*)
+ EINA_LIST_CAST_FOREACH(ev.recv_queue, l, recv_item, E_TC_Event_Item*)
{
if ((recv_item->win == (win?win->native_win:0)) &&
(recv_item->type == ev_type))
{
- ev.recv_queue = eina_list_remove(ev.recv_queue, recv_item);
+ ev.wait_event_index = recv_item;
res = EINA_TRUE;
break;
}
item->win = id;
item->type = ev_type;
ev.recv_queue = eina_list_append(ev.recv_queue, item);
+ ev.last_event = item;
return EINA_TRUE;
}
Eina_Bool
+etRunner::isEventOccuredAfterCheckpoint(etWin *tw, E_TC_Event_Type ev_type)
+{
+ Eina_List *l = NULL;
+ E_TC_Event_Item *item = NULL;
+ Ecore_Window id = tw->native_win;
+
+ EINA_LIST_CAST_FOREACH(ev.recv_queue, l, item, E_TC_Event_Item*)
+ {
+ if (ev.last_checkpoint && ev.last_checkpoint != item)
+ continue;
+
+ if ((item->win == id) && (item->type == ev_type))
+ return EINA_TRUE;
+ }
+
+ return EINA_FALSE;
+}
+
+void
+etRunner::setEventCheckpoint()
+{
+ ev.last_checkpoint = ev.last_event;
+ return;
+}
+
+Eina_Bool
etRunner::addSignalHandlers()
{
Eldbus_Signal_Handler *sh = NULL;
Eina_List *eh_list;
Eina_List *recv_queue;
+ E_TC_Event_Item *wait_event_index;
+ E_TC_Event_Item *last_event;
+ E_TC_Event_Item *last_checkpoint;
+
struct
{
Eina_Stringshare *name;
void flushEventQueue();
Eina_Bool insertEventQueue(Ecore_Window id, E_TC_Event_Type ev_type);
+ Eina_Bool isEventOccuredAfterCheckpoint(etWin *tw, E_TC_Event_Type ev_type);
+ void setEventCheckpoint();
Eina_Bool addSignalHandlers();
void delSignalHandlers();