3 #include "e_test_event.h"
5 #define E_TEST_WORK_TIME 3.0
6 #define E_TC_SIGN_WIN_INFO "usiiiiibbbiibbbbbi"
8 static const char effect_started[] = "effect,started";
9 static const char effect_done[] = "effect,done";
10 static const char launch_done[] = "launch,done";
12 /* callbacks - event */
14 _cb_resource_id(void *data,
15 struct tizen_resource *tizen_resource,
18 Ecore_Window *res_id = (Ecore_Window *)data;
20 etRunner::get().finishWork();
24 _cb_geometry(void *data EINA_UNUSED,
25 struct wl_output *wl_output EINA_UNUSED,
26 int x, int y, int w, int h,
27 int subpixel EINA_UNUSED,
28 const char *make EINA_UNUSED,
29 const char *model EINA_UNUSED,
30 int transform EINA_UNUSED)
32 etRunner::get().output.x = x;
33 etRunner::get().output.y = y;
34 etRunner::get().output.w = w;
35 etRunner::get().output.h = h;
39 _cb_mode(void *data EINA_UNUSED,
40 struct wl_output *wl_output EINA_UNUSED,
43 int refresh EINA_UNUSED)
45 if (flags & WL_OUTPUT_MODE_CURRENT)
47 etRunner::get().output.w = w;
48 etRunner::get().output.h = h;
51 etRunner::get().finishWork();
55 _cb_done(void *data EINA_UNUSED,
56 struct wl_output *output EINA_UNUSED)
62 _cb_scale(void *data EINA_UNUSED,
63 struct wl_output *output EINA_UNUSED,
64 int scale EINA_UNUSED)
69 /* callbacks - method */
70 static void _cb_method_win_info_get(void *data, const Eldbus_Message *msg, Eldbus_Pending *p);
71 static void _cb_method_win_info_list_get(void *data, const Eldbus_Message *msg, Eldbus_Pending *p);
72 static void _cb_method_window_register(void *data, const Eldbus_Message *msg, Eldbus_Pending *p);
73 static void _cb_method_zone_rotation_change(void *data, const Eldbus_Message *msg, Eldbus_Pending *p);
74 static void _cb_method_window_effect(void *data, const Eldbus_Message *msg, Eldbus_Pending *p);
75 static void _cb_method_set_tc_start_end(void *data, const Eldbus_Message *msg, Eldbus_Pending *p);
76 static void _cb_method_transient_for_below(void *data, const Eldbus_Message *msg, Eldbus_Pending *p);
78 /* callbacks - signal */
79 static void _cb_signal_vis_changed(void *data, const Eldbus_Message *msg);
80 static void _cb_signal_stack_changed(void *data, const Eldbus_Message *msg);
81 static void _cb_signal_win_rot_changed(void *data, const Eldbus_Message *msg);
82 static void _cb_signal_focus_changed(void *data, const Eldbus_Message *msg);
83 static void _cb_signal_render_while_effect_run(void *data, const Eldbus_Message *msg);
85 /* callbacks - ecore */
86 static Eina_Bool _cb_ecore_key_down(void *data, int type, void *event);
87 static Eina_Bool _cb_ecore_key_up(void *data, int type, void *event);
89 /* callbacks - evas */
90 static void _cb_evas_key_down(void * data, Evas * evas, Evas_Object * obj, void * event_info);
91 static void _cb_evas_key_up(void * data, Evas * evas, Evas_Object * obj, void * event_info);
93 /* callbacks - smart */
94 static void _cb_evas_smart_cb_effect_started(void *data, Evas_Object * obj, void *event_info);
95 static void _cb_evas_smart_cb_effect_done(void *data, Evas_Object * obj, void *event_info);
96 static void _cb_evas_smart_cb_launch_done(void *data, Evas_Object * obj, void *event_info);
98 /* callbacks - timer */
99 static Eina_Bool _cb_work_timeout(void *data);
101 /* callbacks - gesture */
102 static Eina_Bool _cb_gesture_tap(void *data, int type, void *event);
103 static Eina_Bool _cb_gesture_edge_swipe(void *data, int type, void *event);
104 static Eina_Bool _cb_gesture_edge_drag(void *data, int type, void *event);
106 /**********************
108 **********************/
109 static const struct tizen_resource_listener _e_test_tizen_resource_listener =
114 static const struct wl_output_listener _e_test_output_listener =
122 /**********************
124 **********************/
125 etRunner etRunner::inst;
130 Eina_Bool res = EINA_FALSE;
132 worker.waitTime = E_TEST_WORK_TIME;
134 logDomain = eina_log_domain_register("e-tc", EINA_COLOR_BLUE);
137 if (!ecore_wl2_connected_display_get(NULL))
138 ecore_wl2_display_connect(NULL);
140 // init tizen_extension protocol
141 res = initProtocols();
142 EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE);
147 dbus.conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SYSTEM);
148 EINA_SAFETY_ON_NULL_RETURN_VAL(dbus.conn, EINA_FALSE);
150 dbus.ds_obj = eldbus_object_get(dbus.conn,
151 "org.enlightenment.wm",
152 "/org/enlightenment/wm");
153 EINA_SAFETY_ON_NULL_RETURN_VAL(dbus.ds_obj, EINA_FALSE);
155 dbus.ds_proxy = eldbus_proxy_get(dbus.ds_obj,
156 "org.enlightenment.wm.Test");
157 EINA_SAFETY_ON_NULL_RETURN_VAL(dbus.ds_proxy, EINA_FALSE);
159 dbus.deviced_obj = eldbus_object_get(dbus.conn,
160 "org.tizen.system.deviced",
161 "/Org/Tizen/System/DeviceD/Display");
162 EINA_SAFETY_ON_NULL_RETURN_VAL(dbus.deviced_obj, EINA_FALSE);
164 dbus.deviced_proxy = eldbus_proxy_get(dbus.deviced_obj,
165 "org.tizen.system.deviced.display");
166 EINA_SAFETY_ON_NULL_RETURN_VAL(dbus.deviced_proxy, EINA_FALSE);
168 // reset registered window of e_test_helper
169 res = resetRegisterWin();
170 EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE);
172 // init input generator
173 inputGenerator = efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN | EFL_UTIL_INPUT_DEVTYPE_KEYBOARD, NULL);
174 EINA_SAFETY_ON_NULL_RETURN_VAL(inputGenerator, EINA_FALSE);
176 // init gesture handler
177 gestureHandler = efl_util_gesture_initialize();
178 EINA_SAFETY_ON_NULL_RETURN_VAL(gestureHandler, EINA_FALSE);
180 // add signal handlers
181 res = addSignalHandlers();
182 EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE);
190 eina_log_domain_unregister(logDomain);
192 freeLastWinInfoList();
195 // deinit tizen_extension protocol
198 tizen_policy_destroy(tzPolicy);
204 tizen_surface_destroy(tzSurface);
210 tizen_launch_splash_destroy(tzlaunch_splash);
211 tzlaunch_splash = NULL;
216 tizen_launch_effect_destroy(tzlaunch_effect);
217 tzlaunch_effect = NULL;
221 eldbus_proxy_unref(dbus.deviced_proxy);
222 eldbus_object_unref(dbus.deviced_obj);
223 eldbus_proxy_unref(dbus.ds_proxy);
224 eldbus_object_unref(dbus.ds_obj);
225 eldbus_connection_unref(dbus.conn);
228 // deinit input generator
229 efl_util_input_deinitialize_generator(inputGenerator);
231 // deinit gesture handler
232 efl_util_gesture_deinitialize(gestureHandler);
236 etRunner::registerWin(etWin *tw)
238 Eldbus_Pending *p = NULL;
239 Eina_Bool accepted = EINA_FALSE;
241 p = eldbus_proxy_call(dbus.ds_proxy,
243 _cb_method_window_register,
248 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
256 etRunner::deregisterWin(etWin *tw)
258 Eldbus_Pending *p = NULL;
259 Eina_Bool accepted = EINA_FALSE;
261 p = eldbus_proxy_call(dbus.ds_proxy,
263 _cb_method_window_register,
268 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
276 etRunner::resetRegisterWin()
278 Eldbus_Pending *p = NULL;
279 Eina_Bool accepted = EINA_FALSE;
281 p = eldbus_proxy_call(dbus.ds_proxy,
282 "ResetRegisterWindow",
283 _cb_method_window_register,
287 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
295 etRunner::setWinActivate(etWin *tw)
297 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
299 tw->updateGeometry();
301 tizen_policy_activate(tzPolicy,
302 getWlSurface(tw->elm_win));
308 etRunner::requestKillWinByName(const char *name)
310 Eldbus_Pending *p = NULL;
312 EINA_SAFETY_ON_NULL_RETURN_VAL(name, EINA_FALSE);
314 p = eldbus_proxy_call(dbus.ds_proxy,
321 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
327 etRunner::setWinIconic(etWin *tw,
330 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
333 tizen_policy_iconify(tzPolicy,
334 getWlSurface(tw->elm_win));
336 tizen_policy_uniconify(tzPolicy,
337 getWlSurface(tw->elm_win));
343 etRunner::setWinStack(etWin *tw,
347 Eldbus_Pending *p = NULL;
348 p = eldbus_proxy_call(dbus.ds_proxy,
355 sibiling? sibiling->native_win : 0,
357 EINA_SAFETY_ON_TRUE_RETURN_VAL(p != NULL, EINA_FALSE);
363 etRunner::setWinRaise(etWin *tw)
365 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
367 tizen_policy_raise(tzPolicy, getWlSurface(tw->elm_win));
373 etRunner::setWinLower(etWin *tw)
375 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
377 tizen_policy_lower(tzPolicy, getWlSurface(tw->elm_win));
383 etRunner::setWinTransientFor(etWin *tw_child,
387 EINA_SAFETY_ON_NULL_RETURN_VAL(tw_child, EINA_FALSE);
390 tizen_policy_set_transient_for(tzPolicy,
391 tw_child->native_win,
392 tw_parent->native_win);
394 tizen_policy_unset_transient_for(tzPolicy,
395 tw_child->native_win);
401 etRunner::setWinTransientForBelow(etWin *tw_child,
405 Eina_Bool accepted = EINA_FALSE;
406 Eldbus_Pending *p = NULL;
408 p = eldbus_proxy_call(dbus.ds_proxy,
409 "SetWindowTransientForBelow",
410 _cb_method_transient_for_below,
414 tw_child->native_win,
415 tw_parent->native_win,
417 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
425 etRunner::setWinNotiLevel(etWin *tw,
426 efl_util_notification_level_e lv)
428 Eina_Bool res = EINA_FALSE;
430 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
432 res = efl_util_set_notification_window_level(tw->elm_win, lv);
433 EINA_SAFETY_ON_FALSE_RETURN_VAL(res == EFL_UTIL_ERROR_NONE, EINA_FALSE);
438 efl_util_notification_level_e
439 etRunner::getWinNotiLevel(etWin *tw)
441 Eina_Bool res = EINA_FALSE;
442 efl_util_notification_level_e lv = EFL_UTIL_NOTIFICATION_LEVEL_NONE;
444 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EFL_UTIL_NOTIFICATION_LEVEL_NONE);
446 res = efl_util_get_notification_window_level(tw->elm_win, &lv);
447 EINA_SAFETY_ON_FALSE_RETURN_VAL(res == EFL_UTIL_ERROR_NONE, EFL_UTIL_NOTIFICATION_LEVEL_NONE);
453 etRunner::setFocusSkip(etWin *tw, Eina_Bool set)
455 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
458 tizen_policy_set_focus_skip(tzPolicy,
459 getWlSurface(tw->elm_win));
461 tizen_policy_unset_focus_skip(tzPolicy,
462 getWlSurface(tw->elm_win));
468 etRunner::setFocusSkipEcoreWl2(etWin *tw, Eina_Bool set)
470 Ecore_Wl2_Window *wlwin = NULL;
472 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
474 wlwin = (Ecore_Wl2_Window *)elm_win_wl_window_get(tw->elm_win);
475 EINA_SAFETY_ON_NULL_RETURN_VAL(wlwin, EINA_FALSE);
477 ecore_wl2_window_focus_skip_set(wlwin, set);
483 etRunner::setZoneRotation(int angle)
485 Eldbus_Pending *p = NULL;
486 Eina_Bool allowed = EINA_FALSE;
488 p = eldbus_proxy_call(dbus.ds_proxy,
489 "ChangeZoneRotation",
490 _cb_method_zone_rotation_change,
495 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
503 etRunner::setTCStart()
505 Eldbus_Pending *p = NULL;
506 Eina_Bool res = EINA_FALSE;
508 p = eldbus_proxy_call(dbus.ds_proxy,
510 _cb_method_set_tc_start_end,
514 EINA_SAFETY_ON_NULL_GOTO(p, err);
518 EINA_SAFETY_ON_FALSE_GOTO(res, err);
530 Eldbus_Pending *p = NULL;
531 Eina_Bool res = EINA_FALSE;
533 p = eldbus_proxy_call(dbus.ds_proxy,
535 _cb_method_set_tc_start_end,
539 if (p == NULL) res = EINA_FALSE;
543 EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE);
549 etRunner::getWinInfo(etWin *tw)
551 Eldbus_Pending *p = NULL;
555 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
557 win = tw->native_win;
562 p = eldbus_proxy_call(dbus.ds_proxy,
564 _cb_method_win_info_get,
569 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
573 if ((tw->native_win == win) && (!tw->effect))
579 if (tw->native_win != win)
581 ERR("Something Wrong. Difference with quering window"
582 "and received window from server");
583 tw->native_win = win;
590 etRunner::getWinInfoList()
592 Eldbus_Pending *p = NULL;
593 Window_Info_List *info_list = NULL;
595 Eina_List *result = NULL;
597 info_list = E_NEW(Window_Info_List, 1);
598 EINA_SAFETY_ON_NULL_RETURN_VAL(info_list, NULL);
602 p = eldbus_proxy_call(dbus.ds_proxy,
604 _cb_method_win_info_list_get,
608 EINA_SAFETY_ON_NULL_RETURN_VAL(p, NULL);
612 if (info_list->retry)
614 info_list->retry = EINA_FALSE;
615 EINA_LIST_CAST_FREE(info_list->list, tw, etWin*)
627 result = eina_list_clone(info_list->list);
630 freeLastWinInfoList();
631 listWinInfo = result;
637 etRunner::freeWinInfoList(Eina_List *list)
641 EINA_SAFETY_ON_NULL_RETURN(list);
643 if (listWinInfo == list)
646 EINA_LIST_CAST_FREE(list, tw, etWin*)
656 etRunner::freeLastWinInfoList()
659 freeWinInfoList(listWinInfo);
665 etRunner::setLastWinInfoList(Eina_List *list)
667 EINA_SAFETY_ON_NULL_RETURN(list);
669 freeLastWinInfoList();
675 etRunner::getWinId(Evas_Object *elm_win)
677 struct wl_surface *surf = NULL;
679 struct tizen_resource *tzres = NULL;
681 surf = getWlSurface(elm_win);
682 EINA_SAFETY_ON_NULL_RETURN_VAL(surf, 0);
684 tzres = tizen_surface_get_tizen_resource(tzSurface, surf);
685 EINA_SAFETY_ON_NULL_RETURN_VAL(tzres, 0);
687 tizen_resource_add_listener(tzres,
688 &_e_test_tizen_resource_listener, &id);
692 tizen_resource_destroy(tzres);
698 etRunner::getWlSurface(Evas_Object *elm_win)
700 Ecore_Wl2_Window *wlwin = NULL;
701 struct wl_surface *surf = NULL;
703 EINA_SAFETY_ON_NULL_RETURN_VAL(elm_win, NULL);
705 wlwin = (Ecore_Wl2_Window *)elm_win_wl_window_get(elm_win);
706 EINA_SAFETY_ON_NULL_RETURN_VAL(wlwin, NULL);
708 surf = ecore_wl2_window_surface_get(wlwin);
709 EINA_SAFETY_ON_NULL_RETURN_VAL(surf, NULL);
715 etRunner::setDpms(Eina_Bool on)
717 Eldbus_Pending *p = NULL;
718 p = eldbus_proxy_call(dbus.ds_proxy,
725 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
730 etRunner::setDevctlDisplayLock(Eina_Bool lock)
732 Eldbus_Pending *p = NULL;
736 p = eldbus_proxy_call(dbus.deviced_proxy,
749 p = eldbus_proxy_call(dbus.deviced_proxy,
758 EINA_SAFETY_ON_TRUE_RETURN_VAL(p != NULL, EINA_FALSE);
764 etRunner::setDevctlDisplayOn(Eina_Bool on)
766 Eldbus_Pending *p = NULL;
768 p = eldbus_proxy_call(dbus.deviced_proxy,
774 on? "lcdon" : "lcdoff");
775 EINA_SAFETY_ON_TRUE_RETURN_VAL(p != NULL, EINA_FALSE);
781 etRunner::feedMouseDown(int x, int y)
783 Eldbus_Pending *p = NULL;
784 p = eldbus_proxy_call(dbus.ds_proxy,
792 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
797 etRunner::feedMouseMove(int x, int y)
799 Eldbus_Pending *p = NULL;
800 p = eldbus_proxy_call(dbus.ds_proxy,
808 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
813 etRunner::feedMouseUp(int x, int y)
815 Eldbus_Pending *p = NULL;
816 p = eldbus_proxy_call(dbus.ds_proxy,
824 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
829 etRunner::feedKeyDown(const char *key)
831 Eldbus_Pending *p = NULL;
832 p = eldbus_proxy_call(dbus.ds_proxy,
840 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
845 etRunner::feedKeyUp(const char *key)
847 Eldbus_Pending *p = NULL;
848 p = eldbus_proxy_call(dbus.ds_proxy,
856 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
861 etRunner::generateMouseDown(int x, int y)
863 // Using efl_util_input_generate instead of generate event by eldbus
864 int ret = EFL_UTIL_ERROR_NONE;
866 if (inputGenerator == NULL)
868 inputGenerator = efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN, NULL);
872 ret = efl_util_input_generate_touch(inputGenerator,
874 EFL_UTIL_INPUT_TOUCH_BEGIN,
876 if (ret != EFL_UTIL_ERROR_NONE)
878 efl_util_input_deinitialize_generator(inputGenerator);
879 inputGenerator = NULL;
887 etRunner::generateMouseMove(int x, int y)
889 // Using efl_util_input_generate instead of generate event by eldbus
890 int ret = EFL_UTIL_ERROR_NONE;
892 if (inputGenerator == NULL)
894 inputGenerator = efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN, NULL);
898 ret = efl_util_input_generate_touch(inputGenerator,
900 EFL_UTIL_INPUT_TOUCH_UPDATE,
902 if (ret != EFL_UTIL_ERROR_NONE)
904 efl_util_input_deinitialize_generator(inputGenerator);
905 inputGenerator = NULL;
913 etRunner::generateMouseUp(int x, int y)
915 // Using efl_util_input_generate instead of generate event by eldbus
916 int ret = EFL_UTIL_ERROR_NONE;
918 if (inputGenerator == NULL)
920 inputGenerator = efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN, NULL);
924 ret = efl_util_input_generate_touch(inputGenerator,
926 EFL_UTIL_INPUT_TOUCH_END,
928 if (ret != EFL_UTIL_ERROR_NONE)
930 efl_util_input_deinitialize_generator(inputGenerator);
931 inputGenerator = NULL;
939 etRunner::generateKeyPress(const char *keyname)
941 // Using efl_util_input_generate instead of generate event by eldbus
942 int ret = EFL_UTIL_ERROR_NONE;
944 if (inputGenerator == NULL)
946 inputGenerator = efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_KEYBOARD, NULL);
950 ret = efl_util_input_generate_key(inputGenerator,
953 if (ret != EFL_UTIL_ERROR_NONE)
955 efl_util_input_deinitialize_generator(inputGenerator);
956 inputGenerator = NULL;
964 etRunner::generateKeyRelease(const char *keyname)
966 // Using efl_util_input_generate instead of generate event by eldbus
967 int ret = EFL_UTIL_ERROR_NONE;
969 if (inputGenerator == NULL)
971 inputGenerator = efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_KEYBOARD, NULL);
975 ret = efl_util_input_generate_key(inputGenerator,
978 if (ret != EFL_UTIL_ERROR_NONE)
980 efl_util_input_deinitialize_generator(inputGenerator);
981 inputGenerator = NULL;
989 etRunner::generateKeyEvent(const char *keyname, double delay)
991 Eina_Bool res = EINA_FALSE;
993 res = etRunner::get().generateKeyPress(keyname);
994 EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE);
996 res = etRunner::get().generateKeyRelease(keyname);
997 EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE);
1003 etRunner::generateTouchDown(int idx, int x, int y)
1005 // Using efl_util_input_generate instead of generate event by eldbus
1006 int ret = EFL_UTIL_ERROR_NONE;
1008 if (inputGenerator == NULL)
1010 inputGenerator = efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN, NULL);
1014 ret = efl_util_input_generate_touch(inputGenerator,
1016 EFL_UTIL_INPUT_TOUCH_BEGIN,
1018 if (ret != EFL_UTIL_ERROR_NONE)
1020 efl_util_input_deinitialize_generator(inputGenerator);
1021 inputGenerator = NULL;
1029 etRunner::generateTouchMove(int idx, int x, int y)
1031 // Using efl_util_input_generate instead of generate event by eldbus
1032 int ret = EFL_UTIL_ERROR_NONE;
1034 if (inputGenerator == NULL)
1036 inputGenerator = efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN, NULL);
1040 ret = efl_util_input_generate_touch(inputGenerator,
1042 EFL_UTIL_INPUT_TOUCH_UPDATE,
1044 if (ret != EFL_UTIL_ERROR_NONE)
1046 efl_util_input_deinitialize_generator(inputGenerator);
1047 inputGenerator = NULL;
1055 etRunner::generateTouchUp(int idx, int x, int y)
1057 // Using efl_util_input_generate instead of generate event by eldbus
1058 int ret = EFL_UTIL_ERROR_NONE;
1060 if (inputGenerator == NULL)
1062 inputGenerator = efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN, NULL);
1066 ret = efl_util_input_generate_touch(inputGenerator,
1068 EFL_UTIL_INPUT_TOUCH_END,
1070 if (ret != EFL_UTIL_ERROR_NONE)
1072 efl_util_input_deinitialize_generator(inputGenerator);
1073 inputGenerator = NULL;
1081 etRunner::setSplashLaunch(const char *path, int type)
1083 const char *effect_type = "launch";
1084 struct wl_array option;
1086 // init tzlaunch_splash
1087 if (tzlaunch_splash)
1089 tizen_launch_splash_destroy(tzlaunch_splash);
1090 tzlaunch_splash = NULL;
1092 if (tzlaunch_effect) tzlaunch_splash = tizen_launch_effect_create_splash_img(tzlaunch_effect);
1093 EINA_SAFETY_ON_NULL_RETURN_VAL(tzlaunch_splash, EINA_FALSE);
1095 wl_array_init(&option);
1096 tizen_launch_splash_launch(tzlaunch_splash, path, type,
1098 effect_type, NULL, &option);
1099 wl_array_release(&option);
1105 etRunner::setSplashOwner()
1108 EINA_SAFETY_ON_NULL_RETURN_VAL(tzlaunch_splash, EINA_FALSE);
1110 tizen_launch_splash_owner(tzlaunch_splash, (int)getpid());
1116 etRunner::setWinEffect(etWin *tw)
1118 Eldbus_Pending *p = NULL;
1119 Eina_Bool accepted = EINA_FALSE;
1121 this->ev.elm_win = tw->elm_win;
1123 p = eldbus_proxy_call(dbus.ds_proxy,
1125 _cb_method_window_effect,
1131 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
1138 etRunner::freezeEvent()
1140 Eldbus_Pending *p = NULL;
1141 p = eldbus_proxy_call(dbus.ds_proxy,
1148 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
1153 etRunner::thawEvent()
1155 Eldbus_Pending *p = NULL;
1156 p = eldbus_proxy_call(dbus.ds_proxy,
1163 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
1168 etRunner::waitEvent(etWin *win, E_TC_Event_Type ev_type)
1170 E_TC_Event_Item *recv_item = NULL;
1171 Eina_Bool res = EINA_FALSE;
1172 Eina_List *l = NULL;
1177 case E_TC_EVENT_TYPE_VIS_ON:
1178 case E_TC_EVENT_TYPE_VIS_OFF:
1179 case E_TC_EVENT_TYPE_VIS_CHANGED:
1180 ev_type = E_TC_EVENT_TYPE_VIS_CHANGED;
1182 case E_TC_EVENT_TYPE_STACK_RAISE:
1183 case E_TC_EVENT_TYPE_STACK_LOWER:
1184 case E_TC_EVENT_TYPE_STACK_ABOVE:
1185 case E_TC_EVENT_TYPE_STACK_BELOW:
1186 case E_TC_EVENT_TYPE_STACK_CHANGED:
1187 ev_type = E_TC_EVENT_TYPE_STACK_CHANGED;
1193 // Add event callbacks if needs
1194 if (ev_type == E_TC_EVENT_TYPE_EFFECT_EVAS_CB)
1196 ev.elm_win = win->elm_win;
1197 ev.native_win = win->native_win;
1198 ev.effect.state_smcb = E_TC_EVAS_SMART_CB_STATE_NONE;
1200 evas_object_smart_callback_add(this->ev.elm_win, effect_started, _cb_evas_smart_cb_effect_started, this);
1201 evas_object_smart_callback_add(this->ev.elm_win, effect_done, _cb_evas_smart_cb_effect_done, this);
1202 evas_object_smart_callback_add(this->ev.elm_win, launch_done, _cb_evas_smart_cb_launch_done, this);
1204 else if (ev_type == E_TC_EVENT_TYPE_INPUT_EVAS_KEY)
1206 ev.elm_win = win->elm_win;
1207 ev.native_win = win->native_win;
1208 evas_object_event_callback_add(this->ev.elm_win, EVAS_CALLBACK_KEY_DOWN, _cb_evas_key_down, this);
1209 evas_object_event_callback_add(this->ev.elm_win, EVAS_CALLBACK_KEY_UP, _cb_evas_key_up, this);
1211 ev.key.evas_state = EINA_FALSE;
1214 // pre-waiting events
1217 if (ev.wait_event_index == ev.last_event)
1219 work(0.5); // waiting additional time
1220 if (ev.wait_event_index == ev.last_event)
1224 EINA_LIST_CAST_FOREACH(ev.recv_queue, l, recv_item, E_TC_Event_Item*)
1226 if ((recv_item->win == (win?win->native_win:0)) &&
1227 (recv_item->type == ev_type))
1229 ev.wait_event_index = recv_item;
1239 etRunner::flushEventQueue()
1243 ev.recv_queue = eina_list_free(ev.recv_queue);
1244 ev.recv_queue = NULL;
1249 etRunner::insertEventQueue(Ecore_Window id, E_TC_Event_Type ev_type)
1251 E_TC_Event_Item *item = E_NEW(E_TC_Event_Item, 1);
1252 EINA_SAFETY_ON_NULL_RETURN_VAL(item, EINA_FALSE);
1255 item->type = ev_type;
1256 ev.recv_queue = eina_list_append(ev.recv_queue, item);
1257 ev.last_event = item;
1263 etRunner::isEventOccuredAfterCheckpoint(etWin *tw, E_TC_Event_Type ev_type)
1265 Eina_List *l = NULL;
1266 E_TC_Event_Item *item = NULL;
1267 Ecore_Window id = tw->native_win;
1269 EINA_LIST_CAST_FOREACH(ev.recv_queue, l, item, E_TC_Event_Item*)
1271 if (ev.last_checkpoint && ev.last_checkpoint != item)
1274 if ((item->win == id) && (item->type == ev_type))
1282 etRunner::setEventCheckpoint()
1284 ev.last_checkpoint = ev.last_event;
1289 etRunner::addSignalHandlers()
1291 Eldbus_Signal_Handler *sh = NULL;
1292 Ecore_Event_Handler *eh = NULL;
1296 sh = eldbus_proxy_signal_handler_add(dbus.ds_proxy,
1297 "VisibilityChanged",
1298 _cb_signal_vis_changed,
1300 EINA_SAFETY_ON_NULL_GOTO(sh, err);
1301 ev.sh_list = eina_list_append(ev.sh_list, sh);
1303 sh = eldbus_proxy_signal_handler_add(dbus.ds_proxy,
1305 _cb_signal_stack_changed,
1307 EINA_SAFETY_ON_NULL_GOTO(sh, err);
1308 ev.sh_list = eina_list_append(ev.sh_list, sh);
1310 sh = eldbus_proxy_signal_handler_add(dbus.ds_proxy,
1311 "WinRotationChanged",
1312 _cb_signal_win_rot_changed,
1314 EINA_SAFETY_ON_NULL_GOTO(sh, err);
1315 ev.sh_list = eina_list_append(ev.sh_list, sh);
1317 sh = eldbus_proxy_signal_handler_add(dbus.ds_proxy,
1319 _cb_signal_focus_changed,
1321 EINA_SAFETY_ON_NULL_GOTO(sh, err);
1322 ev.sh_list = eina_list_append(ev.sh_list, sh);
1324 sh = eldbus_proxy_signal_handler_add(dbus.ds_proxy,
1326 _cb_signal_render_while_effect_run,
1328 EINA_SAFETY_ON_NULL_GOTO(sh, err);
1329 ev.sh_list = eina_list_append(ev.sh_list, sh);
1331 eh = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _cb_ecore_key_down, this);
1332 EINA_SAFETY_ON_NULL_GOTO(eh, err);
1333 ev.eh_list = eina_list_append(ev.eh_list, eh);
1335 eh = ecore_event_handler_add(ECORE_EVENT_KEY_UP, _cb_ecore_key_up, this);
1336 EINA_SAFETY_ON_NULL_GOTO(eh, err);
1337 ev.eh_list = eina_list_append(ev.eh_list, eh);
1339 eh = ecore_event_handler_add(EFL_UTIL_EVENT_GESTURE_TAP, _cb_gesture_tap, this);
1340 EINA_SAFETY_ON_NULL_GOTO(eh, err);
1341 ev.eh_list = eina_list_append(ev.eh_list, eh);
1343 eh = ecore_event_handler_add(EFL_UTIL_EVENT_GESTURE_EDGE_SWIPE, _cb_gesture_edge_swipe, this);
1344 EINA_SAFETY_ON_NULL_GOTO(eh, err);
1345 ev.eh_list = eina_list_append(ev.eh_list, eh);
1347 eh = ecore_event_handler_add(EFL_UTIL_EVENT_GESTURE_EDGE_DRAG, _cb_gesture_edge_drag, this);
1348 EINA_SAFETY_ON_NULL_GOTO(eh, err);
1349 ev.eh_list = eina_list_append(ev.eh_list, eh);
1351 ev.key.ecore_state = EINA_FALSE;
1356 printf("failed to init handlers\n");
1357 delSignalHandlers();
1362 etRunner::delSignalHandlers()
1364 Eldbus_Signal_Handler *sh = NULL;
1365 Ecore_Event_Handler *eh = NULL;
1367 EINA_LIST_CAST_FREE(ev.sh_list, sh, Eldbus_Signal_Handler*)
1369 eldbus_signal_handler_del(sh);
1372 EINA_LIST_CAST_FREE(ev.eh_list, eh, Ecore_Event_Handler*)
1374 ecore_event_handler_del(eh);
1383 /* give a turn to deal with deferred job for given time*/
1384 addTimer(worker.waitTime);
1389 etRunner::work(double time)
1391 /* give a turn to deal with deferred job for given time*/
1392 if (time < 0.0) time = 0.0;
1399 etRunner::finishWork()
1408 etRunner::printWinInfoList()
1411 Eina_List *l = NULL, *ll = NULL;
1413 printf("--------------------------------------------------------------------------------------------------------------------------\n");
1414 l = getWinInfoList();
1415 EINA_LIST_CAST_FOREACH(l, ll, tw, etWin*)
1417 printf("%04d WinID:%5u alpha:%d %5d,%5d (%5dx%5d) vis(Win:%d Obj:%d Opaque:%2d Type:%2d Skip:%d) Icon:%d Focus(Win:%d Obj:%d) :: %20s\n",
1419 (unsigned int)tw->native_win,
1421 tw->x, tw->y, tw->w, tw->h,
1433 printf("--------------------------------------------------------------------------------------------------------------------------\n");
1437 etRunner::delTimer()
1439 if (!worker.timer) return;
1441 ecore_timer_del(worker.timer);
1442 worker.timer = NULL;
1446 etRunner::addTimer()
1450 worker.timer = ecore_timer_add(worker.waitTime,
1456 etRunner::addTimer(double time)
1460 worker.timer = ecore_timer_add(time,
1466 etRunner::waitForDestroy()
1468 work(E_TEST_WORK_TIME);
1472 etRunner::initProtocols()
1474 Eina_Iterator *globals = NULL;
1475 Ecore_Wl2_Global *global = NULL;
1476 struct wl_registry *registry = NULL;
1478 registry = ecore_wl2_display_registry_get(ecore_wl2_connected_display_get(NULL));
1479 globals = ecore_wl2_display_globals_get(ecore_wl2_connected_display_get(NULL));
1481 EINA_SAFETY_ON_NULL_GOTO(registry, err);
1482 EINA_SAFETY_ON_NULL_GOTO(globals, err);
1484 EINA_ITERATOR_FOREACH(globals, global)
1486 if (!strcmp(global->interface, "tizen_policy"))
1488 tzPolicy = (struct tizen_policy *)
1489 wl_registry_bind(registry,
1491 &tizen_policy_interface,
1492 (global->version > 7)? 7 : global->version);
1494 if (!strcmp(global->interface, "tizen_surface"))
1496 tzSurface = (struct tizen_surface *)
1497 wl_registry_bind(registry,
1499 &tizen_surface_interface,
1500 (global->version > 1)? 1 : global->version);
1502 if (!strcmp(global->interface, "tizen_launch_effect"))
1504 tzlaunch_effect = (struct tizen_launch_effect *)
1505 wl_registry_bind(registry,
1507 &tizen_launch_effect_interface,
1508 (global->version > 1)? 1 : global->version);
1510 if (!strcmp(global->interface, "wl_output"))
1512 wlOutput = (struct wl_output *)
1513 wl_registry_bind(registry,
1515 &wl_output_interface,
1516 (global->version > 2)? 2 : global->version);
1517 wl_output_add_listener(wlOutput, &_e_test_output_listener, NULL);
1523 wl_output_destroy(wlOutput);
1529 EINA_SAFETY_ON_NULL_GOTO(tzPolicy, err);
1530 EINA_SAFETY_ON_NULL_GOTO(tzSurface, err);
1531 EINA_SAFETY_ON_NULL_GOTO(tzlaunch_effect, err);
1533 eina_iterator_free(globals);
1538 eina_iterator_free(globals);
1542 /* callbacks - method */
1544 _cb_method_win_info_get(void *data,
1545 const Eldbus_Message *msg,
1548 const char *name = NULL, *text = NULL, *wname = NULL;
1550 Eina_Bool res = EINA_FALSE;
1554 res = eldbus_message_error_get(msg, &name, &text);
1555 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1557 res = eldbus_message_arguments_get
1562 &tw->x, &tw->y, &tw->w, &tw->h,
1578 // change window name from char * to Eina_Stringshare
1580 eina_stringshare_del(tw->name);
1581 tw->name = eina_stringshare_add(wname);
1585 if ((name) || (text))
1587 ERR("errname:%s errmsg:%s\n", name, text);
1590 etRunner::get().finishWork();
1594 _cb_method_win_info_list_get(void *data,
1595 const Eldbus_Message *msg,
1598 const char *name = NULL, *text = NULL, *wname = NULL;
1599 Eldbus_Message_Iter *array = NULL, *ec = NULL;
1600 Window_Info_List *info_list = (Window_Info_List *)data;
1601 Eina_Bool res = EINA_FALSE, animating = EINA_FALSE;
1603 if (info_list == NULL)
1606 res = eldbus_message_error_get(msg, &name, &text);
1607 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1609 res = eldbus_message_arguments_get(msg, "a(" E_TC_SIGN_WIN_INFO ")", &array);
1610 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1612 while (eldbus_message_iter_get_and_next(array, 'r', &ec))
1614 etWin *tw = new etWin();
1617 res = eldbus_message_iter_arguments_get(
1622 &tw->x, &tw->y, &tw->w, &tw->h,
1638 // change name to eina_stringshare
1641 WRN("Failed to get win info\n");
1645 tw->name = eina_stringshare_add(wname);
1649 animating = EINA_TRUE;
1653 WRN("Failed to get win info\n");
1658 info_list->list = eina_list_append(info_list->list, tw);
1662 info_list->retry = EINA_TRUE;
1665 if ((name) || (text))
1667 ERR("errname:%s errmsg:%s\n", name, text);
1670 etRunner::get().finishWork();
1674 _cb_method_window_register(void *data,
1675 const Eldbus_Message *msg,
1678 const char *name = NULL, *text = NULL;
1679 Eina_Bool res = EINA_FALSE;
1680 Eina_Bool *accepted = (Eina_Bool *)data;
1682 *accepted = EINA_FALSE;
1684 res = eldbus_message_error_get(msg, &name, &text);
1685 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1687 res = eldbus_message_arguments_get(msg, "b", accepted);
1690 if ((name) || (text))
1692 ERR("errname: %s errmsg: %s\n", name, text);
1695 etRunner::get().finishWork();
1699 _cb_method_zone_rotation_change(void *data,
1700 const Eldbus_Message *msg,
1703 const char *name = NULL, *text = NULL;
1704 Eina_Bool res = EINA_FALSE;
1705 Eina_Bool *allowed = (Eina_Bool *)data;
1707 *allowed = EINA_FALSE;
1709 res = eldbus_message_error_get(msg, &name, &text);
1710 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1712 res = eldbus_message_arguments_get(msg, "b", allowed);
1713 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1714 EINA_SAFETY_ON_FALSE_GOTO(*allowed, finish);
1717 if ((name) || (text))
1719 ERR("errname: %s errmsg: %s\n", name, text);
1722 etRunner::get().finishWork();
1726 _cb_method_window_effect(void *data,
1727 const Eldbus_Message *msg,
1730 const char *name = NULL, *text = NULL;
1731 Eina_Bool res = EINA_FALSE;
1732 Eina_Bool *allowed = (Eina_Bool *)data;
1734 *allowed = EINA_FALSE;
1736 res = eldbus_message_error_get(msg, &name, &text);
1737 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1739 res = eldbus_message_arguments_get(msg, "b", allowed);
1740 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1741 EINA_SAFETY_ON_FALSE_GOTO(*allowed, finish);
1744 if ((name) || (text))
1746 ERR("errname: %s errmsg: %s\n", name, text);
1749 etRunner::get().finishWork();
1753 _cb_method_set_tc_start_end(void *data,
1754 const Eldbus_Message *msg,
1757 const char *name = NULL, *text = NULL;
1758 Eina_Bool res = EINA_FALSE;
1759 Eina_Bool *accept = (Eina_Bool *)data;
1761 *accept = EINA_FALSE;
1763 res = eldbus_message_error_get(msg, &name, &text);
1764 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1766 res = eldbus_message_arguments_get(msg, "b", accept);
1767 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1768 EINA_SAFETY_ON_FALSE_GOTO(*accept, finish);
1771 if ((name) || (text))
1773 ERR("errname: %s errmsg: %s\n", name, text);
1776 etRunner::get().finishWork();
1780 _cb_method_transient_for_below(void *data,
1781 const Eldbus_Message *msg,
1784 const char *name = NULL, *text = NULL;
1785 Eina_Bool res = EINA_FALSE;
1786 Eina_Bool *accept = (Eina_Bool *)data;
1788 *accept = EINA_FALSE;
1790 res = eldbus_message_error_get(msg, &name, &text);
1791 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1793 res = eldbus_message_arguments_get(msg, "b", accept);
1794 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1795 EINA_SAFETY_ON_FALSE_GOTO(*accept, finish);
1798 if ((name) || (text))
1800 ERR("errname: %s errmsg: %s\n", name, text);
1803 etRunner::get().finishWork();
1806 /* callbacks - signal */
1808 _cb_signal_vis_changed(void *data,
1809 const Eldbus_Message *msg)
1811 etRunner *runner = (etRunner *)data;
1812 const char *name = NULL, *text = NULL;
1813 Eina_Bool res = EINA_FALSE;
1817 res = eldbus_message_error_get(msg, &name, &text);
1818 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1820 res = eldbus_message_arguments_get(msg, "ub", &id, &vis);
1821 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1823 runner->insertEventQueue(id, E_TC_EVENT_TYPE_VIS_CHANGED);
1826 if ((name) || (text))
1828 ERR("errname:%s errmsg:%s\n", name, text);
1833 _cb_signal_stack_changed(void *data,
1834 const Eldbus_Message *msg)
1836 etRunner *runner = (etRunner *)data;
1837 const char *name = NULL, *text = NULL;
1838 Eina_Bool res = EINA_FALSE;
1839 Ecore_Window id = 0;
1841 res = eldbus_message_error_get(msg, &name, &text);
1842 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1844 res = eldbus_message_arguments_get(msg, "u", &id);
1845 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1847 runner->insertEventQueue(id, E_TC_EVENT_TYPE_STACK_CHANGED);
1850 if ((name) || (text))
1852 ERR("errname:%s errmsg:%s\n", name, text);
1857 _cb_signal_win_rot_changed(void *data,
1858 const Eldbus_Message *msg)
1860 etRunner *runner = (etRunner *)data;
1861 const char *name = NULL, *text = NULL;
1862 Eina_Bool res = EINA_FALSE;
1866 res = eldbus_message_error_get(msg, &name, &text);
1867 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1869 /* TODO unused 'window id' and 'angle' */
1870 res = eldbus_message_arguments_get(msg, "ui", &id, &angle);
1871 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1873 runner->insertEventQueue(id, E_TC_EVENT_TYPE_WINDOW_ROTATION_CHANGE);
1876 if ((name) || (text))
1878 ERR("errname:%s errmsg:%s\n", name, text);
1883 _cb_signal_focus_changed(void *data,
1884 const Eldbus_Message *msg)
1886 etRunner *runner = (etRunner *)data;
1887 const char *name = NULL, *text = NULL;
1888 Eina_Bool res = EINA_FALSE;
1889 Ecore_Window id = 0;
1891 res = eldbus_message_error_get(msg, &name, &text);
1892 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1894 res = eldbus_message_arguments_get(msg, "u", &id);
1895 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1897 runner->insertEventQueue(id, E_TC_EVENT_TYPE_FOCUS_CHANGED);
1900 if ((name) || (text))
1902 ERR("errname:%s errmsg:%s\n", name, text);
1907 _cb_signal_render_while_effect_run(void *data,
1908 const Eldbus_Message *msg)
1910 etRunner *runner = (etRunner *)data;
1911 const char *name = NULL, *text = NULL;
1912 Eina_Bool res = EINA_FALSE;
1913 Ecore_Window id = 0;
1915 res = eldbus_message_error_get(msg, &name, &text);
1916 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1918 res = eldbus_message_arguments_get(msg, "u", &id);
1919 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1921 runner->insertEventQueue(id, E_TC_EVENT_TYPE_EFFECT);
1924 if ((name) || (text))
1926 ERR("errname:%s errmsg:%s\n", name, text);
1930 /* callbacks - timer */
1932 _cb_work_timeout(void *data)
1934 etRunner::get().finishWork();
1935 return ECORE_CALLBACK_CANCEL;
1938 /* callbacks - ecore */
1940 _cb_ecore_key_down(void *data, int type, void *event)
1942 Ecore_Event_Key *ev = (Ecore_Event_Key *)event;
1943 etRunner *runner = (etRunner *)data;
1945 if (runner->ev.key.name == NULL) return ECORE_CALLBACK_PASS_ON;
1947 if (!strncmp(runner->ev.key.name, ev->keyname, strlen(ev->keyname)))
1949 if (runner->ev.key.ecore_state == EINA_FALSE &&
1950 type == ECORE_EVENT_KEY_DOWN)
1952 runner->ev.key.ecore_state = EINA_TRUE;
1956 return ECORE_CALLBACK_PASS_ON;
1960 _cb_ecore_key_up(void *data, int type, void *event)
1962 Ecore_Event_Key *ev = (Ecore_Event_Key *)event;
1963 etRunner *runner = (etRunner *)data;
1965 if (runner->ev.key.name == NULL) return ECORE_CALLBACK_PASS_ON;
1967 if (!strncmp(runner->ev.key.name, ev->keyname, strlen(ev->keyname)))
1969 if (runner->ev.key.ecore_state == EINA_TRUE &&
1970 type == ECORE_EVENT_KEY_UP)
1972 runner->ev.key.ecore_state = EINA_FALSE;
1973 runner->insertEventQueue(0, E_TC_EVENT_TYPE_INPUT_ECORE_KEY);
1977 return ECORE_CALLBACK_PASS_ON;
1980 /* callbacks - evas */
1982 _cb_evas_key_down(void *data, Evas * evas, Evas_Object * obj, void * event_info)
1984 Evas_Event_Key_Down *ev;
1985 etRunner *runner = (etRunner *)data;
1987 ev = (Evas_Event_Key_Down *)event_info;
1989 if (!strncmp(runner->ev.key.name, ev->keyname, strlen(ev->keyname)))
1991 if (runner->ev.key.evas_state == EINA_FALSE &&
1992 runner->ev.elm_win == obj)
1994 runner->ev.key.evas_state = EINA_TRUE;
2000 _cb_evas_key_up(void * data, Evas * evas, Evas_Object * obj, void * event_info)
2002 Evas_Event_Key_Up *ev;
2003 etRunner *runner = (etRunner *)data;
2005 ev = (Evas_Event_Key_Up *)event_info;
2007 if (!strncmp(runner->ev.key.name, ev->keyname, strlen(ev->keyname)))
2009 if (runner->ev.key.evas_state == EINA_TRUE &&
2010 runner->ev.elm_win == obj)
2012 runner->ev.key.evas_state = EINA_FALSE;
2013 runner->ev.elm_win = NULL;
2015 runner->insertEventQueue(runner->ev.native_win, E_TC_EVENT_TYPE_INPUT_EVAS_KEY);
2020 /* callbacks - smart object */
2022 _cb_evas_smart_cb_effect_started(void *data, Evas_Object * obj, void *event_info)
2024 etRunner *runner = (etRunner *)data;
2025 if (runner && runner->ev.elm_win == obj)
2027 runner->ev.effect.state_smcb = E_TC_EVAS_SMART_CB_STATE_EFFECT_STARTED;
2032 _cb_evas_smart_cb_effect_done(void *data, Evas_Object * obj, void *event_info)
2034 etRunner *runner = (etRunner *)data;
2035 if (runner && runner->ev.elm_win == obj)
2037 runner->ev.effect.state_smcb |= E_TC_EVAS_SMART_CB_STATE_EFFECT_DONE;
2039 runner->insertEventQueue(runner->ev.native_win, E_TC_EVENT_TYPE_EFFECT_EVAS_CB);
2041 evas_object_smart_callback_del(runner->ev.elm_win, effect_started, _cb_evas_smart_cb_effect_started);
2042 evas_object_smart_callback_del(runner->ev.elm_win, effect_done, _cb_evas_smart_cb_effect_done);
2043 evas_object_smart_callback_del(runner->ev.elm_win, launch_done, _cb_evas_smart_cb_launch_done);
2048 _cb_evas_smart_cb_launch_done(void *data, Evas_Object * obj, void *event_info)
2050 etRunner *runner = (etRunner *)data;
2051 if (runner && runner->ev.elm_win == obj)
2053 runner->ev.effect.state_smcb |= E_TC_EVAS_SMART_CB_STATE_LAUNCH_DONE;
2055 if((runner->ev.effect.state_smcb & E_TC_EVAS_SMART_CB_STATE_EFFECT_STARTED) &&
2056 (runner->ev.effect.state_smcb & E_TC_EVAS_SMART_CB_STATE_EFFECT_DONE) &&
2057 (runner->ev.effect.state_smcb & E_TC_EVAS_SMART_CB_STATE_LAUNCH_DONE))
2059 runner->insertEventQueue(runner->ev.native_win, E_TC_EVENT_TYPE_EFFECT_EVAS_CB);
2061 evas_object_smart_callback_del(runner->ev.elm_win, effect_started, _cb_evas_smart_cb_effect_started);
2062 evas_object_smart_callback_del(runner->ev.elm_win, effect_done, _cb_evas_smart_cb_effect_done);
2063 evas_object_smart_callback_del(runner->ev.elm_win, launch_done, _cb_evas_smart_cb_launch_done);
2069 _cb_gesture_tap(void *data, int type, void *event)
2071 etRunner *runner = (etRunner *)data;
2072 efl_util_event_gesture_tap_s *ev =
2073 (efl_util_event_gesture_tap_s *)event;
2075 if ((ev->fingers == (unsigned int)runner->ev.gesture.tap.fingers) &&
2076 (ev->repeats == (unsigned int)runner->ev.gesture.tap.repeats))
2078 runner->insertEventQueue(0, E_TC_EVENT_TYPE_GESTURE_TAP);
2079 //ecore_event_handler_del(runner->ev.key.eh);
2082 return ECORE_CALLBACK_PASS_ON;
2086 _cb_gesture_tap_delay_timer(void *data)
2088 etRunner *runner = (etRunner *)data;
2091 for (i = 0; i < runner->ev.gesture.tap.fingers; i++)
2093 if (!runner->ev.gesture.tap.pressed)
2095 runner->generateTouchDown(i, 100 * (i + 1), 100 * (i + 1));
2099 runner->generateTouchUp(i, 100 * (i + 1), 100 * (i + 1));
2103 runner->ev.gesture.timer = NULL;
2105 runner->ev.gesture.tap.pressed = !runner->ev.gesture.tap.pressed;
2106 if (!runner->ev.gesture.tap.pressed)
2108 runner->ev.gesture.tap.current_repeats--;
2111 if (runner->ev.gesture.tap.current_repeats > 0)
2113 runner->ev.gesture.timer = ecore_timer_add(0.11,
2114 _cb_gesture_tap_delay_timer,
2118 return ECORE_CALLBACK_CANCEL;
2122 etRunner::generateTapGesture()
2124 ev.gesture.tap.current_repeats = ev.gesture.tap.repeats;
2125 ev.gesture.tap.pressed = EINA_FALSE;
2127 ev.gesture.timer = ecore_timer_add(0.11,
2128 _cb_gesture_tap_delay_timer,
2135 _cb_gesture_edge_swipe(void *data, int type, void *event)
2137 etRunner *runner = (etRunner *)data;
2138 efl_util_event_gesture_edge_swipe_s *ev =
2139 (efl_util_event_gesture_edge_swipe_s *)event;
2141 if ((ev->fingers == (unsigned int)runner->ev.gesture.edge.fingers) &&
2142 (ev->edge == (unsigned int)runner->ev.gesture.edge.edge))
2144 if (runner->ev.gesture.timer)
2145 runner->ev.gesture.edge.get_event = EINA_TRUE;
2148 return ECORE_CALLBACK_PASS_ON;
2152 _cb_gesture_edge_swipe_delay_timer(void *data)
2154 etRunner *runner = (etRunner *)data;
2155 int i, cnt, fingers, w, h;
2156 efl_util_gesture_edge_e edge;
2158 cnt = ++runner->ev.gesture.edge.touch_count;
2159 fingers = runner->ev.gesture.edge.fingers;
2160 edge = runner->ev.gesture.edge.edge;
2161 w = runner->output.w - 1;
2162 h = runner->output.h - 1;
2166 for (i = 0; i < fingers; i++)
2170 case EFL_UTIL_GESTURE_EDGE_TOP:
2171 runner->generateTouchDown(i, 100 * (i + 1), 1);
2173 case EFL_UTIL_GESTURE_EDGE_RIGHT:
2174 runner->generateTouchDown(i, w - 1, 100 * (i + 1));
2176 case EFL_UTIL_GESTURE_EDGE_BOTTOM:
2177 runner->generateTouchDown(i, 100 * (i + 1), h - 1);
2179 case EFL_UTIL_GESTURE_EDGE_LEFT:
2180 runner->generateTouchDown(i, 1, 100 * (i + 1));
2189 for (i = 0; i < fingers; i++)
2193 case EFL_UTIL_GESTURE_EDGE_TOP:
2194 runner->generateTouchMove(i, 100 * (i + 1), 40 * cnt * cnt);
2196 case EFL_UTIL_GESTURE_EDGE_RIGHT:
2197 runner->generateTouchMove(i, (w - 1) - (40 * cnt * cnt), 100 * (i + 1));
2199 case EFL_UTIL_GESTURE_EDGE_BOTTOM:
2200 runner->generateTouchMove(i, 100 * (i + 1), (h - 1) - (40 * cnt * cnt));
2202 case EFL_UTIL_GESTURE_EDGE_LEFT:
2203 runner->generateTouchMove(i, 40 * cnt * cnt, 100 * (i + 1));
2213 for (i = 0; i < fingers; i++)
2217 case EFL_UTIL_GESTURE_EDGE_TOP:
2218 runner->generateTouchUp(i, 100 * (i + 1), 40 * cnt * cnt);
2220 case EFL_UTIL_GESTURE_EDGE_RIGHT:
2221 runner->generateTouchUp(i, (w - 1) - (40 * cnt * cnt), 100 * (i + 1));
2223 case EFL_UTIL_GESTURE_EDGE_BOTTOM:
2224 runner->generateTouchUp(i, 100 * (i + 1), (h - 1) - (40 * cnt * cnt));
2226 case EFL_UTIL_GESTURE_EDGE_LEFT:
2227 runner->generateTouchUp(i, 40 * cnt * cnt, 100 * (i + 1));
2234 runner->ev.gesture.timer = NULL;
2235 if (runner->ev.gesture.edge.get_event)
2237 runner->insertEventQueue(0, E_TC_EVENT_TYPE_GESTURE_EDGE_SWIPE);
2238 //ecore_event_handler_del(runner->ev.key.eh);
2240 return ECORE_CALLBACK_CANCEL;
2243 runner->ev.gesture.timer = NULL;
2244 runner->ev.gesture.timer = ecore_timer_add(0.11,
2245 _cb_gesture_edge_swipe_delay_timer,
2248 return ECORE_CALLBACK_CANCEL;
2252 etRunner::generateEdgeSwipeGesture()
2254 ev.gesture.edge.touch_count = 0;
2255 ev.gesture.edge.get_event = EINA_FALSE;
2257 ev.gesture.timer = ecore_timer_add(0.11,
2258 _cb_gesture_edge_swipe_delay_timer,
2265 _cb_gesture_edge_drag(void *data, int type, void *event)
2267 etRunner *runner = (etRunner *)data;
2268 efl_util_event_gesture_edge_drag_s *ev =
2269 (efl_util_event_gesture_edge_drag_s *)event;
2271 if ((ev->fingers == (unsigned int)runner->ev.gesture.edge.fingers) &&
2272 (ev->edge == (unsigned int)runner->ev.gesture.edge.edge) &&
2273 (ev->mode == EFL_UTIL_GESTURE_MODE_END))
2275 runner->insertEventQueue(0, E_TC_EVENT_TYPE_GESTURE_EDGE_DRAG);
2276 //ecore_event_handler_del(runner->ev.key.eh);
2279 return ECORE_CALLBACK_PASS_ON;
2283 _cb_gesture_edge_drag_delay_timer(void *data)
2285 etRunner *runner = (etRunner *)data;
2286 int i, cnt, fingers, w, h;
2287 efl_util_gesture_edge_e edge;
2289 cnt = ++runner->ev.gesture.edge.touch_count;
2290 fingers = runner->ev.gesture.edge.fingers;
2291 edge = runner->ev.gesture.edge.edge;
2292 w = runner->output.w - 1;
2293 h = runner->output.h - 1;
2297 for (i = 0; i < fingers; i++)
2301 case EFL_UTIL_GESTURE_EDGE_TOP:
2302 runner->generateTouchDown(i, 100 * (i + 1), 1);
2304 case EFL_UTIL_GESTURE_EDGE_RIGHT:
2305 runner->generateTouchDown(i, w - 1, 100 * (i + 1));
2307 case EFL_UTIL_GESTURE_EDGE_BOTTOM:
2308 runner->generateTouchDown(i, 100 * (i + 1), h - 1);
2310 case EFL_UTIL_GESTURE_EDGE_LEFT:
2311 runner->generateTouchDown(i, 1, 100 * (i + 1));
2320 for (i = 0; i < fingers; i++)
2324 case EFL_UTIL_GESTURE_EDGE_TOP:
2325 runner->generateTouchMove(i, 100 * (i + 1), 50 * cnt);
2327 case EFL_UTIL_GESTURE_EDGE_RIGHT:
2328 runner->generateTouchMove(i, (w - 1) - (50 * cnt), 100 * (i + 1));
2330 case EFL_UTIL_GESTURE_EDGE_BOTTOM:
2331 runner->generateTouchMove(i, 100 * (i + 1), (h - 1) - (50 * cnt));
2333 case EFL_UTIL_GESTURE_EDGE_LEFT:
2334 runner->generateTouchMove(i, 50 * cnt, 100 * (i + 1));
2344 for (i = 0; i < fingers; i++)
2348 case EFL_UTIL_GESTURE_EDGE_TOP:
2349 runner->generateTouchUp(i, 100 * (i + 1), 50 * cnt);
2351 case EFL_UTIL_GESTURE_EDGE_RIGHT:
2352 runner->generateTouchUp(i, (w - 1) - (50 * cnt), 100 * (i + 1));
2354 case EFL_UTIL_GESTURE_EDGE_BOTTOM:
2355 runner->generateTouchUp(i, 100 * (i + 1), (h - 1) - (50 * cnt));
2357 case EFL_UTIL_GESTURE_EDGE_LEFT:
2358 runner->generateTouchUp(i, 50 * cnt, 100 * (i + 1));
2365 runner->ev.gesture.timer = NULL;
2366 return ECORE_CALLBACK_CANCEL;
2369 runner->ev.gesture.timer = NULL;
2370 runner->ev.gesture.timer = ecore_timer_add(0.11,
2371 _cb_gesture_edge_drag_delay_timer,
2374 return ECORE_CALLBACK_CANCEL;
2378 etRunner::generateEdgeDragGesture()
2380 ev.gesture.edge.touch_count = 0;
2382 ev.gesture.timer = ecore_timer_add(0.11,
2383 _cb_gesture_edge_drag_delay_timer,