return NULL;
}
+void
+etRunner::watchEventSignal(Ecore_Window win, E_TC_Event_Type ev_type)
+{
+ ev.eventWatcher = std::make_shared<eventItem>(win, ev_type);
+}
+
+void
+etRunner::unwatchEventSignal()
+{
+ ev.eventWatcher = nullptr;
+}
+
+Eina_Bool
+etRunner::isWatchingEventSignal(std::shared_ptr<eventItem> ei)
+{
+ if (ei == nullptr) return EINA_FALSE;
+ if (ev.eventWatcher == nullptr) return EINA_FALSE;
+
+ if (ev.eventWatcher->isSameEvent(ei))
+ return EINA_TRUE;
+
+ return EINA_FALSE;
+}
+
+Eina_Bool
+etRunner::isWatchingEventSignal(Ecore_Window win, E_TC_Event_Type ev_type)
+{
+ if (ev.eventWatcher == nullptr) return EINA_FALSE;
+
+ if ((ev.eventWatcher->isSameWin(win) &&
+ ev.eventWatcher->isSameType(ev_type)))
+ return EINA_TRUE;
+
+ return EINA_FALSE;
+}
+
std::shared_ptr<eventItem>
etRunner::waitEvent(etWin *win, E_TC_Event_Type ev_type)
{
}
// pre-waiting events
- work(0.5);
+ watchEventSignal(win?win->native_win:0, ev_type);
+ work();
if (*ev.wait_event_index == ev.last_event)
{
- work(0.5); // waiting additional time
+ work(); // waiting additional time
if (*ev.wait_event_index == ev.last_event)
{
std::shared_ptr<eventItem> res = std::make_shared<eventItem>(0, E_TC_EVENT_TYPE_NONE);
ev.recv_queue.push_back(ei);
ev.last_event = ei;
+ if (isWatchingEventSignal(ei))
+ {
+ unwatchEventSignal();
+ finishWork();
+ }
+
return EINA_TRUE;
}
ev.recv_queue.push_back(ei);
ev.last_event = ei;
+ if (isWatchingEventSignal(id, ev_type))
+ {
+ unwatchEventSignal();
+ finishWork();
+ }
+
return EINA_TRUE;
}
EINA_SAFETY_ON_FALSE_RETURN_VAL(execute_verifyTC, EINA_TRUE);
EINA_SAFETY_ON_NULL_RETURN_VAL(screenshot, EINA_FALSE);
+ work(0.3);
+
surface = efl_util_screenshot_take_tbm_surface(screenshot);
if (surface == NULL)
{
~eventItem() {}
public:
+ Eina_Bool isSameEvent(eventItem *ei) { return (ei->win == this->win) && (ei->type == this->type); }
+ Eina_Bool isSameEvent(std::shared_ptr<eventItem> ei) { return (ei->win == this->win) && (ei->type == this->type); }
Eina_Bool isSameWin(Ecore_Window win) { return win == this->win; }
Eina_Bool isSameType(E_TC_Event_Type type) {return type == this->type; }
Evas_Object *elm_win;
Ecore_Window native_win;
- Eina_List *sh_list;
- Eina_List *eh_list;
+ Eina_List *sh_list; // Signal Handler list
+ Eina_List *eh_list; // Event Handler list
std::list<std::shared_ptr<eventItem>> recv_queue;
std::list<std::shared_ptr<eventItem>>::iterator wait_event_index;
std::shared_ptr<eventItem> last_event;
std::shared_ptr<eventItem> last_checkpoint;
+ std::shared_ptr<eventItem> eventWatcher;
struct
{
void setEventCheckpoint();
Eina_Bool addSignalHandlers();
void delSignalHandlers();
+ void unwatchEventSignal();
Eldbus_Proxy *getDbusProxy() { return dbus.ds_proxy; }
Eldbus_Object *getDbusObject() { return dbus.ds_obj; }
protected:
Eina_Bool initProtocols();
+ void watchEventSignal(Ecore_Window win, E_TC_Event_Type ev_type);
+ Eina_Bool isWatchingEventSignal(std::shared_ptr<eventItem> ei);
+ Eina_Bool isWatchingEventSignal(Ecore_Window win, E_TC_Event_Type ev_type);
efl_util_inputgen_h inputGenerator = NULL;
#ifndef DISABLE_GESTURE_TESTS
efl_util_gesture_h gestureHandler = NULL;