}
// pre-waiting events
- watchEventSignal(win?win->native_win:0, ev_type);
+ if ((ev_type == E_TC_EVENT_TYPE_INPUT_ECORE_KEY) ||
+ (ev_type == E_TC_EVENT_TYPE_INPUT_ECORE_MOUSE) ||
+ (ev_type == E_TC_EVENT_TYPE_INPUT_ECORE_MOUSE_RELATIVE_MOVE))
+ {
+ Ecore_Window ew = elm_win_window_id_get(win?win->elm_win:0);
+ watchEventSignal(ew, ev_type);
+ }
+ else
+ {
+ watchEventSignal(win?win->native_win:0, ev_type);
+ }
+
work();
if (*ev.wait_event_index == ev.last_event)
Ecore_Event_Mouse_Button *ev = (Ecore_Event_Mouse_Button *)event;
etRunner *runner = (etRunner *)data;
- DBG("Mouse button DOWN cb (%d, %d) buttons: %d", ev->x, ev->y, ev->buttons);
+ DBG("Mouse button DOWN cb (%d, %d) buttons: %d device: %d", ev->x, ev->y, ev->buttons, ev->multi.device);
if (runner->ev.mouse.buttons != ev->buttons) return ECORE_CALLBACK_PASS_ON;
+ if (runner->ev.mouse.multi_device != 0 &&
+ runner->ev.mouse.multi_device != (unsigned int)ev->multi.device)
+ return ECORE_CALLBACK_PASS_ON;
if ((runner->ev.mouse.x == ev->x) &&
(runner->ev.mouse.y == ev->y))
{
- if (runner->ev.mouse.ecore_state == EINA_FALSE &&
- type == ECORE_EVENT_MOUSE_BUTTON_DOWN)
+ if (type == ECORE_EVENT_MOUSE_BUTTON_DOWN)
{
if (checkEcoreDeviceInfo(ev->dev))
{
Ecore_Event_Mouse_Button *ev = (Ecore_Event_Mouse_Button *)event;
etRunner *runner = (etRunner *)data;
- DBG("Mouse button UP cb (%d, %d) buttons: %d", ev->x, ev->y, ev->buttons);
+ DBG("Mouse button UP cb (%d, %d) buttons: %d device: %d", ev->x, ev->y, ev->buttons, ev->multi.device);
if (runner->ev.mouse.buttons != ev->buttons) return ECORE_CALLBACK_PASS_ON;
+ if (runner->ev.mouse.multi_device != 0 &&
+ runner->ev.mouse.multi_device != (unsigned int)ev->multi.device)
+ return ECORE_CALLBACK_PASS_ON;
if ((runner->ev.mouse.x == ev->x) &&
(runner->ev.mouse.y == ev->y))
{
- if (runner->ev.mouse.ecore_state == EINA_TRUE &&
- type == ECORE_EVENT_MOUSE_BUTTON_UP)
+ if (type == ECORE_EVENT_MOUSE_BUTTON_UP)
{
if (checkEcoreDeviceInfo(ev->dev))
{
}
#endif //RELATIVE_MOTION_GRAB_MERGED
+TEST_F(etTestInput, pointer_down_and_move)
+{
+ int ret = EFL_UTIL_ERROR_NONE;
+
+ etWin *tw_big = initNormalWin("TCWin_PointerEvent_Big", 0, 0, 500, 500);
+ ASSERT_TRUE(tw_big != NULL) << "failed to initiation Big window";
+ showTCWin(tw_big);
+ ASSERT_VIS_ON(tw_big);
+
+ etWin *tw_small = initNormalWin("TCWin_PointerEvent_Small", 0, 0, 100, 100);
+ ASSERT_TRUE(tw_small != NULL) << "failed to initiation Small window";
+ showTCWin(tw_small);
+ ASSERT_VIS_ON(tw_small);
+
+ InputGenHandler inputgen_h = std::make_shared<etInputGenHandler>(EFL_UTIL_INPUT_DEVTYPE_POINTER, true);
+ ret = inputgen_h->generatePointerMove(1, 50, 50);
+ ASSERT_TRUE(ret);
+
+ etRunner::get().ev.mouse.buttons = 1;
+ etRunner::get().ev.mouse.x = 50;
+ etRunner::get().ev.mouse.y = 50;
+
+ ret = inputgen_h->generatePointerDown(1, 50, 50);
+ ASSERT_TRUE(ret);
+ ASSERT_EVENT(tw_small, E_TC_EVENT_TYPE_INPUT_ECORE_MOUSE);
+
+ etRunner::get().ev.mouse.buttons = 1;
+ etRunner::get().ev.mouse.x = 400;
+ etRunner::get().ev.mouse.y = 400;
+
+ ret = inputgen_h->generatePointerMove(1, 200, 200);
+ ret = inputgen_h->generatePointerMove(1, 400, 400);
+ ret = inputgen_h->generatePointerUp(1, 400, 400);
+ ASSERT_TRUE(ret);
+ // Even if mouse up position is on the tw_big window, an event occurs on the tw_small window
+ // because mouse events are grabbed to tw_small window after mouse down position is on it.
+ ASSERT_EVENT(tw_small, E_TC_EVENT_TYPE_INPUT_ECORE_MOUSE);
+
+ etRunner::get().ev.elm_win = NULL;
+
+ ASSERT_EQ(etRunner::get().verifyTC(testCaseName, testName), EINA_TRUE);
+}
+
+TEST_F(etTestInput, touch_down_and_move)
+{
+ int ret = EFL_UTIL_ERROR_NONE;
+
+ etWin *tw_big = initNormalWin("TCWin_TouchEvent_Big", 0, 0, 500, 500);
+ ASSERT_TRUE(tw_big != NULL) << "failed to initiation Big window";
+ showTCWin(tw_big);
+ ASSERT_VIS_ON(tw_big);
+
+ etWin *tw_small = initNormalWin("TCWin_TouchEvent_Small", 0, 0, 100, 100);
+ ASSERT_TRUE(tw_small != NULL) << "failed to initiation Small window";
+ showTCWin(tw_small);
+ ASSERT_VIS_ON(tw_small);
+
+ InputGenHandler inputgen_h = std::make_shared<etInputGenHandler>(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN, true);
+
+ etRunner::get().ev.mouse.buttons = 1;
+ etRunner::get().ev.mouse.x = 50;
+ etRunner::get().ev.mouse.y = 50;
+
+ ret = inputgen_h->generateTouchDown(0, 50, 50);
+ ASSERT_TRUE(ret);
+ ASSERT_EVENT(tw_small, E_TC_EVENT_TYPE_INPUT_ECORE_MOUSE);
+
+ etRunner::get().ev.mouse.buttons = 1;
+ etRunner::get().ev.mouse.x = 400;
+ etRunner::get().ev.mouse.y = 400;
+
+ ret = inputgen_h->generateTouchMove(0, 200, 200);
+ ret = inputgen_h->generateTouchMove(0, 400, 400);
+ ret = inputgen_h->generateTouchUp(0, 400, 400);
+ ASSERT_TRUE(ret);
+ // Even if mouse up position is on the tw_big window, an event occurs on the tw_small window
+ // because mouse events are grabbed to tw_small window after mouse down position is on it.
+ ASSERT_EVENT(tw_small, E_TC_EVENT_TYPE_INPUT_ECORE_MOUSE);
+
+ etRunner::get().ev.elm_win = NULL;
+
+ ASSERT_EQ(etRunner::get().verifyTC(testCaseName, testName), EINA_TRUE);
+}
+
+TEST_F(etTestInput, touch_multi_down)
+{
+ int ret = EFL_UTIL_ERROR_NONE;
+
+ etWin *tw_big = initNormalWin("TCWin_TouchMultiEvent_Big", 0, 0, 500, 500);
+ ASSERT_TRUE(tw_big != NULL) << "failed to initiation Big window";
+ showTCWin(tw_big);
+ ASSERT_VIS_ON(tw_big);
+
+ etWin *tw_small = initNormalWin("TCWin_TouchMultiEvent_Small", 0, 0, 100, 100);
+ ASSERT_TRUE(tw_small != NULL) << "failed to initiation Small window";
+ showTCWin(tw_small);
+ ASSERT_VIS_ON(tw_small);
+
+ InputGenHandler inputgen_h = std::make_shared<etInputGenHandler>(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN, true);
+
+ etRunner::get().ev.mouse.buttons = 1;
+ etRunner::get().ev.mouse.x = 50;
+ etRunner::get().ev.mouse.y = 50;
+
+ ret = inputgen_h->generateTouchDown(0, 50, 50);
+ ASSERT_TRUE(ret);
+ ASSERT_EVENT(tw_small, E_TC_EVENT_TYPE_INPUT_ECORE_MOUSE);
+
+ etRunner::get().ev.mouse.multi_device = 1;
+ etRunner::get().ev.mouse.x = 200;
+ etRunner::get().ev.mouse.y = 200;
+
+ // Even if the second mouse down position is on the tw_big window, an event occurs on the tw_small window
+ // because mouse events are grabbed to tw_small window after the first mouse down position is on it.
+ ret = inputgen_h->generateTouchDown(1, 200, 200);
+ ASSERT_TRUE(ret);
+ ASSERT_EVENT(tw_small, E_TC_EVENT_TYPE_INPUT_ECORE_MOUSE);
+
+ ret = inputgen_h->generateTouchUp(1, 200, 200);
+ ASSERT_TRUE(ret);
+ ASSERT_EVENT(tw_small, E_TC_EVENT_TYPE_INPUT_ECORE_MOUSE);
+
+ etRunner::get().ev.mouse.multi_device = 0;
+ etRunner::get().ev.mouse.x = 50;
+ etRunner::get().ev.mouse.y = 50;
+ ret = inputgen_h->generateTouchUp(0, 50, 50);
+ ASSERT_TRUE(ret);
+ ASSERT_EVENT(tw_small, E_TC_EVENT_TYPE_INPUT_ECORE_MOUSE);
+
+ ASSERT_EQ(etRunner::get().verifyTC(testCaseName, testName), EINA_TRUE);
+}
+
#ifndef DISABLE_GESTURE_TESTS
TEST_F(etTestInput, gesture_tap22)
{