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);
84 static void _cb_signal_aux_hint_changed(void *data, const Eldbus_Message *msg);
86 /* callbacks - ecore */
87 static Eina_Bool _cb_ecore_key_down(void *data, int type, void *event);
88 static Eina_Bool _cb_ecore_key_up(void *data, int type, void *event);
90 /* callbacks - evas */
91 static void _cb_evas_key_down(void * data, Evas * evas, Evas_Object * obj, void * event_info);
92 static void _cb_evas_key_up(void * data, Evas * evas, Evas_Object * obj, void * event_info);
94 /* callbacks - smart */
95 static void _cb_evas_smart_cb_effect_started(void *data, Evas_Object * obj, void *event_info);
96 static void _cb_evas_smart_cb_effect_done(void *data, Evas_Object * obj, void *event_info);
97 static void _cb_evas_smart_cb_launch_done(void *data, Evas_Object * obj, void *event_info);
99 /* callbacks - timer */
100 static Eina_Bool _cb_work_timeout(void *data);
102 /* callbacks - gesture */
103 static Eina_Bool _cb_gesture_tap(void *data, int type, void *event);
104 static Eina_Bool _cb_gesture_edge_swipe(void *data, int type, void *event);
105 static Eina_Bool _cb_gesture_edge_drag(void *data, int type, void *event);
107 /**********************
109 **********************/
110 static const struct tizen_resource_listener _e_test_tizen_resource_listener =
115 static const struct wl_output_listener _e_test_output_listener =
123 /**********************
125 **********************/
126 etRunner etRunner::inst;
131 Eina_Bool res = EINA_FALSE;
133 worker.waitTime = E_TEST_WORK_TIME;
135 logDomain = eina_log_domain_register("e-tc", EINA_COLOR_BLUE);
138 if (!ecore_wl2_connected_display_get(NULL))
139 ecore_wl2_display_connect(NULL);
141 // init tizen_extension protocol
142 res = initProtocols();
143 EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE);
148 dbus.conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SYSTEM);
149 EINA_SAFETY_ON_NULL_RETURN_VAL(dbus.conn, EINA_FALSE);
151 dbus.ds_obj = eldbus_object_get(dbus.conn,
152 "org.enlightenment.wm",
153 "/org/enlightenment/wm");
154 EINA_SAFETY_ON_NULL_RETURN_VAL(dbus.ds_obj, EINA_FALSE);
156 dbus.ds_proxy = eldbus_proxy_get(dbus.ds_obj,
157 "org.enlightenment.wm.Test");
158 EINA_SAFETY_ON_NULL_RETURN_VAL(dbus.ds_proxy, EINA_FALSE);
160 dbus.deviced_obj = eldbus_object_get(dbus.conn,
161 "org.tizen.system.deviced",
162 "/Org/Tizen/System/DeviceD/Display");
163 EINA_SAFETY_ON_NULL_RETURN_VAL(dbus.deviced_obj, EINA_FALSE);
165 dbus.deviced_proxy = eldbus_proxy_get(dbus.deviced_obj,
166 "org.tizen.system.deviced.display");
167 EINA_SAFETY_ON_NULL_RETURN_VAL(dbus.deviced_proxy, EINA_FALSE);
169 // reset registered window of e_test_helper
170 res = resetRegisterWin();
171 EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE);
173 // init input generator
174 inputGenerator = efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN | EFL_UTIL_INPUT_DEVTYPE_KEYBOARD, NULL);
175 EINA_SAFETY_ON_NULL_RETURN_VAL(inputGenerator, EINA_FALSE);
177 // init gesture handler
178 gestureHandler = efl_util_gesture_initialize();
179 EINA_SAFETY_ON_NULL_RETURN_VAL(gestureHandler, EINA_FALSE);
181 // add signal handlers
182 res = addSignalHandlers();
183 EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE);
191 eina_log_domain_unregister(logDomain);
193 freeLastWinInfoList();
196 // deinit tizen_extension protocol
199 tizen_policy_destroy(tzPolicy);
205 tizen_surface_destroy(tzSurface);
211 tizen_launch_splash_destroy(tzlaunch_splash);
212 tzlaunch_splash = NULL;
217 tizen_launch_effect_destroy(tzlaunch_effect);
218 tzlaunch_effect = NULL;
222 eldbus_proxy_unref(dbus.deviced_proxy);
223 eldbus_object_unref(dbus.deviced_obj);
224 eldbus_proxy_unref(dbus.ds_proxy);
225 eldbus_object_unref(dbus.ds_obj);
226 eldbus_connection_unref(dbus.conn);
229 // deinit input generator
230 efl_util_input_deinitialize_generator(inputGenerator);
232 // deinit gesture handler
233 efl_util_gesture_deinitialize(gestureHandler);
237 etRunner::registerWin(etWin *tw)
239 Eldbus_Pending *p = NULL;
240 Eina_Bool accepted = EINA_FALSE;
242 p = eldbus_proxy_call(dbus.ds_proxy,
244 _cb_method_window_register,
249 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
257 etRunner::deregisterWin(etWin *tw)
259 Eldbus_Pending *p = NULL;
260 Eina_Bool accepted = EINA_FALSE;
262 p = eldbus_proxy_call(dbus.ds_proxy,
264 _cb_method_window_register,
269 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
277 etRunner::resetRegisterWin()
279 Eldbus_Pending *p = NULL;
280 Eina_Bool accepted = EINA_FALSE;
282 p = eldbus_proxy_call(dbus.ds_proxy,
283 "ResetRegisterWindow",
284 _cb_method_window_register,
288 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
296 etRunner::setWinActivate(etWin *tw)
298 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
300 tw->updateGeometry();
302 tizen_policy_activate(tzPolicy,
303 getWlSurface(tw->elm_win));
309 etRunner::requestKillWinByName(const char *name)
311 Eldbus_Pending *p = NULL;
313 EINA_SAFETY_ON_NULL_RETURN_VAL(name, EINA_FALSE);
315 p = eldbus_proxy_call(dbus.ds_proxy,
322 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
328 etRunner::setWinIconic(etWin *tw,
331 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
334 tizen_policy_iconify(tzPolicy,
335 getWlSurface(tw->elm_win));
337 tizen_policy_uniconify(tzPolicy,
338 getWlSurface(tw->elm_win));
344 etRunner::setWinStack(etWin *tw,
348 Eldbus_Pending *p = NULL;
349 p = eldbus_proxy_call(dbus.ds_proxy,
356 sibiling? sibiling->native_win : 0,
358 EINA_SAFETY_ON_TRUE_RETURN_VAL(p != NULL, EINA_FALSE);
364 etRunner::setWinRaise(etWin *tw)
366 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
368 tizen_policy_raise(tzPolicy, getWlSurface(tw->elm_win));
374 etRunner::setWinLower(etWin *tw)
376 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
378 tizen_policy_lower(tzPolicy, getWlSurface(tw->elm_win));
384 etRunner::setWinTransientFor(etWin *tw_child,
388 EINA_SAFETY_ON_NULL_RETURN_VAL(tw_child, EINA_FALSE);
391 tizen_policy_set_transient_for(tzPolicy,
392 tw_child->native_win,
393 tw_parent->native_win);
395 tizen_policy_unset_transient_for(tzPolicy,
396 tw_child->native_win);
402 etRunner::setWinTransientForBelow(etWin *tw_child,
406 Eina_Bool accepted = EINA_FALSE;
407 Eldbus_Pending *p = NULL;
409 p = eldbus_proxy_call(dbus.ds_proxy,
410 "SetWindowTransientForBelow",
411 _cb_method_transient_for_below,
415 tw_child->native_win,
416 tw_parent->native_win,
418 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
426 etRunner::setWinNotiLevel(etWin *tw,
427 efl_util_notification_level_e lv)
429 Eina_Bool res = EINA_FALSE;
431 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
433 res = efl_util_set_notification_window_level(tw->elm_win, lv);
434 EINA_SAFETY_ON_FALSE_RETURN_VAL(res == EFL_UTIL_ERROR_NONE, EINA_FALSE);
439 efl_util_notification_level_e
440 etRunner::getWinNotiLevel(etWin *tw)
442 Eina_Bool res = EINA_FALSE;
443 efl_util_notification_level_e lv = EFL_UTIL_NOTIFICATION_LEVEL_NONE;
445 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EFL_UTIL_NOTIFICATION_LEVEL_NONE);
447 res = efl_util_get_notification_window_level(tw->elm_win, &lv);
448 EINA_SAFETY_ON_FALSE_RETURN_VAL(res == EFL_UTIL_ERROR_NONE, EFL_UTIL_NOTIFICATION_LEVEL_NONE);
454 etRunner::setFocusSkip(etWin *tw, Eina_Bool set)
456 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
459 tizen_policy_set_focus_skip(tzPolicy,
460 getWlSurface(tw->elm_win));
462 tizen_policy_unset_focus_skip(tzPolicy,
463 getWlSurface(tw->elm_win));
469 etRunner::setFocusSkipEcoreWl2(etWin *tw, Eina_Bool set)
471 Ecore_Wl2_Window *wlwin = NULL;
473 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
475 wlwin = (Ecore_Wl2_Window *)elm_win_wl_window_get(tw->elm_win);
476 EINA_SAFETY_ON_NULL_RETURN_VAL(wlwin, EINA_FALSE);
478 ecore_wl2_window_focus_skip_set(wlwin, set);
484 etRunner::setZoneRotation(int angle)
486 Eldbus_Pending *p = NULL;
487 Eina_Bool allowed = EINA_FALSE;
489 p = eldbus_proxy_call(dbus.ds_proxy,
490 "ChangeZoneRotation",
491 _cb_method_zone_rotation_change,
496 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
504 etRunner::setTCStart()
506 Eldbus_Pending *p = NULL;
507 Eina_Bool res = EINA_FALSE;
509 p = eldbus_proxy_call(dbus.ds_proxy,
511 _cb_method_set_tc_start_end,
515 EINA_SAFETY_ON_NULL_GOTO(p, err);
519 EINA_SAFETY_ON_FALSE_GOTO(res, err);
531 Eldbus_Pending *p = NULL;
532 Eina_Bool res = EINA_FALSE;
534 p = eldbus_proxy_call(dbus.ds_proxy,
536 _cb_method_set_tc_start_end,
540 if (p == NULL) res = EINA_FALSE;
544 EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE);
550 etRunner::getWinInfo(etWin *tw)
552 Eldbus_Pending *p = NULL;
556 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
558 win = tw->native_win;
563 p = eldbus_proxy_call(dbus.ds_proxy,
565 _cb_method_win_info_get,
570 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
574 if ((tw->native_win == win) && (!tw->effect))
580 if (tw->native_win != win)
582 ERR("Something Wrong. Difference with quering window"
583 "and received window from server");
584 tw->native_win = win;
591 etRunner::getWinInfoList()
593 Eldbus_Pending *p = NULL;
594 Window_Info_List *info_list = NULL;
596 Eina_List *result = NULL;
598 info_list = E_NEW(Window_Info_List, 1);
599 EINA_SAFETY_ON_NULL_RETURN_VAL(info_list, NULL);
603 p = eldbus_proxy_call(dbus.ds_proxy,
605 _cb_method_win_info_list_get,
609 EINA_SAFETY_ON_NULL_RETURN_VAL(p, NULL);
613 if (info_list->retry)
615 info_list->retry = EINA_FALSE;
616 EINA_LIST_CAST_FREE(info_list->list, tw, etWin*)
628 result = eina_list_clone(info_list->list);
631 freeLastWinInfoList();
632 listWinInfo = result;
638 etRunner::freeWinInfoList(Eina_List *list)
642 EINA_SAFETY_ON_NULL_RETURN(list);
644 if (listWinInfo == list)
647 EINA_LIST_CAST_FREE(list, tw, etWin*)
657 etRunner::freeLastWinInfoList()
660 freeWinInfoList(listWinInfo);
666 etRunner::setLastWinInfoList(Eina_List *list)
668 EINA_SAFETY_ON_NULL_RETURN(list);
670 freeLastWinInfoList();
676 etRunner::getWinId(Evas_Object *elm_win)
678 struct wl_surface *surf = NULL;
680 struct tizen_resource *tzres = NULL;
682 surf = getWlSurface(elm_win);
683 EINA_SAFETY_ON_NULL_RETURN_VAL(surf, 0);
685 tzres = tizen_surface_get_tizen_resource(tzSurface, surf);
686 EINA_SAFETY_ON_NULL_RETURN_VAL(tzres, 0);
688 tizen_resource_add_listener(tzres,
689 &_e_test_tizen_resource_listener, &id);
693 tizen_resource_destroy(tzres);
699 etRunner::getWlSurface(Evas_Object *elm_win)
701 Ecore_Wl2_Window *wlwin = NULL;
702 struct wl_surface *surf = NULL;
704 EINA_SAFETY_ON_NULL_RETURN_VAL(elm_win, NULL);
706 wlwin = (Ecore_Wl2_Window *)elm_win_wl_window_get(elm_win);
707 EINA_SAFETY_ON_NULL_RETURN_VAL(wlwin, NULL);
709 surf = ecore_wl2_window_surface_get(wlwin);
710 EINA_SAFETY_ON_NULL_RETURN_VAL(surf, NULL);
716 etRunner::setDpms(Eina_Bool on)
718 Eldbus_Pending *p = NULL;
719 p = eldbus_proxy_call(dbus.ds_proxy,
726 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
731 etRunner::setDevctlDisplayLock(Eina_Bool lock)
733 Eldbus_Pending *p = NULL;
737 p = eldbus_proxy_call(dbus.deviced_proxy,
750 p = eldbus_proxy_call(dbus.deviced_proxy,
759 EINA_SAFETY_ON_TRUE_RETURN_VAL(p != NULL, EINA_FALSE);
765 etRunner::setDevctlDisplayOn(Eina_Bool on)
767 Eldbus_Pending *p = NULL;
769 p = eldbus_proxy_call(dbus.deviced_proxy,
775 on? "lcdon" : "lcdoff");
776 EINA_SAFETY_ON_TRUE_RETURN_VAL(p != NULL, EINA_FALSE);
782 etRunner::feedMouseDown(int x, int y)
784 Eldbus_Pending *p = NULL;
785 p = eldbus_proxy_call(dbus.ds_proxy,
793 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
798 etRunner::feedMouseMove(int x, int y)
800 Eldbus_Pending *p = NULL;
801 p = eldbus_proxy_call(dbus.ds_proxy,
809 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
814 etRunner::feedMouseUp(int x, int y)
816 Eldbus_Pending *p = NULL;
817 p = eldbus_proxy_call(dbus.ds_proxy,
825 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
830 etRunner::feedKeyDown(const char *key)
832 Eldbus_Pending *p = NULL;
833 p = eldbus_proxy_call(dbus.ds_proxy,
841 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
846 etRunner::feedKeyUp(const char *key)
848 Eldbus_Pending *p = NULL;
849 p = eldbus_proxy_call(dbus.ds_proxy,
857 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
862 etRunner::generateMouseDown(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_BEGIN,
877 if (ret != EFL_UTIL_ERROR_NONE)
879 efl_util_input_deinitialize_generator(inputGenerator);
880 inputGenerator = NULL;
888 etRunner::generateMouseMove(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_UPDATE,
903 if (ret != EFL_UTIL_ERROR_NONE)
905 efl_util_input_deinitialize_generator(inputGenerator);
906 inputGenerator = NULL;
914 etRunner::generateMouseUp(int x, int y)
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_TOUCHSCREEN, NULL);
925 ret = efl_util_input_generate_touch(inputGenerator,
927 EFL_UTIL_INPUT_TOUCH_END,
929 if (ret != EFL_UTIL_ERROR_NONE)
931 efl_util_input_deinitialize_generator(inputGenerator);
932 inputGenerator = NULL;
940 etRunner::generateKeyPress(const char *keyname)
942 // Using efl_util_input_generate instead of generate event by eldbus
943 int ret = EFL_UTIL_ERROR_NONE;
945 if (inputGenerator == NULL)
947 inputGenerator = efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_KEYBOARD, NULL);
951 ret = efl_util_input_generate_key(inputGenerator,
954 if (ret != EFL_UTIL_ERROR_NONE)
956 efl_util_input_deinitialize_generator(inputGenerator);
957 inputGenerator = NULL;
965 etRunner::generateKeyRelease(const char *keyname)
967 // Using efl_util_input_generate instead of generate event by eldbus
968 int ret = EFL_UTIL_ERROR_NONE;
970 if (inputGenerator == NULL)
972 inputGenerator = efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_KEYBOARD, NULL);
976 ret = efl_util_input_generate_key(inputGenerator,
979 if (ret != EFL_UTIL_ERROR_NONE)
981 efl_util_input_deinitialize_generator(inputGenerator);
982 inputGenerator = NULL;
990 etRunner::generateKeyEvent(const char *keyname, double delay)
992 Eina_Bool res = EINA_FALSE;
994 res = etRunner::get().generateKeyPress(keyname);
995 EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE);
997 res = etRunner::get().generateKeyRelease(keyname);
998 EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE);
1004 etRunner::generateTouchDown(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_BEGIN,
1019 if (ret != EFL_UTIL_ERROR_NONE)
1021 efl_util_input_deinitialize_generator(inputGenerator);
1022 inputGenerator = NULL;
1030 etRunner::generateTouchMove(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_UPDATE,
1045 if (ret != EFL_UTIL_ERROR_NONE)
1047 efl_util_input_deinitialize_generator(inputGenerator);
1048 inputGenerator = NULL;
1056 etRunner::generateTouchUp(int idx, int x, int y)
1058 // Using efl_util_input_generate instead of generate event by eldbus
1059 int ret = EFL_UTIL_ERROR_NONE;
1061 if (inputGenerator == NULL)
1063 inputGenerator = efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN, NULL);
1067 ret = efl_util_input_generate_touch(inputGenerator,
1069 EFL_UTIL_INPUT_TOUCH_END,
1071 if (ret != EFL_UTIL_ERROR_NONE)
1073 efl_util_input_deinitialize_generator(inputGenerator);
1074 inputGenerator = NULL;
1082 etRunner::setSplashLaunch(const char *path, int type)
1084 const char *effect_type = "launch";
1085 struct wl_array option;
1087 // init tzlaunch_splash
1088 if (tzlaunch_splash)
1090 tizen_launch_splash_destroy(tzlaunch_splash);
1091 tzlaunch_splash = NULL;
1093 if (tzlaunch_effect) tzlaunch_splash = tizen_launch_effect_create_splash_img(tzlaunch_effect);
1094 EINA_SAFETY_ON_NULL_RETURN_VAL(tzlaunch_splash, EINA_FALSE);
1096 wl_array_init(&option);
1097 tizen_launch_splash_launch(tzlaunch_splash, path, type,
1099 effect_type, NULL, &option);
1100 wl_array_release(&option);
1106 etRunner::setSplashOwner()
1109 EINA_SAFETY_ON_NULL_RETURN_VAL(tzlaunch_splash, EINA_FALSE);
1111 tizen_launch_splash_owner(tzlaunch_splash, (int)getpid());
1117 etRunner::setWinEffect(etWin *tw)
1119 Eldbus_Pending *p = NULL;
1120 Eina_Bool accepted = EINA_FALSE;
1122 this->ev.elm_win = tw->elm_win;
1124 p = eldbus_proxy_call(dbus.ds_proxy,
1126 _cb_method_window_effect,
1132 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
1139 etRunner::freezeEvent()
1141 Eldbus_Pending *p = NULL;
1142 p = eldbus_proxy_call(dbus.ds_proxy,
1149 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
1154 etRunner::thawEvent()
1156 Eldbus_Pending *p = NULL;
1157 p = eldbus_proxy_call(dbus.ds_proxy,
1164 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
1169 etRunner::waitEvent(etWin *win, E_TC_Event_Type ev_type)
1171 E_TC_Event_Item *recv_item = NULL;
1172 Eina_Bool res = EINA_FALSE;
1173 Eina_List *l = NULL;
1178 case E_TC_EVENT_TYPE_VIS_ON:
1179 case E_TC_EVENT_TYPE_VIS_OFF:
1180 case E_TC_EVENT_TYPE_VIS_CHANGED:
1181 ev_type = E_TC_EVENT_TYPE_VIS_CHANGED;
1183 case E_TC_EVENT_TYPE_STACK_RAISE:
1184 case E_TC_EVENT_TYPE_STACK_LOWER:
1185 case E_TC_EVENT_TYPE_STACK_ABOVE:
1186 case E_TC_EVENT_TYPE_STACK_BELOW:
1187 case E_TC_EVENT_TYPE_STACK_CHANGED:
1188 ev_type = E_TC_EVENT_TYPE_STACK_CHANGED;
1194 // Add event callbacks if needs
1195 if (ev_type == E_TC_EVENT_TYPE_EFFECT_EVAS_CB)
1197 ev.elm_win = win->elm_win;
1198 ev.native_win = win->native_win;
1199 ev.effect.state_smcb = E_TC_EVAS_SMART_CB_STATE_NONE;
1201 evas_object_smart_callback_add(this->ev.elm_win, effect_started, _cb_evas_smart_cb_effect_started, this);
1202 evas_object_smart_callback_add(this->ev.elm_win, effect_done, _cb_evas_smart_cb_effect_done, this);
1203 evas_object_smart_callback_add(this->ev.elm_win, launch_done, _cb_evas_smart_cb_launch_done, this);
1205 else if (ev_type == E_TC_EVENT_TYPE_INPUT_EVAS_KEY)
1207 ev.elm_win = win->elm_win;
1208 ev.native_win = win->native_win;
1209 evas_object_event_callback_add(this->ev.elm_win, EVAS_CALLBACK_KEY_DOWN, _cb_evas_key_down, this);
1210 evas_object_event_callback_add(this->ev.elm_win, EVAS_CALLBACK_KEY_UP, _cb_evas_key_up, this);
1212 ev.key.evas_state = EINA_FALSE;
1215 // pre-waiting events
1218 if (ev.wait_event_index == ev.last_event)
1220 work(0.5); // waiting additional time
1221 if (ev.wait_event_index == ev.last_event)
1225 EINA_LIST_CAST_FOREACH(ev.recv_queue, l, recv_item, E_TC_Event_Item*)
1227 if ((recv_item->win == (win?win->native_win:0)) &&
1228 (recv_item->type == ev_type))
1230 ev.wait_event_index = recv_item;
1240 etRunner::flushEventQueue()
1244 ev.recv_queue = eina_list_free(ev.recv_queue);
1245 ev.recv_queue = NULL;
1250 etRunner::insertEventQueue(Ecore_Window id, E_TC_Event_Type ev_type)
1252 E_TC_Event_Item *item = E_NEW(E_TC_Event_Item, 1);
1253 EINA_SAFETY_ON_NULL_RETURN_VAL(item, EINA_FALSE);
1256 item->type = ev_type;
1257 ev.recv_queue = eina_list_append(ev.recv_queue, item);
1258 ev.last_event = item;
1264 etRunner::isEventOccuredAfterCheckpoint(etWin *tw, E_TC_Event_Type ev_type)
1266 Eina_List *l = NULL;
1267 E_TC_Event_Item *item = NULL;
1268 Ecore_Window id = tw->native_win;
1270 EINA_LIST_CAST_FOREACH(ev.recv_queue, l, item, E_TC_Event_Item*)
1272 if (ev.last_checkpoint && ev.last_checkpoint != item)
1275 if ((item->win == id) && (item->type == ev_type))
1283 etRunner::setEventCheckpoint()
1285 ev.last_checkpoint = ev.last_event;
1290 etRunner::addSignalHandlers()
1292 Eldbus_Signal_Handler *sh = NULL;
1293 Ecore_Event_Handler *eh = NULL;
1297 sh = eldbus_proxy_signal_handler_add(dbus.ds_proxy,
1298 "VisibilityChanged",
1299 _cb_signal_vis_changed,
1301 EINA_SAFETY_ON_NULL_GOTO(sh, err);
1302 ev.sh_list = eina_list_append(ev.sh_list, sh);
1304 sh = eldbus_proxy_signal_handler_add(dbus.ds_proxy,
1306 _cb_signal_stack_changed,
1308 EINA_SAFETY_ON_NULL_GOTO(sh, err);
1309 ev.sh_list = eina_list_append(ev.sh_list, sh);
1311 sh = eldbus_proxy_signal_handler_add(dbus.ds_proxy,
1312 "WinRotationChanged",
1313 _cb_signal_win_rot_changed,
1315 EINA_SAFETY_ON_NULL_GOTO(sh, err);
1316 ev.sh_list = eina_list_append(ev.sh_list, sh);
1318 sh = eldbus_proxy_signal_handler_add(dbus.ds_proxy,
1320 _cb_signal_focus_changed,
1322 EINA_SAFETY_ON_NULL_GOTO(sh, err);
1323 ev.sh_list = eina_list_append(ev.sh_list, sh);
1325 sh = eldbus_proxy_signal_handler_add(dbus.ds_proxy,
1327 _cb_signal_render_while_effect_run,
1329 EINA_SAFETY_ON_NULL_GOTO(sh, err);
1330 ev.sh_list = eina_list_append(ev.sh_list, sh);
1332 sh = eldbus_proxy_signal_handler_add(dbus.ds_proxy,
1334 _cb_signal_aux_hint_changed,
1336 EINA_SAFETY_ON_NULL_GOTO(sh, err);
1337 ev.sh_list = eina_list_append(ev.sh_list, sh);
1339 eh = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _cb_ecore_key_down, 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(ECORE_EVENT_KEY_UP, _cb_ecore_key_up, 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_TAP, _cb_gesture_tap, this);
1348 EINA_SAFETY_ON_NULL_GOTO(eh, err);
1349 ev.eh_list = eina_list_append(ev.eh_list, eh);
1351 eh = ecore_event_handler_add(EFL_UTIL_EVENT_GESTURE_EDGE_SWIPE, _cb_gesture_edge_swipe, this);
1352 EINA_SAFETY_ON_NULL_GOTO(eh, err);
1353 ev.eh_list = eina_list_append(ev.eh_list, eh);
1355 eh = ecore_event_handler_add(EFL_UTIL_EVENT_GESTURE_EDGE_DRAG, _cb_gesture_edge_drag, this);
1356 EINA_SAFETY_ON_NULL_GOTO(eh, err);
1357 ev.eh_list = eina_list_append(ev.eh_list, eh);
1359 ev.key.ecore_state = EINA_FALSE;
1364 printf("failed to init handlers\n");
1365 delSignalHandlers();
1370 etRunner::delSignalHandlers()
1372 Eldbus_Signal_Handler *sh = NULL;
1373 Ecore_Event_Handler *eh = NULL;
1375 EINA_LIST_CAST_FREE(ev.sh_list, sh, Eldbus_Signal_Handler*)
1377 eldbus_signal_handler_del(sh);
1380 EINA_LIST_CAST_FREE(ev.eh_list, eh, Ecore_Event_Handler*)
1382 ecore_event_handler_del(eh);
1391 /* give a turn to deal with deferred job for given time*/
1392 addTimer(worker.waitTime);
1397 etRunner::work(double time)
1399 /* give a turn to deal with deferred job for given time*/
1400 if (time < 0.0) time = 0.0;
1407 etRunner::finishWork()
1416 etRunner::printWinInfoList()
1419 Eina_List *l = NULL, *ll = NULL;
1421 printf("--------------------------------------------------------------------------------------------------------------------------\n");
1422 l = getWinInfoList();
1423 EINA_LIST_CAST_FOREACH(l, ll, tw, etWin*)
1425 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",
1427 (unsigned int)tw->native_win,
1429 tw->x, tw->y, tw->w, tw->h,
1441 printf("--------------------------------------------------------------------------------------------------------------------------\n");
1445 etRunner::delTimer()
1447 if (!worker.timer) return;
1449 ecore_timer_del(worker.timer);
1450 worker.timer = NULL;
1454 etRunner::addTimer()
1458 worker.timer = ecore_timer_add(worker.waitTime,
1464 etRunner::addTimer(double time)
1468 worker.timer = ecore_timer_add(time,
1474 etRunner::waitForDestroy()
1476 work(E_TEST_WORK_TIME);
1480 etRunner::initProtocols()
1482 Eina_Iterator *globals = NULL;
1483 Ecore_Wl2_Global *global = NULL;
1484 struct wl_registry *registry = NULL;
1486 registry = ecore_wl2_display_registry_get(ecore_wl2_connected_display_get(NULL));
1487 globals = ecore_wl2_display_globals_get(ecore_wl2_connected_display_get(NULL));
1489 EINA_SAFETY_ON_NULL_GOTO(registry, err);
1490 EINA_SAFETY_ON_NULL_GOTO(globals, err);
1492 EINA_ITERATOR_FOREACH(globals, global)
1494 if (!strcmp(global->interface, "tizen_policy"))
1496 tzPolicy = (struct tizen_policy *)
1497 wl_registry_bind(registry,
1499 &tizen_policy_interface,
1500 (global->version > 7)? 7 : global->version);
1502 if (!strcmp(global->interface, "tizen_surface"))
1504 tzSurface = (struct tizen_surface *)
1505 wl_registry_bind(registry,
1507 &tizen_surface_interface,
1508 (global->version > 1)? 1 : global->version);
1510 if (!strcmp(global->interface, "tizen_launch_effect"))
1512 tzlaunch_effect = (struct tizen_launch_effect *)
1513 wl_registry_bind(registry,
1515 &tizen_launch_effect_interface,
1516 (global->version > 1)? 1 : global->version);
1518 if (!strcmp(global->interface, "wl_output"))
1520 wlOutput = (struct wl_output *)
1521 wl_registry_bind(registry,
1523 &wl_output_interface,
1524 (global->version > 2)? 2 : global->version);
1525 wl_output_add_listener(wlOutput, &_e_test_output_listener, NULL);
1531 wl_output_destroy(wlOutput);
1537 EINA_SAFETY_ON_NULL_GOTO(tzPolicy, err);
1538 EINA_SAFETY_ON_NULL_GOTO(tzSurface, err);
1539 EINA_SAFETY_ON_NULL_GOTO(tzlaunch_effect, err);
1541 eina_iterator_free(globals);
1546 eina_iterator_free(globals);
1550 /* callbacks - method */
1552 _cb_method_win_info_get(void *data,
1553 const Eldbus_Message *msg,
1556 const char *name = NULL, *text = NULL, *wname = NULL;
1558 Eina_Bool res = EINA_FALSE;
1562 res = eldbus_message_error_get(msg, &name, &text);
1563 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1565 res = eldbus_message_arguments_get
1570 &tw->x, &tw->y, &tw->w, &tw->h,
1586 // change window name from char * to Eina_Stringshare
1588 eina_stringshare_del(tw->name);
1589 tw->name = eina_stringshare_add(wname);
1593 if ((name) || (text))
1595 ERR("errname:%s errmsg:%s\n", name, text);
1598 etRunner::get().finishWork();
1602 _cb_method_win_info_list_get(void *data,
1603 const Eldbus_Message *msg,
1606 const char *name = NULL, *text = NULL, *wname = NULL;
1607 Eldbus_Message_Iter *array = NULL, *ec = NULL;
1608 Window_Info_List *info_list = (Window_Info_List *)data;
1609 Eina_Bool res = EINA_FALSE, animating = EINA_FALSE;
1611 if (info_list == NULL)
1614 res = eldbus_message_error_get(msg, &name, &text);
1615 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1617 res = eldbus_message_arguments_get(msg, "a(" E_TC_SIGN_WIN_INFO ")", &array);
1618 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1620 while (eldbus_message_iter_get_and_next(array, 'r', &ec))
1622 etWin *tw = new etWin();
1625 res = eldbus_message_iter_arguments_get(
1630 &tw->x, &tw->y, &tw->w, &tw->h,
1646 // change name to eina_stringshare
1649 WRN("Failed to get win info\n");
1653 tw->name = eina_stringshare_add(wname);
1657 animating = EINA_TRUE;
1661 WRN("Failed to get win info\n");
1666 info_list->list = eina_list_append(info_list->list, tw);
1670 info_list->retry = EINA_TRUE;
1673 if ((name) || (text))
1675 ERR("errname:%s errmsg:%s\n", name, text);
1678 etRunner::get().finishWork();
1682 _cb_method_window_register(void *data,
1683 const Eldbus_Message *msg,
1686 const char *name = NULL, *text = NULL;
1687 Eina_Bool res = EINA_FALSE;
1688 Eina_Bool *accepted = (Eina_Bool *)data;
1690 *accepted = EINA_FALSE;
1692 res = eldbus_message_error_get(msg, &name, &text);
1693 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1695 res = eldbus_message_arguments_get(msg, "b", accepted);
1698 if ((name) || (text))
1700 ERR("errname: %s errmsg: %s\n", name, text);
1703 etRunner::get().finishWork();
1707 _cb_method_zone_rotation_change(void *data,
1708 const Eldbus_Message *msg,
1711 const char *name = NULL, *text = NULL;
1712 Eina_Bool res = EINA_FALSE;
1713 Eina_Bool *allowed = (Eina_Bool *)data;
1715 *allowed = EINA_FALSE;
1717 res = eldbus_message_error_get(msg, &name, &text);
1718 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1720 res = eldbus_message_arguments_get(msg, "b", allowed);
1721 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1722 EINA_SAFETY_ON_FALSE_GOTO(*allowed, finish);
1725 if ((name) || (text))
1727 ERR("errname: %s errmsg: %s\n", name, text);
1730 etRunner::get().finishWork();
1734 _cb_method_window_effect(void *data,
1735 const Eldbus_Message *msg,
1738 const char *name = NULL, *text = NULL;
1739 Eina_Bool res = EINA_FALSE;
1740 Eina_Bool *allowed = (Eina_Bool *)data;
1742 *allowed = EINA_FALSE;
1744 res = eldbus_message_error_get(msg, &name, &text);
1745 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1747 res = eldbus_message_arguments_get(msg, "b", allowed);
1748 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1749 EINA_SAFETY_ON_FALSE_GOTO(*allowed, finish);
1752 if ((name) || (text))
1754 ERR("errname: %s errmsg: %s\n", name, text);
1757 etRunner::get().finishWork();
1761 _cb_method_set_tc_start_end(void *data,
1762 const Eldbus_Message *msg,
1765 const char *name = NULL, *text = NULL;
1766 Eina_Bool res = EINA_FALSE;
1767 Eina_Bool *accept = (Eina_Bool *)data;
1769 *accept = EINA_FALSE;
1771 res = eldbus_message_error_get(msg, &name, &text);
1772 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1774 res = eldbus_message_arguments_get(msg, "b", accept);
1775 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1776 EINA_SAFETY_ON_FALSE_GOTO(*accept, finish);
1779 if ((name) || (text))
1781 ERR("errname: %s errmsg: %s\n", name, text);
1784 etRunner::get().finishWork();
1788 _cb_method_transient_for_below(void *data,
1789 const Eldbus_Message *msg,
1792 const char *name = NULL, *text = NULL;
1793 Eina_Bool res = EINA_FALSE;
1794 Eina_Bool *accept = (Eina_Bool *)data;
1796 *accept = EINA_FALSE;
1798 res = eldbus_message_error_get(msg, &name, &text);
1799 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1801 res = eldbus_message_arguments_get(msg, "b", accept);
1802 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1803 EINA_SAFETY_ON_FALSE_GOTO(*accept, finish);
1806 if ((name) || (text))
1808 ERR("errname: %s errmsg: %s\n", name, text);
1811 etRunner::get().finishWork();
1814 /* callbacks - signal */
1816 _cb_signal_vis_changed(void *data,
1817 const Eldbus_Message *msg)
1819 etRunner *runner = (etRunner *)data;
1820 const char *name = NULL, *text = NULL;
1821 Eina_Bool res = EINA_FALSE;
1825 res = eldbus_message_error_get(msg, &name, &text);
1826 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1828 res = eldbus_message_arguments_get(msg, "ub", &id, &vis);
1829 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1831 runner->insertEventQueue(id, E_TC_EVENT_TYPE_VIS_CHANGED);
1834 if ((name) || (text))
1836 ERR("errname:%s errmsg:%s\n", name, text);
1841 _cb_signal_stack_changed(void *data,
1842 const Eldbus_Message *msg)
1844 etRunner *runner = (etRunner *)data;
1845 const char *name = NULL, *text = NULL;
1846 Eina_Bool res = EINA_FALSE;
1847 Ecore_Window id = 0;
1849 res = eldbus_message_error_get(msg, &name, &text);
1850 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1852 res = eldbus_message_arguments_get(msg, "u", &id);
1853 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1855 runner->insertEventQueue(id, E_TC_EVENT_TYPE_STACK_CHANGED);
1858 if ((name) || (text))
1860 ERR("errname:%s errmsg:%s\n", name, text);
1865 _cb_signal_win_rot_changed(void *data,
1866 const Eldbus_Message *msg)
1868 etRunner *runner = (etRunner *)data;
1869 const char *name = NULL, *text = NULL;
1870 Eina_Bool res = EINA_FALSE;
1874 res = eldbus_message_error_get(msg, &name, &text);
1875 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1877 /* TODO unused 'window id' and 'angle' */
1878 res = eldbus_message_arguments_get(msg, "ui", &id, &angle);
1879 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1881 runner->insertEventQueue(id, E_TC_EVENT_TYPE_WINDOW_ROTATION_CHANGE);
1884 if ((name) || (text))
1886 ERR("errname:%s errmsg:%s\n", name, text);
1891 _cb_signal_focus_changed(void *data,
1892 const Eldbus_Message *msg)
1894 etRunner *runner = (etRunner *)data;
1895 const char *name = NULL, *text = NULL;
1896 Eina_Bool res = EINA_FALSE;
1897 Ecore_Window id = 0;
1899 res = eldbus_message_error_get(msg, &name, &text);
1900 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1902 res = eldbus_message_arguments_get(msg, "u", &id);
1903 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1905 runner->insertEventQueue(id, E_TC_EVENT_TYPE_FOCUS_CHANGED);
1908 if ((name) || (text))
1910 ERR("errname:%s errmsg:%s\n", name, text);
1915 _cb_signal_render_while_effect_run(void *data,
1916 const Eldbus_Message *msg)
1918 etRunner *runner = (etRunner *)data;
1919 const char *name = NULL, *text = NULL;
1920 Eina_Bool res = EINA_FALSE;
1921 Ecore_Window id = 0;
1923 res = eldbus_message_error_get(msg, &name, &text);
1924 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1926 res = eldbus_message_arguments_get(msg, "u", &id);
1927 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1929 runner->insertEventQueue(id, E_TC_EVENT_TYPE_EFFECT);
1932 if ((name) || (text))
1934 ERR("errname:%s errmsg:%s\n", name, text);
1939 _cb_signal_aux_hint_changed(void *data,
1940 const Eldbus_Message *msg)
1942 etRunner *runner = (etRunner *)data;
1943 const char *name = NULL, *text = NULL;
1944 Eina_Bool res = EINA_FALSE;
1945 Ecore_Window win = 0;
1947 const char *hint_key, *hint_val;
1949 res = eldbus_message_error_get(msg, &name, &text);
1950 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1952 res = eldbus_message_arguments_get(msg, "uuss", &win, &hint_id, &hint_key, &hint_val);
1953 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1955 runner->insertEventQueue(win, E_TC_EVENT_TYPE_AUX_HINT_CHANGED);
1958 if ((name) || (text))
1960 ERR("errname:%s errmsg:%s\n", name, text);
1964 /* callbacks - timer */
1966 _cb_work_timeout(void *data)
1968 etRunner::get().finishWork();
1969 return ECORE_CALLBACK_CANCEL;
1972 /* callbacks - ecore */
1974 _cb_ecore_key_down(void *data, int type, void *event)
1976 Ecore_Event_Key *ev = (Ecore_Event_Key *)event;
1977 etRunner *runner = (etRunner *)data;
1979 if (runner->ev.key.name == NULL) return ECORE_CALLBACK_PASS_ON;
1981 if (!strncmp(runner->ev.key.name, ev->keyname, strlen(ev->keyname)))
1983 if (runner->ev.key.ecore_state == EINA_FALSE &&
1984 type == ECORE_EVENT_KEY_DOWN)
1986 runner->ev.key.ecore_state = EINA_TRUE;
1990 return ECORE_CALLBACK_PASS_ON;
1994 _cb_ecore_key_up(void *data, int type, void *event)
1996 Ecore_Event_Key *ev = (Ecore_Event_Key *)event;
1997 etRunner *runner = (etRunner *)data;
1999 if (runner->ev.key.name == NULL) return ECORE_CALLBACK_PASS_ON;
2001 if (!strncmp(runner->ev.key.name, ev->keyname, strlen(ev->keyname)))
2003 if (runner->ev.key.ecore_state == EINA_TRUE &&
2004 type == ECORE_EVENT_KEY_UP)
2006 runner->ev.key.ecore_state = EINA_FALSE;
2007 runner->insertEventQueue(0, E_TC_EVENT_TYPE_INPUT_ECORE_KEY);
2011 return ECORE_CALLBACK_PASS_ON;
2014 /* callbacks - evas */
2016 _cb_evas_key_down(void *data, Evas * evas, Evas_Object * obj, void * event_info)
2018 Evas_Event_Key_Down *ev;
2019 etRunner *runner = (etRunner *)data;
2021 ev = (Evas_Event_Key_Down *)event_info;
2023 if (!strncmp(runner->ev.key.name, ev->keyname, strlen(ev->keyname)))
2025 if (runner->ev.key.evas_state == EINA_FALSE &&
2026 runner->ev.elm_win == obj)
2028 runner->ev.key.evas_state = EINA_TRUE;
2034 _cb_evas_key_up(void * data, Evas * evas, Evas_Object * obj, void * event_info)
2036 Evas_Event_Key_Up *ev;
2037 etRunner *runner = (etRunner *)data;
2039 ev = (Evas_Event_Key_Up *)event_info;
2041 if (!strncmp(runner->ev.key.name, ev->keyname, strlen(ev->keyname)))
2043 if (runner->ev.key.evas_state == EINA_TRUE &&
2044 runner->ev.elm_win == obj)
2046 runner->ev.key.evas_state = EINA_FALSE;
2047 runner->ev.elm_win = NULL;
2049 runner->insertEventQueue(runner->ev.native_win, E_TC_EVENT_TYPE_INPUT_EVAS_KEY);
2054 /* callbacks - smart object */
2056 _cb_evas_smart_cb_effect_started(void *data, Evas_Object * obj, void *event_info)
2058 etRunner *runner = (etRunner *)data;
2059 if (runner && runner->ev.elm_win == obj)
2061 runner->ev.effect.state_smcb = E_TC_EVAS_SMART_CB_STATE_EFFECT_STARTED;
2066 _cb_evas_smart_cb_effect_done(void *data, Evas_Object * obj, void *event_info)
2068 etRunner *runner = (etRunner *)data;
2069 if (runner && runner->ev.elm_win == obj)
2071 runner->ev.effect.state_smcb |= E_TC_EVAS_SMART_CB_STATE_EFFECT_DONE;
2073 runner->insertEventQueue(runner->ev.native_win, E_TC_EVENT_TYPE_EFFECT_EVAS_CB);
2075 evas_object_smart_callback_del(runner->ev.elm_win, effect_started, _cb_evas_smart_cb_effect_started);
2076 evas_object_smart_callback_del(runner->ev.elm_win, effect_done, _cb_evas_smart_cb_effect_done);
2077 evas_object_smart_callback_del(runner->ev.elm_win, launch_done, _cb_evas_smart_cb_launch_done);
2082 _cb_evas_smart_cb_launch_done(void *data, Evas_Object * obj, void *event_info)
2084 etRunner *runner = (etRunner *)data;
2085 if (runner && runner->ev.elm_win == obj)
2087 runner->ev.effect.state_smcb |= E_TC_EVAS_SMART_CB_STATE_LAUNCH_DONE;
2089 if((runner->ev.effect.state_smcb & E_TC_EVAS_SMART_CB_STATE_EFFECT_STARTED) &&
2090 (runner->ev.effect.state_smcb & E_TC_EVAS_SMART_CB_STATE_EFFECT_DONE) &&
2091 (runner->ev.effect.state_smcb & E_TC_EVAS_SMART_CB_STATE_LAUNCH_DONE))
2093 runner->insertEventQueue(runner->ev.native_win, E_TC_EVENT_TYPE_EFFECT_EVAS_CB);
2095 evas_object_smart_callback_del(runner->ev.elm_win, effect_started, _cb_evas_smart_cb_effect_started);
2096 evas_object_smart_callback_del(runner->ev.elm_win, effect_done, _cb_evas_smart_cb_effect_done);
2097 evas_object_smart_callback_del(runner->ev.elm_win, launch_done, _cb_evas_smart_cb_launch_done);
2103 _cb_gesture_tap(void *data, int type, void *event)
2105 etRunner *runner = (etRunner *)data;
2106 efl_util_event_gesture_tap_s *ev =
2107 (efl_util_event_gesture_tap_s *)event;
2109 if ((ev->fingers == (unsigned int)runner->ev.gesture.tap.fingers) &&
2110 (ev->repeats == (unsigned int)runner->ev.gesture.tap.repeats))
2112 runner->insertEventQueue(0, E_TC_EVENT_TYPE_GESTURE_TAP);
2113 //ecore_event_handler_del(runner->ev.key.eh);
2116 return ECORE_CALLBACK_PASS_ON;
2120 _cb_gesture_tap_delay_timer(void *data)
2122 etRunner *runner = (etRunner *)data;
2125 for (i = 0; i < runner->ev.gesture.tap.fingers; i++)
2127 if (!runner->ev.gesture.tap.pressed)
2129 runner->generateTouchDown(i, 100 * (i + 1), 100 * (i + 1));
2133 runner->generateTouchUp(i, 100 * (i + 1), 100 * (i + 1));
2137 runner->ev.gesture.timer = NULL;
2139 runner->ev.gesture.tap.pressed = !runner->ev.gesture.tap.pressed;
2140 if (!runner->ev.gesture.tap.pressed)
2142 runner->ev.gesture.tap.current_repeats--;
2145 if (runner->ev.gesture.tap.current_repeats > 0)
2147 runner->ev.gesture.timer = ecore_timer_add(0.11,
2148 _cb_gesture_tap_delay_timer,
2152 return ECORE_CALLBACK_CANCEL;
2156 etRunner::generateTapGesture()
2158 ev.gesture.tap.current_repeats = ev.gesture.tap.repeats;
2159 ev.gesture.tap.pressed = EINA_FALSE;
2161 ev.gesture.timer = ecore_timer_add(0.11,
2162 _cb_gesture_tap_delay_timer,
2169 _cb_gesture_edge_swipe(void *data, int type, void *event)
2171 etRunner *runner = (etRunner *)data;
2172 efl_util_event_gesture_edge_swipe_s *ev =
2173 (efl_util_event_gesture_edge_swipe_s *)event;
2175 if ((ev->fingers == (unsigned int)runner->ev.gesture.edge.fingers) &&
2176 (ev->edge == (unsigned int)runner->ev.gesture.edge.edge))
2178 if (runner->ev.gesture.timer)
2179 runner->ev.gesture.edge.get_event = EINA_TRUE;
2182 return ECORE_CALLBACK_PASS_ON;
2186 _cb_gesture_edge_swipe_delay_timer(void *data)
2188 etRunner *runner = (etRunner *)data;
2189 int i, cnt, fingers, w, h;
2190 efl_util_gesture_edge_e edge;
2192 cnt = ++runner->ev.gesture.edge.touch_count;
2193 fingers = runner->ev.gesture.edge.fingers;
2194 edge = runner->ev.gesture.edge.edge;
2195 w = runner->output.w - 1;
2196 h = runner->output.h - 1;
2200 for (i = 0; i < fingers; i++)
2204 case EFL_UTIL_GESTURE_EDGE_TOP:
2205 runner->generateTouchDown(i, 100 * (i + 1), 1);
2207 case EFL_UTIL_GESTURE_EDGE_RIGHT:
2208 runner->generateTouchDown(i, w - 1, 100 * (i + 1));
2210 case EFL_UTIL_GESTURE_EDGE_BOTTOM:
2211 runner->generateTouchDown(i, 100 * (i + 1), h - 1);
2213 case EFL_UTIL_GESTURE_EDGE_LEFT:
2214 runner->generateTouchDown(i, 1, 100 * (i + 1));
2223 for (i = 0; i < fingers; i++)
2227 case EFL_UTIL_GESTURE_EDGE_TOP:
2228 runner->generateTouchMove(i, 100 * (i + 1), 40 * cnt * cnt);
2230 case EFL_UTIL_GESTURE_EDGE_RIGHT:
2231 runner->generateTouchMove(i, (w - 1) - (40 * cnt * cnt), 100 * (i + 1));
2233 case EFL_UTIL_GESTURE_EDGE_BOTTOM:
2234 runner->generateTouchMove(i, 100 * (i + 1), (h - 1) - (40 * cnt * cnt));
2236 case EFL_UTIL_GESTURE_EDGE_LEFT:
2237 runner->generateTouchMove(i, 40 * cnt * cnt, 100 * (i + 1));
2247 for (i = 0; i < fingers; i++)
2251 case EFL_UTIL_GESTURE_EDGE_TOP:
2252 runner->generateTouchUp(i, 100 * (i + 1), 40 * cnt * cnt);
2254 case EFL_UTIL_GESTURE_EDGE_RIGHT:
2255 runner->generateTouchUp(i, (w - 1) - (40 * cnt * cnt), 100 * (i + 1));
2257 case EFL_UTIL_GESTURE_EDGE_BOTTOM:
2258 runner->generateTouchUp(i, 100 * (i + 1), (h - 1) - (40 * cnt * cnt));
2260 case EFL_UTIL_GESTURE_EDGE_LEFT:
2261 runner->generateTouchUp(i, 40 * cnt * cnt, 100 * (i + 1));
2268 runner->ev.gesture.timer = NULL;
2269 if (runner->ev.gesture.edge.get_event)
2271 runner->insertEventQueue(0, E_TC_EVENT_TYPE_GESTURE_EDGE_SWIPE);
2272 //ecore_event_handler_del(runner->ev.key.eh);
2274 return ECORE_CALLBACK_CANCEL;
2277 runner->ev.gesture.timer = NULL;
2278 runner->ev.gesture.timer = ecore_timer_add(0.11,
2279 _cb_gesture_edge_swipe_delay_timer,
2282 return ECORE_CALLBACK_CANCEL;
2286 etRunner::generateEdgeSwipeGesture()
2288 ev.gesture.edge.touch_count = 0;
2289 ev.gesture.edge.get_event = EINA_FALSE;
2291 ev.gesture.timer = ecore_timer_add(0.11,
2292 _cb_gesture_edge_swipe_delay_timer,
2299 _cb_gesture_edge_drag(void *data, int type, void *event)
2301 etRunner *runner = (etRunner *)data;
2302 efl_util_event_gesture_edge_drag_s *ev =
2303 (efl_util_event_gesture_edge_drag_s *)event;
2305 if ((ev->fingers == (unsigned int)runner->ev.gesture.edge.fingers) &&
2306 (ev->edge == (unsigned int)runner->ev.gesture.edge.edge) &&
2307 (ev->mode == EFL_UTIL_GESTURE_MODE_END))
2309 runner->insertEventQueue(0, E_TC_EVENT_TYPE_GESTURE_EDGE_DRAG);
2310 //ecore_event_handler_del(runner->ev.key.eh);
2313 return ECORE_CALLBACK_PASS_ON;
2317 _cb_gesture_edge_drag_delay_timer(void *data)
2319 etRunner *runner = (etRunner *)data;
2320 int i, cnt, fingers, w, h;
2321 efl_util_gesture_edge_e edge;
2323 cnt = ++runner->ev.gesture.edge.touch_count;
2324 fingers = runner->ev.gesture.edge.fingers;
2325 edge = runner->ev.gesture.edge.edge;
2326 w = runner->output.w - 1;
2327 h = runner->output.h - 1;
2331 for (i = 0; i < fingers; i++)
2335 case EFL_UTIL_GESTURE_EDGE_TOP:
2336 runner->generateTouchDown(i, 100 * (i + 1), 1);
2338 case EFL_UTIL_GESTURE_EDGE_RIGHT:
2339 runner->generateTouchDown(i, w - 1, 100 * (i + 1));
2341 case EFL_UTIL_GESTURE_EDGE_BOTTOM:
2342 runner->generateTouchDown(i, 100 * (i + 1), h - 1);
2344 case EFL_UTIL_GESTURE_EDGE_LEFT:
2345 runner->generateTouchDown(i, 1, 100 * (i + 1));
2354 for (i = 0; i < fingers; i++)
2358 case EFL_UTIL_GESTURE_EDGE_TOP:
2359 runner->generateTouchMove(i, 100 * (i + 1), 50 * cnt);
2361 case EFL_UTIL_GESTURE_EDGE_RIGHT:
2362 runner->generateTouchMove(i, (w - 1) - (50 * cnt), 100 * (i + 1));
2364 case EFL_UTIL_GESTURE_EDGE_BOTTOM:
2365 runner->generateTouchMove(i, 100 * (i + 1), (h - 1) - (50 * cnt));
2367 case EFL_UTIL_GESTURE_EDGE_LEFT:
2368 runner->generateTouchMove(i, 50 * cnt, 100 * (i + 1));
2378 for (i = 0; i < fingers; i++)
2382 case EFL_UTIL_GESTURE_EDGE_TOP:
2383 runner->generateTouchUp(i, 100 * (i + 1), 50 * cnt);
2385 case EFL_UTIL_GESTURE_EDGE_RIGHT:
2386 runner->generateTouchUp(i, (w - 1) - (50 * cnt), 100 * (i + 1));
2388 case EFL_UTIL_GESTURE_EDGE_BOTTOM:
2389 runner->generateTouchUp(i, 100 * (i + 1), (h - 1) - (50 * cnt));
2391 case EFL_UTIL_GESTURE_EDGE_LEFT:
2392 runner->generateTouchUp(i, 50 * cnt, 100 * (i + 1));
2399 runner->ev.gesture.timer = NULL;
2400 return ECORE_CALLBACK_CANCEL;
2403 runner->ev.gesture.timer = NULL;
2404 runner->ev.gesture.timer = ecore_timer_add(0.11,
2405 _cb_gesture_edge_drag_delay_timer,
2408 return ECORE_CALLBACK_CANCEL;
2412 etRunner::generateEdgeDragGesture()
2414 ev.gesture.edge.touch_count = 0;
2416 ev.gesture.timer = ecore_timer_add(0.11,
2417 _cb_gesture_edge_drag_delay_timer,