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);
77 /* callbacks - signal */
78 static void _cb_signal_vis_changed(void *data, const Eldbus_Message *msg);
79 static void _cb_signal_stack_changed(void *data, const Eldbus_Message *msg);
80 static void _cb_signal_win_rot_changed(void *data, const Eldbus_Message *msg);
81 static void _cb_signal_focus_changed(void *data, const Eldbus_Message *msg);
82 static void _cb_signal_render_while_effect_run(void *data, const Eldbus_Message *msg);
84 /* callbacks - ecore */
85 static Eina_Bool _cb_ecore_key_down(void *data, int type, void *event);
86 static Eina_Bool _cb_ecore_key_up(void *data, int type, void *event);
88 /* callbacks - evas */
89 static void _cb_evas_key_down(void * data, Evas * evas, Evas_Object * obj, void * event_info);
90 static void _cb_evas_key_up(void * data, Evas * evas, Evas_Object * obj, void * event_info);
92 /* callbacks - smart */
93 static void _cb_evas_smart_cb_effect_started(void *data, Evas_Object * obj, void *event_info);
94 static void _cb_evas_smart_cb_effect_done(void *data, Evas_Object * obj, void *event_info);
95 static void _cb_evas_smart_cb_launch_done(void *data, Evas_Object * obj, void *event_info);
97 /* callbacks - timer */
98 static Eina_Bool _cb_work_timeout(void *data);
100 /* callbacks - gesture */
101 static Eina_Bool _cb_gesture_tap(void *data, int type, void *event);
102 static Eina_Bool _cb_gesture_edge_swipe(void *data, int type, void *event);
103 static Eina_Bool _cb_gesture_edge_drag(void *data, int type, void *event);
105 /**********************
107 **********************/
108 static const struct tizen_resource_listener _e_test_tizen_resource_listener =
113 static const struct wl_output_listener _e_test_output_listener =
121 /**********************
123 **********************/
124 etRunner etRunner::inst;
129 Eina_Bool res = EINA_FALSE;
131 worker.waitTime = E_TEST_WORK_TIME;
133 logDomain = eina_log_domain_register("e-tc", EINA_COLOR_BLUE);
136 if (!ecore_wl2_connected_display_get(NULL))
137 ecore_wl2_display_connect(NULL);
139 // init tizen_extension protocol
140 res = initProtocols();
141 EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE);
146 dbus.conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SYSTEM);
147 EINA_SAFETY_ON_NULL_RETURN_VAL(dbus.conn, EINA_FALSE);
149 dbus.ds_obj = eldbus_object_get(dbus.conn,
150 "org.enlightenment.wm",
151 "/org/enlightenment/wm");
152 EINA_SAFETY_ON_NULL_RETURN_VAL(dbus.ds_obj, EINA_FALSE);
154 dbus.ds_proxy = eldbus_proxy_get(dbus.ds_obj,
155 "org.enlightenment.wm.Test");
156 EINA_SAFETY_ON_NULL_RETURN_VAL(dbus.ds_proxy, EINA_FALSE);
158 dbus.deviced_obj = eldbus_object_get(dbus.conn,
159 "org.tizen.system.deviced",
160 "/Org/Tizen/System/DeviceD/Display");
161 EINA_SAFETY_ON_NULL_RETURN_VAL(dbus.deviced_obj, EINA_FALSE);
163 dbus.deviced_proxy = eldbus_proxy_get(dbus.deviced_obj,
164 "org.tizen.system.deviced.display");
165 EINA_SAFETY_ON_NULL_RETURN_VAL(dbus.deviced_proxy, EINA_FALSE);
167 // reset registered window of e_test_helper
168 res = resetRegisterWin();
169 EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE);
171 // init input generator
172 inputGenerator = efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN | EFL_UTIL_INPUT_DEVTYPE_KEYBOARD, NULL);
173 EINA_SAFETY_ON_NULL_RETURN_VAL(inputGenerator, EINA_FALSE);
175 // init gesture handler
176 gestureHandler = efl_util_gesture_initialize();
177 EINA_SAFETY_ON_NULL_RETURN_VAL(gestureHandler, EINA_FALSE);
179 // add signal handlers
180 res = addSignalHandlers();
181 EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE);
189 eina_log_domain_unregister(logDomain);
191 freeLastWinInfoList();
194 // deinit tizen_extension protocol
197 tizen_policy_destroy(tzPolicy);
203 tizen_surface_destroy(tzSurface);
209 tizen_launch_splash_destroy(tzlaunch_splash);
210 tzlaunch_splash = NULL;
215 tizen_launch_effect_destroy(tzlaunch_effect);
216 tzlaunch_effect = NULL;
220 eldbus_proxy_unref(dbus.deviced_proxy);
221 eldbus_object_unref(dbus.deviced_obj);
222 eldbus_proxy_unref(dbus.ds_proxy);
223 eldbus_object_unref(dbus.ds_obj);
224 eldbus_connection_unref(dbus.conn);
227 // deinit input generator
228 efl_util_input_deinitialize_generator(inputGenerator);
230 // deinit gesture handler
231 efl_util_gesture_deinitialize(gestureHandler);
235 etRunner::registerWin(etWin *tw)
237 Eldbus_Pending *p = NULL;
238 Eina_Bool accepted = EINA_FALSE;
240 p = eldbus_proxy_call(dbus.ds_proxy,
242 _cb_method_window_register,
247 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
255 etRunner::deregisterWin(etWin *tw)
257 Eldbus_Pending *p = NULL;
258 Eina_Bool accepted = EINA_FALSE;
260 p = eldbus_proxy_call(dbus.ds_proxy,
262 _cb_method_window_register,
267 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
275 etRunner::resetRegisterWin()
277 Eldbus_Pending *p = NULL;
278 Eina_Bool accepted = EINA_FALSE;
280 p = eldbus_proxy_call(dbus.ds_proxy,
281 "ResetRegisterWindow",
282 _cb_method_window_register,
286 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
294 etRunner::setWinActivate(etWin *tw)
296 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
298 tw->updateGeometry();
300 tizen_policy_activate(tzPolicy,
301 getWlSurface(tw->elm_win));
307 etRunner::requestKillWinByName(const char *name)
309 Eldbus_Pending *p = NULL;
311 EINA_SAFETY_ON_NULL_RETURN_VAL(name, EINA_FALSE);
313 p = eldbus_proxy_call(dbus.ds_proxy,
320 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
326 etRunner::setWinIconic(etWin *tw,
329 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
332 tizen_policy_iconify(tzPolicy,
333 getWlSurface(tw->elm_win));
335 tizen_policy_uniconify(tzPolicy,
336 getWlSurface(tw->elm_win));
342 etRunner::setWinStack(etWin *tw,
346 Eldbus_Pending *p = NULL;
347 p = eldbus_proxy_call(dbus.ds_proxy,
354 sibiling? sibiling->native_win : 0,
356 EINA_SAFETY_ON_TRUE_RETURN_VAL(p != NULL, EINA_FALSE);
362 etRunner::setWinRaise(etWin *tw)
364 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
366 tizen_policy_raise(tzPolicy, getWlSurface(tw->elm_win));
372 etRunner::setWinLower(etWin *tw)
374 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
376 tizen_policy_lower(tzPolicy, getWlSurface(tw->elm_win));
382 etRunner::setWinTransientFor(etWin *tw_child,
386 EINA_SAFETY_ON_NULL_RETURN_VAL(tw_child, EINA_FALSE);
389 tizen_policy_set_transient_for(tzPolicy,
390 tw_child->native_win,
391 tw_parent->native_win);
393 tizen_policy_unset_transient_for(tzPolicy,
394 tw_child->native_win);
400 etRunner::setWinNotiLevel(etWin *tw,
401 efl_util_notification_level_e lv)
403 Eina_Bool res = EINA_FALSE;
405 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
407 res = efl_util_set_notification_window_level(tw->elm_win, lv);
408 EINA_SAFETY_ON_FALSE_RETURN_VAL(res == EFL_UTIL_ERROR_NONE, EINA_FALSE);
413 efl_util_notification_level_e
414 etRunner::getWinNotiLevel(etWin *tw)
416 Eina_Bool res = EINA_FALSE;
417 efl_util_notification_level_e lv = EFL_UTIL_NOTIFICATION_LEVEL_NONE;
419 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EFL_UTIL_NOTIFICATION_LEVEL_NONE);
421 res = efl_util_get_notification_window_level(tw->elm_win, &lv);
422 EINA_SAFETY_ON_FALSE_RETURN_VAL(res == EFL_UTIL_ERROR_NONE, EFL_UTIL_NOTIFICATION_LEVEL_NONE);
428 etRunner::setFocusSkip(etWin *tw, Eina_Bool set)
430 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
433 tizen_policy_set_focus_skip(tzPolicy,
434 getWlSurface(tw->elm_win));
436 tizen_policy_unset_focus_skip(tzPolicy,
437 getWlSurface(tw->elm_win));
443 etRunner::setFocusSkipEcoreWl2(etWin *tw, Eina_Bool set)
445 Ecore_Wl2_Window *wlwin = NULL;
447 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
449 wlwin = (Ecore_Wl2_Window *)elm_win_wl_window_get(tw->elm_win);
450 EINA_SAFETY_ON_NULL_RETURN_VAL(wlwin, EINA_FALSE);
452 ecore_wl2_window_focus_skip_set(wlwin, set);
458 etRunner::setZoneRotation(int angle)
460 Eldbus_Pending *p = NULL;
461 Eina_Bool allowed = EINA_FALSE;
463 p = eldbus_proxy_call(dbus.ds_proxy,
464 "ChangeZoneRotation",
465 _cb_method_zone_rotation_change,
470 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
478 etRunner::setTCStart()
480 Eldbus_Pending *p = NULL;
481 Eina_Bool res = EINA_FALSE;
483 p = eldbus_proxy_call(dbus.ds_proxy,
485 _cb_method_set_tc_start_end,
489 EINA_SAFETY_ON_NULL_GOTO(p, err);
493 EINA_SAFETY_ON_FALSE_GOTO(res, err);
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 if (p == NULL) res = EINA_FALSE;
518 EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE);
524 etRunner::getWinInfo(etWin *tw)
526 Eldbus_Pending *p = NULL;
530 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
532 win = tw->native_win;
537 p = eldbus_proxy_call(dbus.ds_proxy,
539 _cb_method_win_info_get,
544 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
548 if ((tw->native_win == win) && (!tw->effect))
554 if (tw->native_win != win)
556 ERR("Something Wrong. Difference with quering window"
557 "and received window from server");
558 tw->native_win = win;
565 etRunner::getWinInfoList()
567 Eldbus_Pending *p = NULL;
568 Window_Info_List *info_list = NULL;
570 Eina_List *result = NULL;
572 info_list = E_NEW(Window_Info_List, 1);
573 EINA_SAFETY_ON_NULL_RETURN_VAL(info_list, NULL);
577 p = eldbus_proxy_call(dbus.ds_proxy,
579 _cb_method_win_info_list_get,
583 EINA_SAFETY_ON_NULL_RETURN_VAL(p, NULL);
587 if (info_list->retry)
589 info_list->retry = EINA_FALSE;
590 EINA_LIST_CAST_FREE(info_list->list, tw, etWin*)
602 result = eina_list_clone(info_list->list);
605 freeLastWinInfoList();
606 listWinInfo = result;
612 etRunner::freeWinInfoList(Eina_List *list)
616 EINA_SAFETY_ON_NULL_RETURN(list);
618 if (listWinInfo == list)
621 EINA_LIST_CAST_FREE(list, tw, etWin*)
631 etRunner::freeLastWinInfoList()
634 freeWinInfoList(listWinInfo);
640 etRunner::setLastWinInfoList(Eina_List *list)
642 EINA_SAFETY_ON_NULL_RETURN(list);
644 freeLastWinInfoList();
650 etRunner::getWinId(Evas_Object *elm_win)
652 struct wl_surface *surf = NULL;
654 struct tizen_resource *tzres = NULL;
656 surf = getWlSurface(elm_win);
657 EINA_SAFETY_ON_NULL_RETURN_VAL(surf, 0);
659 tzres = tizen_surface_get_tizen_resource(tzSurface, surf);
660 EINA_SAFETY_ON_NULL_RETURN_VAL(tzres, 0);
662 tizen_resource_add_listener(tzres,
663 &_e_test_tizen_resource_listener, &id);
667 tizen_resource_destroy(tzres);
673 etRunner::getWlSurface(Evas_Object *elm_win)
675 Ecore_Wl2_Window *wlwin = NULL;
676 struct wl_surface *surf = NULL;
678 EINA_SAFETY_ON_NULL_RETURN_VAL(elm_win, NULL);
680 wlwin = (Ecore_Wl2_Window *)elm_win_wl_window_get(elm_win);
681 EINA_SAFETY_ON_NULL_RETURN_VAL(wlwin, NULL);
683 surf = ecore_wl2_window_surface_get(wlwin);
684 EINA_SAFETY_ON_NULL_RETURN_VAL(surf, NULL);
690 etRunner::setDpms(Eina_Bool on)
692 Eldbus_Pending *p = NULL;
693 p = eldbus_proxy_call(dbus.ds_proxy,
700 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
705 etRunner::setDevctlDisplayLock(Eina_Bool lock)
707 Eldbus_Pending *p = NULL;
711 p = eldbus_proxy_call(dbus.deviced_proxy,
724 p = eldbus_proxy_call(dbus.deviced_proxy,
733 EINA_SAFETY_ON_TRUE_RETURN_VAL(p != NULL, EINA_FALSE);
739 etRunner::setDevctlDisplayOn(Eina_Bool on)
741 Eldbus_Pending *p = NULL;
743 p = eldbus_proxy_call(dbus.deviced_proxy,
749 on? "lcdon" : "lcdoff");
750 EINA_SAFETY_ON_TRUE_RETURN_VAL(p != NULL, EINA_FALSE);
756 etRunner::feedMouseDown(int x, int y)
758 Eldbus_Pending *p = NULL;
759 p = eldbus_proxy_call(dbus.ds_proxy,
767 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
772 etRunner::feedMouseMove(int x, int y)
774 Eldbus_Pending *p = NULL;
775 p = eldbus_proxy_call(dbus.ds_proxy,
783 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
788 etRunner::feedMouseUp(int x, int y)
790 Eldbus_Pending *p = NULL;
791 p = eldbus_proxy_call(dbus.ds_proxy,
799 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
804 etRunner::feedKeyDown(const char *key)
806 Eldbus_Pending *p = NULL;
807 p = eldbus_proxy_call(dbus.ds_proxy,
815 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
820 etRunner::feedKeyUp(const char *key)
822 Eldbus_Pending *p = NULL;
823 p = eldbus_proxy_call(dbus.ds_proxy,
831 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
836 etRunner::generateMouseDown(int x, int y)
838 // Using efl_util_input_generate instead of generate event by eldbus
839 int ret = EFL_UTIL_ERROR_NONE;
841 if (inputGenerator == NULL)
843 inputGenerator = efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN, NULL);
847 ret = efl_util_input_generate_touch(inputGenerator,
849 EFL_UTIL_INPUT_TOUCH_BEGIN,
851 if (ret != EFL_UTIL_ERROR_NONE)
853 efl_util_input_deinitialize_generator(inputGenerator);
854 inputGenerator = NULL;
862 etRunner::generateMouseMove(int x, int y)
864 // Using efl_util_input_generate instead of generate event by eldbus
865 int ret = EFL_UTIL_ERROR_NONE;
867 if (inputGenerator == NULL)
869 inputGenerator = efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN, NULL);
873 ret = efl_util_input_generate_touch(inputGenerator,
875 EFL_UTIL_INPUT_TOUCH_UPDATE,
877 if (ret != EFL_UTIL_ERROR_NONE)
879 efl_util_input_deinitialize_generator(inputGenerator);
880 inputGenerator = NULL;
888 etRunner::generateMouseUp(int x, int y)
890 // Using efl_util_input_generate instead of generate event by eldbus
891 int ret = EFL_UTIL_ERROR_NONE;
893 if (inputGenerator == NULL)
895 inputGenerator = efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN, NULL);
899 ret = efl_util_input_generate_touch(inputGenerator,
901 EFL_UTIL_INPUT_TOUCH_END,
903 if (ret != EFL_UTIL_ERROR_NONE)
905 efl_util_input_deinitialize_generator(inputGenerator);
906 inputGenerator = NULL;
914 etRunner::generateKeyPress(const char *keyname)
916 // Using efl_util_input_generate instead of generate event by eldbus
917 int ret = EFL_UTIL_ERROR_NONE;
919 if (inputGenerator == NULL)
921 inputGenerator = efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_KEYBOARD, NULL);
925 ret = efl_util_input_generate_key(inputGenerator,
928 if (ret != EFL_UTIL_ERROR_NONE)
930 efl_util_input_deinitialize_generator(inputGenerator);
931 inputGenerator = NULL;
939 etRunner::generateKeyRelease(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::generateKeyEvent(const char *keyname, double delay)
966 Eina_Bool res = EINA_FALSE;
968 res = etRunner::get().generateKeyPress(keyname);
969 EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE);
971 res = etRunner::get().generateKeyRelease(keyname);
972 EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE);
978 etRunner::generateTouchDown(int idx, int x, int y)
980 // Using efl_util_input_generate instead of generate event by eldbus
981 int ret = EFL_UTIL_ERROR_NONE;
983 if (inputGenerator == NULL)
985 inputGenerator = efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN, NULL);
989 ret = efl_util_input_generate_touch(inputGenerator,
991 EFL_UTIL_INPUT_TOUCH_BEGIN,
993 if (ret != EFL_UTIL_ERROR_NONE)
995 efl_util_input_deinitialize_generator(inputGenerator);
996 inputGenerator = NULL;
1004 etRunner::generateTouchMove(int idx, int x, int y)
1006 // Using efl_util_input_generate instead of generate event by eldbus
1007 int ret = EFL_UTIL_ERROR_NONE;
1009 if (inputGenerator == NULL)
1011 inputGenerator = efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN, NULL);
1015 ret = efl_util_input_generate_touch(inputGenerator,
1017 EFL_UTIL_INPUT_TOUCH_UPDATE,
1019 if (ret != EFL_UTIL_ERROR_NONE)
1021 efl_util_input_deinitialize_generator(inputGenerator);
1022 inputGenerator = NULL;
1030 etRunner::generateTouchUp(int idx, int x, int y)
1032 // Using efl_util_input_generate instead of generate event by eldbus
1033 int ret = EFL_UTIL_ERROR_NONE;
1035 if (inputGenerator == NULL)
1037 inputGenerator = efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN, NULL);
1041 ret = efl_util_input_generate_touch(inputGenerator,
1043 EFL_UTIL_INPUT_TOUCH_END,
1045 if (ret != EFL_UTIL_ERROR_NONE)
1047 efl_util_input_deinitialize_generator(inputGenerator);
1048 inputGenerator = NULL;
1056 etRunner::setSplashLaunch(const char *path, int type)
1058 const char *effect_type = "launch";
1059 struct wl_array option;
1061 // init tzlaunch_splash
1062 if (tzlaunch_splash)
1064 tizen_launch_splash_destroy(tzlaunch_splash);
1065 tzlaunch_splash = NULL;
1067 if (tzlaunch_effect) tzlaunch_splash = tizen_launch_effect_create_splash_img(tzlaunch_effect);
1068 EINA_SAFETY_ON_NULL_RETURN_VAL(tzlaunch_splash, EINA_FALSE);
1070 wl_array_init(&option);
1071 tizen_launch_splash_launch(tzlaunch_splash, path, type,
1073 effect_type, NULL, &option);
1074 wl_array_release(&option);
1080 etRunner::setSplashOwner()
1083 EINA_SAFETY_ON_NULL_RETURN_VAL(tzlaunch_splash, EINA_FALSE);
1085 tizen_launch_splash_owner(tzlaunch_splash, (int)getpid());
1091 etRunner::setWinEffect(etWin *tw)
1093 Eldbus_Pending *p = NULL;
1094 Eina_Bool accepted = EINA_FALSE;
1096 this->ev.elm_win = tw->elm_win;
1098 p = eldbus_proxy_call(dbus.ds_proxy,
1100 _cb_method_window_effect,
1106 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
1113 etRunner::freezeEvent()
1115 Eldbus_Pending *p = NULL;
1116 p = eldbus_proxy_call(dbus.ds_proxy,
1123 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
1128 etRunner::thawEvent()
1130 Eldbus_Pending *p = NULL;
1131 p = eldbus_proxy_call(dbus.ds_proxy,
1138 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
1143 etRunner::waitEvent(etWin *win, E_TC_Event_Type ev_type)
1145 E_TC_Event_Item *recv_item = NULL;
1146 Eina_Bool res = EINA_FALSE;
1147 Eina_List *l = NULL;
1152 case E_TC_EVENT_TYPE_VIS_ON:
1153 case E_TC_EVENT_TYPE_VIS_OFF:
1154 case E_TC_EVENT_TYPE_VIS_CHANGED:
1155 ev_type = E_TC_EVENT_TYPE_VIS_CHANGED;
1157 case E_TC_EVENT_TYPE_STACK_RAISE:
1158 case E_TC_EVENT_TYPE_STACK_LOWER:
1159 case E_TC_EVENT_TYPE_STACK_ABOVE:
1160 case E_TC_EVENT_TYPE_STACK_BELOW:
1161 case E_TC_EVENT_TYPE_STACK_CHANGED:
1162 ev_type = E_TC_EVENT_TYPE_STACK_CHANGED;
1168 // Add event callbacks if needs
1169 if (ev_type == E_TC_EVENT_TYPE_EFFECT_EVAS_CB)
1171 ev.elm_win = win->elm_win;
1172 ev.native_win = win->native_win;
1173 ev.effect.state_smcb = E_TC_EVAS_SMART_CB_STATE_NONE;
1175 evas_object_smart_callback_add(this->ev.elm_win, effect_started, _cb_evas_smart_cb_effect_started, this);
1176 evas_object_smart_callback_add(this->ev.elm_win, effect_done, _cb_evas_smart_cb_effect_done, this);
1177 evas_object_smart_callback_add(this->ev.elm_win, launch_done, _cb_evas_smart_cb_launch_done, this);
1179 else if (ev_type == E_TC_EVENT_TYPE_INPUT_EVAS_KEY)
1181 ev.elm_win = win->elm_win;
1182 ev.native_win = win->native_win;
1183 evas_object_event_callback_add(this->ev.elm_win, EVAS_CALLBACK_KEY_DOWN, _cb_evas_key_down, this);
1184 evas_object_event_callback_add(this->ev.elm_win, EVAS_CALLBACK_KEY_UP, _cb_evas_key_up, this);
1186 ev.key.evas_state = EINA_FALSE;
1189 // pre-waiting events
1192 if (ev.wait_event_index == ev.last_event)
1194 work(0.5); // waiting additional time
1195 if (ev.wait_event_index == ev.last_event)
1199 EINA_LIST_CAST_FOREACH(ev.recv_queue, l, recv_item, E_TC_Event_Item*)
1201 if ((recv_item->win == (win?win->native_win:0)) &&
1202 (recv_item->type == ev_type))
1204 ev.wait_event_index = recv_item;
1214 etRunner::flushEventQueue()
1218 ev.recv_queue = eina_list_free(ev.recv_queue);
1219 ev.recv_queue = NULL;
1224 etRunner::insertEventQueue(Ecore_Window id, E_TC_Event_Type ev_type)
1226 E_TC_Event_Item *item = E_NEW(E_TC_Event_Item, 1);
1227 EINA_SAFETY_ON_NULL_RETURN_VAL(item, EINA_FALSE);
1230 item->type = ev_type;
1231 ev.recv_queue = eina_list_append(ev.recv_queue, item);
1232 ev.last_event = item;
1238 etRunner::isEventOccuredAfterCheckpoint(etWin *tw, E_TC_Event_Type ev_type)
1240 Eina_List *l = NULL;
1241 E_TC_Event_Item *item = NULL;
1242 Ecore_Window id = tw->native_win;
1244 EINA_LIST_CAST_FOREACH(ev.recv_queue, l, item, E_TC_Event_Item*)
1246 if (ev.last_checkpoint && ev.last_checkpoint != item)
1249 if ((item->win == id) && (item->type == ev_type))
1257 etRunner::setEventCheckpoint()
1259 ev.last_checkpoint = ev.last_event;
1264 etRunner::addSignalHandlers()
1266 Eldbus_Signal_Handler *sh = NULL;
1267 Ecore_Event_Handler *eh = NULL;
1271 sh = eldbus_proxy_signal_handler_add(dbus.ds_proxy,
1272 "VisibilityChanged",
1273 _cb_signal_vis_changed,
1275 EINA_SAFETY_ON_NULL_GOTO(sh, err);
1276 ev.sh_list = eina_list_append(ev.sh_list, sh);
1278 sh = eldbus_proxy_signal_handler_add(dbus.ds_proxy,
1280 _cb_signal_stack_changed,
1282 EINA_SAFETY_ON_NULL_GOTO(sh, err);
1283 ev.sh_list = eina_list_append(ev.sh_list, sh);
1285 sh = eldbus_proxy_signal_handler_add(dbus.ds_proxy,
1286 "WinRotationChanged",
1287 _cb_signal_win_rot_changed,
1289 EINA_SAFETY_ON_NULL_GOTO(sh, err);
1290 ev.sh_list = eina_list_append(ev.sh_list, sh);
1292 sh = eldbus_proxy_signal_handler_add(dbus.ds_proxy,
1294 _cb_signal_focus_changed,
1296 EINA_SAFETY_ON_NULL_GOTO(sh, err);
1297 ev.sh_list = eina_list_append(ev.sh_list, sh);
1299 sh = eldbus_proxy_signal_handler_add(dbus.ds_proxy,
1301 _cb_signal_render_while_effect_run,
1303 EINA_SAFETY_ON_NULL_GOTO(sh, err);
1304 ev.sh_list = eina_list_append(ev.sh_list, sh);
1306 eh = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _cb_ecore_key_down, this);
1307 EINA_SAFETY_ON_NULL_GOTO(eh, err);
1308 ev.eh_list = eina_list_append(ev.eh_list, eh);
1310 eh = ecore_event_handler_add(ECORE_EVENT_KEY_UP, _cb_ecore_key_up, this);
1311 EINA_SAFETY_ON_NULL_GOTO(eh, err);
1312 ev.eh_list = eina_list_append(ev.eh_list, eh);
1314 eh = ecore_event_handler_add(EFL_UTIL_EVENT_GESTURE_TAP, _cb_gesture_tap, this);
1315 EINA_SAFETY_ON_NULL_GOTO(eh, err);
1316 ev.eh_list = eina_list_append(ev.eh_list, eh);
1318 eh = ecore_event_handler_add(EFL_UTIL_EVENT_GESTURE_EDGE_SWIPE, _cb_gesture_edge_swipe, this);
1319 EINA_SAFETY_ON_NULL_GOTO(eh, err);
1320 ev.eh_list = eina_list_append(ev.eh_list, eh);
1322 eh = ecore_event_handler_add(EFL_UTIL_EVENT_GESTURE_EDGE_DRAG, _cb_gesture_edge_drag, this);
1323 EINA_SAFETY_ON_NULL_GOTO(eh, err);
1324 ev.eh_list = eina_list_append(ev.eh_list, eh);
1326 ev.key.ecore_state = EINA_FALSE;
1331 printf("failed to init handlers\n");
1332 delSignalHandlers();
1337 etRunner::delSignalHandlers()
1339 Eldbus_Signal_Handler *sh = NULL;
1340 Ecore_Event_Handler *eh = NULL;
1342 EINA_LIST_CAST_FREE(ev.sh_list, sh, Eldbus_Signal_Handler*)
1344 eldbus_signal_handler_del(sh);
1347 EINA_LIST_CAST_FREE(ev.eh_list, eh, Ecore_Event_Handler*)
1349 ecore_event_handler_del(eh);
1358 /* give a turn to deal with deferred job for given time*/
1359 addTimer(worker.waitTime);
1364 etRunner::work(double time)
1366 /* give a turn to deal with deferred job for given time*/
1367 if (time < 0.0) time = 0.0;
1374 etRunner::finishWork()
1383 etRunner::printWinInfoList()
1386 Eina_List *l = NULL, *ll = NULL;
1388 printf("--------------------------------------------------------------------------------------------------------------------------\n");
1389 l = getWinInfoList();
1390 EINA_LIST_CAST_FOREACH(l, ll, tw, etWin*)
1392 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",
1394 (unsigned int)tw->native_win,
1396 tw->x, tw->y, tw->w, tw->h,
1408 printf("--------------------------------------------------------------------------------------------------------------------------\n");
1412 etRunner::delTimer()
1414 if (!worker.timer) return;
1416 ecore_timer_del(worker.timer);
1417 worker.timer = NULL;
1421 etRunner::addTimer()
1425 worker.timer = ecore_timer_add(worker.waitTime,
1431 etRunner::addTimer(double time)
1435 worker.timer = ecore_timer_add(time,
1441 etRunner::waitForDestroy()
1443 work(E_TEST_WORK_TIME);
1447 etRunner::initProtocols()
1449 Eina_Iterator *globals = NULL;
1450 Ecore_Wl2_Global *global = NULL;
1451 struct wl_registry *registry = NULL;
1453 registry = ecore_wl2_display_registry_get(ecore_wl2_connected_display_get(NULL));
1454 globals = ecore_wl2_display_globals_get(ecore_wl2_connected_display_get(NULL));
1456 EINA_SAFETY_ON_NULL_GOTO(registry, err);
1457 EINA_SAFETY_ON_NULL_GOTO(globals, err);
1459 EINA_ITERATOR_FOREACH(globals, global)
1461 if (!strcmp(global->interface, "tizen_policy"))
1463 tzPolicy = (struct tizen_policy *)
1464 wl_registry_bind(registry,
1466 &tizen_policy_interface,
1467 (global->version > 7)? 7 : global->version);
1469 if (!strcmp(global->interface, "tizen_surface"))
1471 tzSurface = (struct tizen_surface *)
1472 wl_registry_bind(registry,
1474 &tizen_surface_interface,
1475 (global->version > 1)? 1 : global->version);
1477 if (!strcmp(global->interface, "tizen_launch_effect"))
1479 tzlaunch_effect = (struct tizen_launch_effect *)
1480 wl_registry_bind(registry,
1482 &tizen_launch_effect_interface,
1483 (global->version > 1)? 1 : global->version);
1485 if (!strcmp(global->interface, "wl_output"))
1487 wlOutput = (struct wl_output *)
1488 wl_registry_bind(registry,
1490 &wl_output_interface,
1491 (global->version > 2)? 2 : global->version);
1492 wl_output_add_listener(wlOutput, &_e_test_output_listener, NULL);
1498 wl_output_destroy(wlOutput);
1504 EINA_SAFETY_ON_NULL_GOTO(tzPolicy, err);
1505 EINA_SAFETY_ON_NULL_GOTO(tzSurface, err);
1506 EINA_SAFETY_ON_NULL_GOTO(tzlaunch_effect, err);
1508 eina_iterator_free(globals);
1513 eina_iterator_free(globals);
1517 /* callbacks - method */
1519 _cb_method_win_info_get(void *data,
1520 const Eldbus_Message *msg,
1523 const char *name = NULL, *text = NULL, *wname = NULL;
1525 Eina_Bool res = EINA_FALSE;
1529 res = eldbus_message_error_get(msg, &name, &text);
1530 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1532 res = eldbus_message_arguments_get
1537 &tw->x, &tw->y, &tw->w, &tw->h,
1553 // change window name from char * to Eina_Stringshare
1555 eina_stringshare_del(tw->name);
1556 tw->name = eina_stringshare_add(wname);
1560 if ((name) || (text))
1562 ERR("errname:%s errmsg:%s\n", name, text);
1565 etRunner::get().finishWork();
1569 _cb_method_win_info_list_get(void *data,
1570 const Eldbus_Message *msg,
1573 const char *name = NULL, *text = NULL, *wname = NULL;
1574 Eldbus_Message_Iter *array = NULL, *ec = NULL;
1575 Window_Info_List *info_list = (Window_Info_List *)data;
1576 Eina_Bool res = EINA_FALSE, animating = EINA_FALSE;
1578 if (info_list == NULL)
1581 res = eldbus_message_error_get(msg, &name, &text);
1582 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1584 res = eldbus_message_arguments_get(msg, "a(" E_TC_SIGN_WIN_INFO ")", &array);
1585 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1587 while (eldbus_message_iter_get_and_next(array, 'r', &ec))
1589 etWin *tw = new etWin();
1592 res = eldbus_message_iter_arguments_get(
1597 &tw->x, &tw->y, &tw->w, &tw->h,
1613 // change name to eina_stringshare
1616 WRN("Failed to get win info\n");
1620 tw->name = eina_stringshare_add(wname);
1624 animating = EINA_TRUE;
1628 WRN("Failed to get win info\n");
1633 info_list->list = eina_list_append(info_list->list, tw);
1637 info_list->retry = EINA_TRUE;
1640 if ((name) || (text))
1642 ERR("errname:%s errmsg:%s\n", name, text);
1645 etRunner::get().finishWork();
1649 _cb_method_window_register(void *data,
1650 const Eldbus_Message *msg,
1653 const char *name = NULL, *text = NULL;
1654 Eina_Bool res = EINA_FALSE;
1655 Eina_Bool *accepted = (Eina_Bool *)data;
1657 *accepted = EINA_FALSE;
1659 res = eldbus_message_error_get(msg, &name, &text);
1660 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1662 res = eldbus_message_arguments_get(msg, "b", accepted);
1665 if ((name) || (text))
1667 ERR("errname: %s errmsg: %s\n", name, text);
1670 etRunner::get().finishWork();
1674 _cb_method_zone_rotation_change(void *data,
1675 const Eldbus_Message *msg,
1678 const char *name = NULL, *text = NULL;
1679 Eina_Bool res = EINA_FALSE;
1680 Eina_Bool *allowed = (Eina_Bool *)data;
1682 *allowed = 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", allowed);
1688 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1689 EINA_SAFETY_ON_FALSE_GOTO(*allowed, finish);
1692 if ((name) || (text))
1694 ERR("errname: %s errmsg: %s\n", name, text);
1697 etRunner::get().finishWork();
1701 _cb_method_window_effect(void *data,
1702 const Eldbus_Message *msg,
1705 const char *name = NULL, *text = NULL;
1706 Eina_Bool res = EINA_FALSE;
1707 Eina_Bool *allowed = (Eina_Bool *)data;
1709 *allowed = EINA_FALSE;
1711 res = eldbus_message_error_get(msg, &name, &text);
1712 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1714 res = eldbus_message_arguments_get(msg, "b", allowed);
1715 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1716 EINA_SAFETY_ON_FALSE_GOTO(*allowed, finish);
1719 if ((name) || (text))
1721 ERR("errname: %s errmsg: %s\n", name, text);
1724 etRunner::get().finishWork();
1728 _cb_method_set_tc_start_end(void *data,
1729 const Eldbus_Message *msg,
1732 const char *name = NULL, *text = NULL;
1733 Eina_Bool res = EINA_FALSE;
1734 Eina_Bool *accept = (Eina_Bool *)data;
1736 *accept = EINA_FALSE;
1738 res = eldbus_message_error_get(msg, &name, &text);
1739 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1741 res = eldbus_message_arguments_get(msg, "b", accept);
1742 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1743 EINA_SAFETY_ON_FALSE_GOTO(*accept, finish);
1746 if ((name) || (text))
1748 ERR("errname: %s errmsg: %s\n", name, text);
1751 etRunner::get().finishWork();
1754 /* callbacks - signal */
1756 _cb_signal_vis_changed(void *data,
1757 const Eldbus_Message *msg)
1759 etRunner *runner = (etRunner *)data;
1760 const char *name = NULL, *text = NULL;
1761 Eina_Bool res = EINA_FALSE;
1765 res = eldbus_message_error_get(msg, &name, &text);
1766 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1768 res = eldbus_message_arguments_get(msg, "ub", &id, &vis);
1769 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1771 runner->insertEventQueue(id, E_TC_EVENT_TYPE_VIS_CHANGED);
1774 if ((name) || (text))
1776 ERR("errname:%s errmsg:%s\n", name, text);
1781 _cb_signal_stack_changed(void *data,
1782 const Eldbus_Message *msg)
1784 etRunner *runner = (etRunner *)data;
1785 const char *name = NULL, *text = NULL;
1786 Eina_Bool res = EINA_FALSE;
1787 Ecore_Window id = 0;
1789 res = eldbus_message_error_get(msg, &name, &text);
1790 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1792 res = eldbus_message_arguments_get(msg, "u", &id);
1793 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1795 runner->insertEventQueue(id, E_TC_EVENT_TYPE_STACK_CHANGED);
1798 if ((name) || (text))
1800 ERR("errname:%s errmsg:%s\n", name, text);
1805 _cb_signal_win_rot_changed(void *data,
1806 const Eldbus_Message *msg)
1808 etRunner *runner = (etRunner *)data;
1809 const char *name = NULL, *text = NULL;
1810 Eina_Bool res = EINA_FALSE;
1814 res = eldbus_message_error_get(msg, &name, &text);
1815 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1817 /* TODO unused 'window id' and 'angle' */
1818 res = eldbus_message_arguments_get(msg, "ui", &id, &angle);
1819 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1821 runner->insertEventQueue(id, E_TC_EVENT_TYPE_WINDOW_ROTATION_CHANGE);
1824 if ((name) || (text))
1826 ERR("errname:%s errmsg:%s\n", name, text);
1831 _cb_signal_focus_changed(void *data,
1832 const Eldbus_Message *msg)
1834 etRunner *runner = (etRunner *)data;
1835 const char *name = NULL, *text = NULL;
1836 Eina_Bool res = EINA_FALSE;
1837 Ecore_Window id = 0;
1839 res = eldbus_message_error_get(msg, &name, &text);
1840 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1842 res = eldbus_message_arguments_get(msg, "u", &id);
1843 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1845 runner->insertEventQueue(id, E_TC_EVENT_TYPE_FOCUS_CHANGED);
1848 if ((name) || (text))
1850 ERR("errname:%s errmsg:%s\n", name, text);
1855 _cb_signal_render_while_effect_run(void *data,
1856 const Eldbus_Message *msg)
1858 etRunner *runner = (etRunner *)data;
1859 const char *name = NULL, *text = NULL;
1860 Eina_Bool res = EINA_FALSE;
1861 Ecore_Window id = 0;
1863 res = eldbus_message_error_get(msg, &name, &text);
1864 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1866 res = eldbus_message_arguments_get(msg, "u", &id);
1867 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1869 runner->insertEventQueue(id, E_TC_EVENT_TYPE_EFFECT);
1872 if ((name) || (text))
1874 ERR("errname:%s errmsg:%s\n", name, text);
1878 /* callbacks - timer */
1880 _cb_work_timeout(void *data)
1882 etRunner::get().finishWork();
1883 return ECORE_CALLBACK_CANCEL;
1886 /* callbacks - ecore */
1888 _cb_ecore_key_down(void *data, int type, void *event)
1890 Ecore_Event_Key *ev = (Ecore_Event_Key *)event;
1891 etRunner *runner = (etRunner *)data;
1893 if (runner->ev.key.name == NULL) return ECORE_CALLBACK_PASS_ON;
1895 if (!strncmp(runner->ev.key.name, ev->keyname, strlen(ev->keyname)))
1897 if (runner->ev.key.ecore_state == EINA_FALSE &&
1898 type == ECORE_EVENT_KEY_DOWN)
1900 runner->ev.key.ecore_state = EINA_TRUE;
1904 return ECORE_CALLBACK_PASS_ON;
1908 _cb_ecore_key_up(void *data, int type, void *event)
1910 Ecore_Event_Key *ev = (Ecore_Event_Key *)event;
1911 etRunner *runner = (etRunner *)data;
1913 if (runner->ev.key.name == NULL) return ECORE_CALLBACK_PASS_ON;
1915 if (!strncmp(runner->ev.key.name, ev->keyname, strlen(ev->keyname)))
1917 if (runner->ev.key.ecore_state == EINA_TRUE &&
1918 type == ECORE_EVENT_KEY_UP)
1920 runner->ev.key.ecore_state = EINA_FALSE;
1921 runner->insertEventQueue(0, E_TC_EVENT_TYPE_INPUT_ECORE_KEY);
1925 return ECORE_CALLBACK_PASS_ON;
1928 /* callbacks - evas */
1930 _cb_evas_key_down(void *data, Evas * evas, Evas_Object * obj, void * event_info)
1932 Evas_Event_Key_Down *ev;
1933 etRunner *runner = (etRunner *)data;
1935 ev = (Evas_Event_Key_Down *)event_info;
1937 if (!strncmp(runner->ev.key.name, ev->keyname, strlen(ev->keyname)))
1939 if (runner->ev.key.evas_state == EINA_FALSE &&
1940 runner->ev.elm_win == obj)
1942 runner->ev.key.evas_state = EINA_TRUE;
1948 _cb_evas_key_up(void * data, Evas * evas, Evas_Object * obj, void * event_info)
1950 Evas_Event_Key_Up *ev;
1951 etRunner *runner = (etRunner *)data;
1953 ev = (Evas_Event_Key_Up *)event_info;
1955 if (!strncmp(runner->ev.key.name, ev->keyname, strlen(ev->keyname)))
1957 if (runner->ev.key.evas_state == EINA_TRUE &&
1958 runner->ev.elm_win == obj)
1960 runner->ev.key.evas_state = EINA_FALSE;
1961 runner->ev.elm_win = NULL;
1963 runner->insertEventQueue(runner->ev.native_win, E_TC_EVENT_TYPE_INPUT_EVAS_KEY);
1968 /* callbacks - smart object */
1970 _cb_evas_smart_cb_effect_started(void *data, Evas_Object * obj, void *event_info)
1972 etRunner *runner = (etRunner *)data;
1973 if (runner && runner->ev.elm_win == obj)
1975 runner->ev.effect.state_smcb = E_TC_EVAS_SMART_CB_STATE_EFFECT_STARTED;
1980 _cb_evas_smart_cb_effect_done(void *data, Evas_Object * obj, void *event_info)
1982 etRunner *runner = (etRunner *)data;
1983 if (runner && runner->ev.elm_win == obj)
1985 runner->ev.effect.state_smcb |= E_TC_EVAS_SMART_CB_STATE_EFFECT_DONE;
1987 runner->insertEventQueue(runner->ev.native_win, E_TC_EVENT_TYPE_EFFECT_EVAS_CB);
1989 evas_object_smart_callback_del(runner->ev.elm_win, effect_started, _cb_evas_smart_cb_effect_started);
1990 evas_object_smart_callback_del(runner->ev.elm_win, effect_done, _cb_evas_smart_cb_effect_done);
1991 evas_object_smart_callback_del(runner->ev.elm_win, launch_done, _cb_evas_smart_cb_launch_done);
1996 _cb_evas_smart_cb_launch_done(void *data, Evas_Object * obj, void *event_info)
1998 etRunner *runner = (etRunner *)data;
1999 if (runner && runner->ev.elm_win == obj)
2001 runner->ev.effect.state_smcb |= E_TC_EVAS_SMART_CB_STATE_LAUNCH_DONE;
2003 if((runner->ev.effect.state_smcb & E_TC_EVAS_SMART_CB_STATE_EFFECT_STARTED) &&
2004 (runner->ev.effect.state_smcb & E_TC_EVAS_SMART_CB_STATE_EFFECT_DONE) &&
2005 (runner->ev.effect.state_smcb & E_TC_EVAS_SMART_CB_STATE_LAUNCH_DONE))
2007 runner->insertEventQueue(runner->ev.native_win, E_TC_EVENT_TYPE_EFFECT_EVAS_CB);
2009 evas_object_smart_callback_del(runner->ev.elm_win, effect_started, _cb_evas_smart_cb_effect_started);
2010 evas_object_smart_callback_del(runner->ev.elm_win, effect_done, _cb_evas_smart_cb_effect_done);
2011 evas_object_smart_callback_del(runner->ev.elm_win, launch_done, _cb_evas_smart_cb_launch_done);
2017 _cb_gesture_tap(void *data, int type, void *event)
2019 etRunner *runner = (etRunner *)data;
2020 efl_util_event_gesture_tap_s *ev =
2021 (efl_util_event_gesture_tap_s *)event;
2023 if ((ev->fingers == (unsigned int)runner->ev.gesture.tap.fingers) &&
2024 (ev->repeats == (unsigned int)runner->ev.gesture.tap.repeats))
2026 runner->insertEventQueue(0, E_TC_EVENT_TYPE_GESTURE_TAP);
2027 //ecore_event_handler_del(runner->ev.key.eh);
2030 return ECORE_CALLBACK_PASS_ON;
2034 _cb_gesture_tap_delay_timer(void *data)
2036 etRunner *runner = (etRunner *)data;
2039 for (i = 0; i < runner->ev.gesture.tap.fingers; i++)
2041 if (!runner->ev.gesture.tap.pressed)
2043 runner->generateTouchDown(i, 100 * (i + 1), 100 * (i + 1));
2047 runner->generateTouchUp(i, 100 * (i + 1), 100 * (i + 1));
2051 runner->ev.gesture.timer = NULL;
2053 runner->ev.gesture.tap.pressed = !runner->ev.gesture.tap.pressed;
2054 if (!runner->ev.gesture.tap.pressed)
2056 runner->ev.gesture.tap.current_repeats--;
2059 if (runner->ev.gesture.tap.current_repeats > 0)
2061 runner->ev.gesture.timer = ecore_timer_add(0.11,
2062 _cb_gesture_tap_delay_timer,
2066 return ECORE_CALLBACK_CANCEL;
2070 etRunner::generateTapGesture()
2072 ev.gesture.tap.current_repeats = ev.gesture.tap.repeats;
2073 ev.gesture.tap.pressed = EINA_FALSE;
2075 ev.gesture.timer = ecore_timer_add(0.11,
2076 _cb_gesture_tap_delay_timer,
2083 _cb_gesture_edge_swipe(void *data, int type, void *event)
2085 etRunner *runner = (etRunner *)data;
2086 efl_util_event_gesture_edge_swipe_s *ev =
2087 (efl_util_event_gesture_edge_swipe_s *)event;
2089 if ((ev->fingers == (unsigned int)runner->ev.gesture.edge.fingers) &&
2090 (ev->edge == (unsigned int)runner->ev.gesture.edge.edge))
2092 if (runner->ev.gesture.timer)
2093 runner->ev.gesture.edge.get_event = EINA_TRUE;
2096 return ECORE_CALLBACK_PASS_ON;
2100 _cb_gesture_edge_swipe_delay_timer(void *data)
2102 etRunner *runner = (etRunner *)data;
2103 int i, cnt, fingers, w, h;
2104 efl_util_gesture_edge_e edge;
2106 cnt = ++runner->ev.gesture.edge.touch_count;
2107 fingers = runner->ev.gesture.edge.fingers;
2108 edge = runner->ev.gesture.edge.edge;
2109 w = runner->output.w - 1;
2110 h = runner->output.h - 1;
2114 for (i = 0; i < fingers; i++)
2118 case EFL_UTIL_GESTURE_EDGE_TOP:
2119 runner->generateTouchDown(i, 100 * (i + 1), 1);
2121 case EFL_UTIL_GESTURE_EDGE_RIGHT:
2122 runner->generateTouchDown(i, w - 1, 100 * (i + 1));
2124 case EFL_UTIL_GESTURE_EDGE_BOTTOM:
2125 runner->generateTouchDown(i, 100 * (i + 1), h - 1);
2127 case EFL_UTIL_GESTURE_EDGE_LEFT:
2128 runner->generateTouchDown(i, 1, 100 * (i + 1));
2137 for (i = 0; i < fingers; i++)
2141 case EFL_UTIL_GESTURE_EDGE_TOP:
2142 runner->generateTouchMove(i, 100 * (i + 1), 40 * cnt * cnt);
2144 case EFL_UTIL_GESTURE_EDGE_RIGHT:
2145 runner->generateTouchMove(i, (w - 1) - (40 * cnt * cnt), 100 * (i + 1));
2147 case EFL_UTIL_GESTURE_EDGE_BOTTOM:
2148 runner->generateTouchMove(i, 100 * (i + 1), (h - 1) - (40 * cnt * cnt));
2150 case EFL_UTIL_GESTURE_EDGE_LEFT:
2151 runner->generateTouchMove(i, 40 * cnt * cnt, 100 * (i + 1));
2161 for (i = 0; i < fingers; i++)
2165 case EFL_UTIL_GESTURE_EDGE_TOP:
2166 runner->generateTouchUp(i, 100 * (i + 1), 40 * cnt * cnt);
2168 case EFL_UTIL_GESTURE_EDGE_RIGHT:
2169 runner->generateTouchUp(i, (w - 1) - (40 * cnt * cnt), 100 * (i + 1));
2171 case EFL_UTIL_GESTURE_EDGE_BOTTOM:
2172 runner->generateTouchUp(i, 100 * (i + 1), (h - 1) - (40 * cnt * cnt));
2174 case EFL_UTIL_GESTURE_EDGE_LEFT:
2175 runner->generateTouchUp(i, 40 * cnt * cnt, 100 * (i + 1));
2182 runner->ev.gesture.timer = NULL;
2183 if (runner->ev.gesture.edge.get_event)
2185 runner->insertEventQueue(0, E_TC_EVENT_TYPE_GESTURE_EDGE_SWIPE);
2186 //ecore_event_handler_del(runner->ev.key.eh);
2188 return ECORE_CALLBACK_CANCEL;
2191 runner->ev.gesture.timer = NULL;
2192 runner->ev.gesture.timer = ecore_timer_add(0.11,
2193 _cb_gesture_edge_swipe_delay_timer,
2196 return ECORE_CALLBACK_CANCEL;
2200 etRunner::generateEdgeSwipeGesture()
2202 ev.gesture.edge.touch_count = 0;
2203 ev.gesture.edge.get_event = EINA_FALSE;
2205 ev.gesture.timer = ecore_timer_add(0.11,
2206 _cb_gesture_edge_swipe_delay_timer,
2213 _cb_gesture_edge_drag(void *data, int type, void *event)
2215 etRunner *runner = (etRunner *)data;
2216 efl_util_event_gesture_edge_drag_s *ev =
2217 (efl_util_event_gesture_edge_drag_s *)event;
2219 if ((ev->fingers == (unsigned int)runner->ev.gesture.edge.fingers) &&
2220 (ev->edge == (unsigned int)runner->ev.gesture.edge.edge) &&
2221 (ev->mode == EFL_UTIL_GESTURE_MODE_END))
2223 runner->insertEventQueue(0, E_TC_EVENT_TYPE_GESTURE_EDGE_DRAG);
2224 //ecore_event_handler_del(runner->ev.key.eh);
2227 return ECORE_CALLBACK_PASS_ON;
2231 _cb_gesture_edge_drag_delay_timer(void *data)
2233 etRunner *runner = (etRunner *)data;
2234 int i, cnt, fingers, w, h;
2235 efl_util_gesture_edge_e edge;
2237 cnt = ++runner->ev.gesture.edge.touch_count;
2238 fingers = runner->ev.gesture.edge.fingers;
2239 edge = runner->ev.gesture.edge.edge;
2240 w = runner->output.w - 1;
2241 h = runner->output.h - 1;
2245 for (i = 0; i < fingers; i++)
2249 case EFL_UTIL_GESTURE_EDGE_TOP:
2250 runner->generateTouchDown(i, 100 * (i + 1), 1);
2252 case EFL_UTIL_GESTURE_EDGE_RIGHT:
2253 runner->generateTouchDown(i, w - 1, 100 * (i + 1));
2255 case EFL_UTIL_GESTURE_EDGE_BOTTOM:
2256 runner->generateTouchDown(i, 100 * (i + 1), h - 1);
2258 case EFL_UTIL_GESTURE_EDGE_LEFT:
2259 runner->generateTouchDown(i, 1, 100 * (i + 1));
2268 for (i = 0; i < fingers; i++)
2272 case EFL_UTIL_GESTURE_EDGE_TOP:
2273 runner->generateTouchMove(i, 100 * (i + 1), 50 * cnt);
2275 case EFL_UTIL_GESTURE_EDGE_RIGHT:
2276 runner->generateTouchMove(i, (w - 1) - (50 * cnt), 100 * (i + 1));
2278 case EFL_UTIL_GESTURE_EDGE_BOTTOM:
2279 runner->generateTouchMove(i, 100 * (i + 1), (h - 1) - (50 * cnt));
2281 case EFL_UTIL_GESTURE_EDGE_LEFT:
2282 runner->generateTouchMove(i, 50 * cnt, 100 * (i + 1));
2292 for (i = 0; i < fingers; i++)
2296 case EFL_UTIL_GESTURE_EDGE_TOP:
2297 runner->generateTouchUp(i, 100 * (i + 1), 50 * cnt);
2299 case EFL_UTIL_GESTURE_EDGE_RIGHT:
2300 runner->generateTouchUp(i, (w - 1) - (50 * cnt), 100 * (i + 1));
2302 case EFL_UTIL_GESTURE_EDGE_BOTTOM:
2303 runner->generateTouchUp(i, 100 * (i + 1), (h - 1) - (50 * cnt));
2305 case EFL_UTIL_GESTURE_EDGE_LEFT:
2306 runner->generateTouchUp(i, 50 * cnt, 100 * (i + 1));
2313 runner->ev.gesture.timer = NULL;
2314 return ECORE_CALLBACK_CANCEL;
2317 runner->ev.gesture.timer = NULL;
2318 runner->ev.gesture.timer = ecore_timer_add(0.11,
2319 _cb_gesture_edge_drag_delay_timer,
2322 return ECORE_CALLBACK_CANCEL;
2326 etRunner::generateEdgeDragGesture()
2328 ev.gesture.edge.touch_count = 0;
2330 ev.gesture.timer = ecore_timer_add(0.11,
2331 _cb_gesture_edge_drag_delay_timer,