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::addSupportedAuxHint(const char *hint)
1171 Eldbus_Pending *p = NULL;
1172 p = eldbus_proxy_call(dbus.ds_proxy,
1173 "AddSupportedAuxHint",
1179 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
1184 etRunner::delSupportedAuxHint(const char *hint)
1186 Eldbus_Pending *p = NULL;
1187 p = eldbus_proxy_call(dbus.ds_proxy,
1188 "DelSupportedAuxHint",
1194 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
1199 etRunner::waitEvent(etWin *win, E_TC_Event_Type ev_type)
1201 E_TC_Event_Item *recv_item = NULL;
1202 Eina_Bool res = EINA_FALSE;
1203 Eina_List *l = NULL;
1208 case E_TC_EVENT_TYPE_VIS_ON:
1209 case E_TC_EVENT_TYPE_VIS_OFF:
1210 case E_TC_EVENT_TYPE_VIS_CHANGED:
1211 ev_type = E_TC_EVENT_TYPE_VIS_CHANGED;
1213 case E_TC_EVENT_TYPE_STACK_RAISE:
1214 case E_TC_EVENT_TYPE_STACK_LOWER:
1215 case E_TC_EVENT_TYPE_STACK_ABOVE:
1216 case E_TC_EVENT_TYPE_STACK_BELOW:
1217 case E_TC_EVENT_TYPE_STACK_CHANGED:
1218 ev_type = E_TC_EVENT_TYPE_STACK_CHANGED;
1224 // Add event callbacks if needs
1225 if (ev_type == E_TC_EVENT_TYPE_EFFECT_EVAS_CB)
1227 ev.elm_win = win->elm_win;
1228 ev.native_win = win->native_win;
1229 ev.effect.state_smcb = E_TC_EVAS_SMART_CB_STATE_NONE;
1231 evas_object_smart_callback_add(this->ev.elm_win, effect_started, _cb_evas_smart_cb_effect_started, this);
1232 evas_object_smart_callback_add(this->ev.elm_win, effect_done, _cb_evas_smart_cb_effect_done, this);
1233 evas_object_smart_callback_add(this->ev.elm_win, launch_done, _cb_evas_smart_cb_launch_done, this);
1235 else if (ev_type == E_TC_EVENT_TYPE_INPUT_EVAS_KEY)
1237 ev.elm_win = win->elm_win;
1238 ev.native_win = win->native_win;
1239 evas_object_event_callback_add(this->ev.elm_win, EVAS_CALLBACK_KEY_DOWN, _cb_evas_key_down, this);
1240 evas_object_event_callback_add(this->ev.elm_win, EVAS_CALLBACK_KEY_UP, _cb_evas_key_up, this);
1242 ev.key.evas_state = EINA_FALSE;
1245 // pre-waiting events
1248 if (ev.wait_event_index == ev.last_event)
1250 work(0.5); // waiting additional time
1251 if (ev.wait_event_index == ev.last_event)
1255 EINA_LIST_CAST_FOREACH(ev.recv_queue, l, recv_item, E_TC_Event_Item*)
1257 if ((recv_item->win == (win?win->native_win:0)) &&
1258 (recv_item->type == ev_type))
1260 ev.wait_event_index = recv_item;
1270 etRunner::flushEventQueue()
1274 ev.recv_queue = eina_list_free(ev.recv_queue);
1275 ev.recv_queue = NULL;
1280 etRunner::insertEventQueue(Ecore_Window id, E_TC_Event_Type ev_type)
1282 E_TC_Event_Item *item = E_NEW(E_TC_Event_Item, 1);
1283 EINA_SAFETY_ON_NULL_RETURN_VAL(item, EINA_FALSE);
1286 item->type = ev_type;
1287 ev.recv_queue = eina_list_append(ev.recv_queue, item);
1288 ev.last_event = item;
1294 etRunner::isEventOccuredAfterCheckpoint(etWin *tw, E_TC_Event_Type ev_type)
1296 Eina_List *l = NULL;
1297 E_TC_Event_Item *item = NULL;
1298 Ecore_Window id = tw->native_win;
1300 EINA_LIST_CAST_FOREACH(ev.recv_queue, l, item, E_TC_Event_Item*)
1302 if (ev.last_checkpoint && ev.last_checkpoint != item)
1305 if ((item->win == id) && (item->type == ev_type))
1313 etRunner::setEventCheckpoint()
1315 ev.last_checkpoint = ev.last_event;
1320 etRunner::addSignalHandlers()
1322 Eldbus_Signal_Handler *sh = NULL;
1323 Ecore_Event_Handler *eh = NULL;
1327 sh = eldbus_proxy_signal_handler_add(dbus.ds_proxy,
1328 "VisibilityChanged",
1329 _cb_signal_vis_changed,
1331 EINA_SAFETY_ON_NULL_GOTO(sh, err);
1332 ev.sh_list = eina_list_append(ev.sh_list, sh);
1334 sh = eldbus_proxy_signal_handler_add(dbus.ds_proxy,
1336 _cb_signal_stack_changed,
1338 EINA_SAFETY_ON_NULL_GOTO(sh, err);
1339 ev.sh_list = eina_list_append(ev.sh_list, sh);
1341 sh = eldbus_proxy_signal_handler_add(dbus.ds_proxy,
1342 "WinRotationChanged",
1343 _cb_signal_win_rot_changed,
1345 EINA_SAFETY_ON_NULL_GOTO(sh, err);
1346 ev.sh_list = eina_list_append(ev.sh_list, sh);
1348 sh = eldbus_proxy_signal_handler_add(dbus.ds_proxy,
1350 _cb_signal_focus_changed,
1352 EINA_SAFETY_ON_NULL_GOTO(sh, err);
1353 ev.sh_list = eina_list_append(ev.sh_list, sh);
1355 sh = eldbus_proxy_signal_handler_add(dbus.ds_proxy,
1357 _cb_signal_render_while_effect_run,
1359 EINA_SAFETY_ON_NULL_GOTO(sh, err);
1360 ev.sh_list = eina_list_append(ev.sh_list, sh);
1362 sh = eldbus_proxy_signal_handler_add(dbus.ds_proxy,
1364 _cb_signal_aux_hint_changed,
1366 EINA_SAFETY_ON_NULL_GOTO(sh, err);
1367 ev.sh_list = eina_list_append(ev.sh_list, sh);
1369 eh = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _cb_ecore_key_down, this);
1370 EINA_SAFETY_ON_NULL_GOTO(eh, err);
1371 ev.eh_list = eina_list_append(ev.eh_list, eh);
1373 eh = ecore_event_handler_add(ECORE_EVENT_KEY_UP, _cb_ecore_key_up, this);
1374 EINA_SAFETY_ON_NULL_GOTO(eh, err);
1375 ev.eh_list = eina_list_append(ev.eh_list, eh);
1377 eh = ecore_event_handler_add(EFL_UTIL_EVENT_GESTURE_TAP, _cb_gesture_tap, this);
1378 EINA_SAFETY_ON_NULL_GOTO(eh, err);
1379 ev.eh_list = eina_list_append(ev.eh_list, eh);
1381 eh = ecore_event_handler_add(EFL_UTIL_EVENT_GESTURE_EDGE_SWIPE, _cb_gesture_edge_swipe, this);
1382 EINA_SAFETY_ON_NULL_GOTO(eh, err);
1383 ev.eh_list = eina_list_append(ev.eh_list, eh);
1385 eh = ecore_event_handler_add(EFL_UTIL_EVENT_GESTURE_EDGE_DRAG, _cb_gesture_edge_drag, this);
1386 EINA_SAFETY_ON_NULL_GOTO(eh, err);
1387 ev.eh_list = eina_list_append(ev.eh_list, eh);
1389 ev.key.ecore_state = EINA_FALSE;
1394 printf("failed to init handlers\n");
1395 delSignalHandlers();
1400 etRunner::delSignalHandlers()
1402 Eldbus_Signal_Handler *sh = NULL;
1403 Ecore_Event_Handler *eh = NULL;
1405 EINA_LIST_CAST_FREE(ev.sh_list, sh, Eldbus_Signal_Handler*)
1407 eldbus_signal_handler_del(sh);
1410 EINA_LIST_CAST_FREE(ev.eh_list, eh, Ecore_Event_Handler*)
1412 ecore_event_handler_del(eh);
1421 /* give a turn to deal with deferred job for given time*/
1422 addTimer(worker.waitTime);
1427 etRunner::work(double time)
1429 /* give a turn to deal with deferred job for given time*/
1430 if (time < 0.0) time = 0.0;
1437 etRunner::finishWork()
1446 etRunner::printWinInfoList()
1449 Eina_List *l = NULL, *ll = NULL;
1451 printf("--------------------------------------------------------------------------------------------------------------------------\n");
1452 l = getWinInfoList();
1453 EINA_LIST_CAST_FOREACH(l, ll, tw, etWin*)
1455 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",
1457 (unsigned int)tw->native_win,
1459 tw->x, tw->y, tw->w, tw->h,
1471 printf("--------------------------------------------------------------------------------------------------------------------------\n");
1475 etRunner::delTimer()
1477 if (!worker.timer) return;
1479 ecore_timer_del(worker.timer);
1480 worker.timer = NULL;
1484 etRunner::addTimer()
1488 worker.timer = ecore_timer_add(worker.waitTime,
1494 etRunner::addTimer(double time)
1498 worker.timer = ecore_timer_add(time,
1504 etRunner::waitForDestroy()
1506 work(E_TEST_WORK_TIME);
1510 etRunner::initProtocols()
1512 Eina_Iterator *globals = NULL;
1513 Ecore_Wl2_Global *global = NULL;
1514 struct wl_registry *registry = NULL;
1516 registry = ecore_wl2_display_registry_get(ecore_wl2_connected_display_get(NULL));
1517 globals = ecore_wl2_display_globals_get(ecore_wl2_connected_display_get(NULL));
1519 EINA_SAFETY_ON_NULL_GOTO(registry, err);
1520 EINA_SAFETY_ON_NULL_GOTO(globals, err);
1522 EINA_ITERATOR_FOREACH(globals, global)
1524 if (!strcmp(global->interface, "tizen_policy"))
1526 tzPolicy = (struct tizen_policy *)
1527 wl_registry_bind(registry,
1529 &tizen_policy_interface,
1530 (global->version > 7)? 7 : global->version);
1532 if (!strcmp(global->interface, "tizen_surface"))
1534 tzSurface = (struct tizen_surface *)
1535 wl_registry_bind(registry,
1537 &tizen_surface_interface,
1538 (global->version > 1)? 1 : global->version);
1540 if (!strcmp(global->interface, "tizen_launch_effect"))
1542 tzlaunch_effect = (struct tizen_launch_effect *)
1543 wl_registry_bind(registry,
1545 &tizen_launch_effect_interface,
1546 (global->version > 1)? 1 : global->version);
1548 if (!strcmp(global->interface, "wl_output"))
1550 wlOutput = (struct wl_output *)
1551 wl_registry_bind(registry,
1553 &wl_output_interface,
1554 (global->version > 2)? 2 : global->version);
1555 wl_output_add_listener(wlOutput, &_e_test_output_listener, NULL);
1561 wl_output_destroy(wlOutput);
1567 EINA_SAFETY_ON_NULL_GOTO(tzPolicy, err);
1568 EINA_SAFETY_ON_NULL_GOTO(tzSurface, err);
1569 EINA_SAFETY_ON_NULL_GOTO(tzlaunch_effect, err);
1571 eina_iterator_free(globals);
1576 eina_iterator_free(globals);
1580 /* callbacks - method */
1582 _cb_method_win_info_get(void *data,
1583 const Eldbus_Message *msg,
1586 const char *name = NULL, *text = NULL, *wname = NULL;
1588 Eina_Bool res = EINA_FALSE;
1592 res = eldbus_message_error_get(msg, &name, &text);
1593 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1595 res = eldbus_message_arguments_get
1600 &tw->x, &tw->y, &tw->w, &tw->h,
1616 // change window name from char * to Eina_Stringshare
1618 eina_stringshare_del(tw->name);
1619 tw->name = eina_stringshare_add(wname);
1623 if ((name) || (text))
1625 ERR("errname:%s errmsg:%s\n", name, text);
1628 etRunner::get().finishWork();
1632 _cb_method_win_info_list_get(void *data,
1633 const Eldbus_Message *msg,
1636 const char *name = NULL, *text = NULL, *wname = NULL;
1637 Eldbus_Message_Iter *array = NULL, *ec = NULL;
1638 Window_Info_List *info_list = (Window_Info_List *)data;
1639 Eina_Bool res = EINA_FALSE, animating = EINA_FALSE;
1641 if (info_list == NULL)
1644 res = eldbus_message_error_get(msg, &name, &text);
1645 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1647 res = eldbus_message_arguments_get(msg, "a(" E_TC_SIGN_WIN_INFO ")", &array);
1648 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1650 while (eldbus_message_iter_get_and_next(array, 'r', &ec))
1652 etWin *tw = new etWin();
1655 res = eldbus_message_iter_arguments_get(
1660 &tw->x, &tw->y, &tw->w, &tw->h,
1676 // change name to eina_stringshare
1679 WRN("Failed to get win info\n");
1683 tw->name = eina_stringshare_add(wname);
1687 animating = EINA_TRUE;
1691 WRN("Failed to get win info\n");
1696 info_list->list = eina_list_append(info_list->list, tw);
1700 info_list->retry = EINA_TRUE;
1703 if ((name) || (text))
1705 ERR("errname:%s errmsg:%s\n", name, text);
1708 etRunner::get().finishWork();
1712 _cb_method_window_register(void *data,
1713 const Eldbus_Message *msg,
1716 const char *name = NULL, *text = NULL;
1717 Eina_Bool res = EINA_FALSE;
1718 Eina_Bool *accepted = (Eina_Bool *)data;
1720 *accepted = EINA_FALSE;
1722 res = eldbus_message_error_get(msg, &name, &text);
1723 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1725 res = eldbus_message_arguments_get(msg, "b", accepted);
1728 if ((name) || (text))
1730 ERR("errname: %s errmsg: %s\n", name, text);
1733 etRunner::get().finishWork();
1737 _cb_method_zone_rotation_change(void *data,
1738 const Eldbus_Message *msg,
1741 const char *name = NULL, *text = NULL;
1742 Eina_Bool res = EINA_FALSE;
1743 Eina_Bool *allowed = (Eina_Bool *)data;
1745 *allowed = EINA_FALSE;
1747 res = eldbus_message_error_get(msg, &name, &text);
1748 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1750 res = eldbus_message_arguments_get(msg, "b", allowed);
1751 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1752 EINA_SAFETY_ON_FALSE_GOTO(*allowed, finish);
1755 if ((name) || (text))
1757 ERR("errname: %s errmsg: %s\n", name, text);
1760 etRunner::get().finishWork();
1764 _cb_method_window_effect(void *data,
1765 const Eldbus_Message *msg,
1768 const char *name = NULL, *text = NULL;
1769 Eina_Bool res = EINA_FALSE;
1770 Eina_Bool *allowed = (Eina_Bool *)data;
1772 *allowed = EINA_FALSE;
1774 res = eldbus_message_error_get(msg, &name, &text);
1775 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1777 res = eldbus_message_arguments_get(msg, "b", allowed);
1778 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1779 EINA_SAFETY_ON_FALSE_GOTO(*allowed, finish);
1782 if ((name) || (text))
1784 ERR("errname: %s errmsg: %s\n", name, text);
1787 etRunner::get().finishWork();
1791 _cb_method_set_tc_start_end(void *data,
1792 const Eldbus_Message *msg,
1795 const char *name = NULL, *text = NULL;
1796 Eina_Bool res = EINA_FALSE;
1797 Eina_Bool *accept = (Eina_Bool *)data;
1799 *accept = EINA_FALSE;
1801 res = eldbus_message_error_get(msg, &name, &text);
1802 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1804 res = eldbus_message_arguments_get(msg, "b", accept);
1805 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1806 EINA_SAFETY_ON_FALSE_GOTO(*accept, finish);
1809 if ((name) || (text))
1811 ERR("errname: %s errmsg: %s\n", name, text);
1814 etRunner::get().finishWork();
1818 _cb_method_transient_for_below(void *data,
1819 const Eldbus_Message *msg,
1822 const char *name = NULL, *text = NULL;
1823 Eina_Bool res = EINA_FALSE;
1824 Eina_Bool *accept = (Eina_Bool *)data;
1826 *accept = EINA_FALSE;
1828 res = eldbus_message_error_get(msg, &name, &text);
1829 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1831 res = eldbus_message_arguments_get(msg, "b", accept);
1832 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1833 EINA_SAFETY_ON_FALSE_GOTO(*accept, finish);
1836 if ((name) || (text))
1838 ERR("errname: %s errmsg: %s\n", name, text);
1841 etRunner::get().finishWork();
1844 /* callbacks - signal */
1846 _cb_signal_vis_changed(void *data,
1847 const Eldbus_Message *msg)
1849 etRunner *runner = (etRunner *)data;
1850 const char *name = NULL, *text = NULL;
1851 Eina_Bool res = EINA_FALSE;
1855 res = eldbus_message_error_get(msg, &name, &text);
1856 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1858 res = eldbus_message_arguments_get(msg, "ub", &id, &vis);
1859 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1861 runner->insertEventQueue(id, E_TC_EVENT_TYPE_VIS_CHANGED);
1864 if ((name) || (text))
1866 ERR("errname:%s errmsg:%s\n", name, text);
1871 _cb_signal_stack_changed(void *data,
1872 const Eldbus_Message *msg)
1874 etRunner *runner = (etRunner *)data;
1875 const char *name = NULL, *text = NULL;
1876 Eina_Bool res = EINA_FALSE;
1877 Ecore_Window id = 0;
1879 res = eldbus_message_error_get(msg, &name, &text);
1880 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1882 res = eldbus_message_arguments_get(msg, "u", &id);
1883 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1885 runner->insertEventQueue(id, E_TC_EVENT_TYPE_STACK_CHANGED);
1888 if ((name) || (text))
1890 ERR("errname:%s errmsg:%s\n", name, text);
1895 _cb_signal_win_rot_changed(void *data,
1896 const Eldbus_Message *msg)
1898 etRunner *runner = (etRunner *)data;
1899 const char *name = NULL, *text = NULL;
1900 Eina_Bool res = EINA_FALSE;
1904 res = eldbus_message_error_get(msg, &name, &text);
1905 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1907 /* TODO unused 'window id' and 'angle' */
1908 res = eldbus_message_arguments_get(msg, "ui", &id, &angle);
1909 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1911 runner->insertEventQueue(id, E_TC_EVENT_TYPE_WINDOW_ROTATION_CHANGE);
1914 if ((name) || (text))
1916 ERR("errname:%s errmsg:%s\n", name, text);
1921 _cb_signal_focus_changed(void *data,
1922 const Eldbus_Message *msg)
1924 etRunner *runner = (etRunner *)data;
1925 const char *name = NULL, *text = NULL;
1926 Eina_Bool res = EINA_FALSE;
1927 Ecore_Window id = 0;
1929 res = eldbus_message_error_get(msg, &name, &text);
1930 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1932 res = eldbus_message_arguments_get(msg, "u", &id);
1933 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1935 runner->insertEventQueue(id, E_TC_EVENT_TYPE_FOCUS_CHANGED);
1938 if ((name) || (text))
1940 ERR("errname:%s errmsg:%s\n", name, text);
1945 _cb_signal_render_while_effect_run(void *data,
1946 const Eldbus_Message *msg)
1948 etRunner *runner = (etRunner *)data;
1949 const char *name = NULL, *text = NULL;
1950 Eina_Bool res = EINA_FALSE;
1951 Ecore_Window id = 0;
1953 res = eldbus_message_error_get(msg, &name, &text);
1954 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1956 res = eldbus_message_arguments_get(msg, "u", &id);
1957 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1959 runner->insertEventQueue(id, E_TC_EVENT_TYPE_EFFECT);
1962 if ((name) || (text))
1964 ERR("errname:%s errmsg:%s\n", name, text);
1969 _cb_signal_aux_hint_changed(void *data,
1970 const Eldbus_Message *msg)
1972 etRunner *runner = (etRunner *)data;
1973 const char *name = NULL, *text = NULL;
1974 Eina_Bool res = EINA_FALSE;
1975 Ecore_Window win = 0;
1977 const char *hint_key, *hint_val;
1979 res = eldbus_message_error_get(msg, &name, &text);
1980 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1982 res = eldbus_message_arguments_get(msg, "uuss", &win, &hint_id, &hint_key, &hint_val);
1983 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1985 runner->insertEventQueue(win, E_TC_EVENT_TYPE_AUX_HINT_CHANGED);
1988 if ((name) || (text))
1990 ERR("errname:%s errmsg:%s\n", name, text);
1994 /* callbacks - timer */
1996 _cb_work_timeout(void *data)
1998 etRunner::get().finishWork();
1999 return ECORE_CALLBACK_CANCEL;
2002 /* callbacks - ecore */
2004 _cb_ecore_key_down(void *data, int type, void *event)
2006 Ecore_Event_Key *ev = (Ecore_Event_Key *)event;
2007 etRunner *runner = (etRunner *)data;
2009 if (runner->ev.key.name == NULL) return ECORE_CALLBACK_PASS_ON;
2011 if (!strncmp(runner->ev.key.name, ev->keyname, strlen(ev->keyname)))
2013 if (runner->ev.key.ecore_state == EINA_FALSE &&
2014 type == ECORE_EVENT_KEY_DOWN)
2016 runner->ev.key.ecore_state = EINA_TRUE;
2020 return ECORE_CALLBACK_PASS_ON;
2024 _cb_ecore_key_up(void *data, int type, void *event)
2026 Ecore_Event_Key *ev = (Ecore_Event_Key *)event;
2027 etRunner *runner = (etRunner *)data;
2029 if (runner->ev.key.name == NULL) return ECORE_CALLBACK_PASS_ON;
2031 if (!strncmp(runner->ev.key.name, ev->keyname, strlen(ev->keyname)))
2033 if (runner->ev.key.ecore_state == EINA_TRUE &&
2034 type == ECORE_EVENT_KEY_UP)
2036 runner->ev.key.ecore_state = EINA_FALSE;
2037 runner->insertEventQueue(0, E_TC_EVENT_TYPE_INPUT_ECORE_KEY);
2041 return ECORE_CALLBACK_PASS_ON;
2044 /* callbacks - evas */
2046 _cb_evas_key_down(void *data, Evas * evas, Evas_Object * obj, void * event_info)
2048 Evas_Event_Key_Down *ev;
2049 etRunner *runner = (etRunner *)data;
2051 ev = (Evas_Event_Key_Down *)event_info;
2053 if (!strncmp(runner->ev.key.name, ev->keyname, strlen(ev->keyname)))
2055 if (runner->ev.key.evas_state == EINA_FALSE &&
2056 runner->ev.elm_win == obj)
2058 runner->ev.key.evas_state = EINA_TRUE;
2064 _cb_evas_key_up(void * data, Evas * evas, Evas_Object * obj, void * event_info)
2066 Evas_Event_Key_Up *ev;
2067 etRunner *runner = (etRunner *)data;
2069 ev = (Evas_Event_Key_Up *)event_info;
2071 if (!strncmp(runner->ev.key.name, ev->keyname, strlen(ev->keyname)))
2073 if (runner->ev.key.evas_state == EINA_TRUE &&
2074 runner->ev.elm_win == obj)
2076 runner->ev.key.evas_state = EINA_FALSE;
2077 runner->ev.elm_win = NULL;
2079 runner->insertEventQueue(runner->ev.native_win, E_TC_EVENT_TYPE_INPUT_EVAS_KEY);
2084 /* callbacks - smart object */
2086 _cb_evas_smart_cb_effect_started(void *data, Evas_Object * obj, void *event_info)
2088 etRunner *runner = (etRunner *)data;
2089 if (runner && runner->ev.elm_win == obj)
2091 runner->ev.effect.state_smcb = E_TC_EVAS_SMART_CB_STATE_EFFECT_STARTED;
2096 _cb_evas_smart_cb_effect_done(void *data, Evas_Object * obj, void *event_info)
2098 etRunner *runner = (etRunner *)data;
2099 if (runner && runner->ev.elm_win == obj)
2101 runner->ev.effect.state_smcb |= E_TC_EVAS_SMART_CB_STATE_EFFECT_DONE;
2103 runner->insertEventQueue(runner->ev.native_win, E_TC_EVENT_TYPE_EFFECT_EVAS_CB);
2105 evas_object_smart_callback_del(runner->ev.elm_win, effect_started, _cb_evas_smart_cb_effect_started);
2106 evas_object_smart_callback_del(runner->ev.elm_win, effect_done, _cb_evas_smart_cb_effect_done);
2107 evas_object_smart_callback_del(runner->ev.elm_win, launch_done, _cb_evas_smart_cb_launch_done);
2112 _cb_evas_smart_cb_launch_done(void *data, Evas_Object * obj, void *event_info)
2114 etRunner *runner = (etRunner *)data;
2115 if (runner && runner->ev.elm_win == obj)
2117 runner->ev.effect.state_smcb |= E_TC_EVAS_SMART_CB_STATE_LAUNCH_DONE;
2119 if((runner->ev.effect.state_smcb & E_TC_EVAS_SMART_CB_STATE_EFFECT_STARTED) &&
2120 (runner->ev.effect.state_smcb & E_TC_EVAS_SMART_CB_STATE_EFFECT_DONE) &&
2121 (runner->ev.effect.state_smcb & E_TC_EVAS_SMART_CB_STATE_LAUNCH_DONE))
2123 runner->insertEventQueue(runner->ev.native_win, E_TC_EVENT_TYPE_EFFECT_EVAS_CB);
2125 evas_object_smart_callback_del(runner->ev.elm_win, effect_started, _cb_evas_smart_cb_effect_started);
2126 evas_object_smart_callback_del(runner->ev.elm_win, effect_done, _cb_evas_smart_cb_effect_done);
2127 evas_object_smart_callback_del(runner->ev.elm_win, launch_done, _cb_evas_smart_cb_launch_done);
2133 _cb_gesture_tap(void *data, int type, void *event)
2135 etRunner *runner = (etRunner *)data;
2136 efl_util_event_gesture_tap_s *ev =
2137 (efl_util_event_gesture_tap_s *)event;
2139 if ((ev->fingers == (unsigned int)runner->ev.gesture.tap.fingers) &&
2140 (ev->repeats == (unsigned int)runner->ev.gesture.tap.repeats))
2142 runner->insertEventQueue(0, E_TC_EVENT_TYPE_GESTURE_TAP);
2143 //ecore_event_handler_del(runner->ev.key.eh);
2146 return ECORE_CALLBACK_PASS_ON;
2150 _cb_gesture_tap_delay_timer(void *data)
2152 etRunner *runner = (etRunner *)data;
2155 for (i = 0; i < runner->ev.gesture.tap.fingers; i++)
2157 if (!runner->ev.gesture.tap.pressed)
2159 runner->generateTouchDown(i, 100 * (i + 1), 100 * (i + 1));
2163 runner->generateTouchUp(i, 100 * (i + 1), 100 * (i + 1));
2167 runner->ev.gesture.timer = NULL;
2169 runner->ev.gesture.tap.pressed = !runner->ev.gesture.tap.pressed;
2170 if (!runner->ev.gesture.tap.pressed)
2172 runner->ev.gesture.tap.current_repeats--;
2175 if (runner->ev.gesture.tap.current_repeats > 0)
2177 runner->ev.gesture.timer = ecore_timer_add(0.11,
2178 _cb_gesture_tap_delay_timer,
2182 return ECORE_CALLBACK_CANCEL;
2186 etRunner::generateTapGesture()
2188 ev.gesture.tap.current_repeats = ev.gesture.tap.repeats;
2189 ev.gesture.tap.pressed = EINA_FALSE;
2191 ev.gesture.timer = ecore_timer_add(0.11,
2192 _cb_gesture_tap_delay_timer,
2199 _cb_gesture_edge_swipe(void *data, int type, void *event)
2201 etRunner *runner = (etRunner *)data;
2202 efl_util_event_gesture_edge_swipe_s *ev =
2203 (efl_util_event_gesture_edge_swipe_s *)event;
2205 if ((ev->fingers == (unsigned int)runner->ev.gesture.edge.fingers) &&
2206 (ev->edge == (unsigned int)runner->ev.gesture.edge.edge))
2208 if (runner->ev.gesture.timer)
2209 runner->ev.gesture.edge.get_event = EINA_TRUE;
2212 return ECORE_CALLBACK_PASS_ON;
2216 _cb_gesture_edge_swipe_delay_timer(void *data)
2218 etRunner *runner = (etRunner *)data;
2219 int i, cnt, fingers, w, h;
2220 efl_util_gesture_edge_e edge;
2222 cnt = ++runner->ev.gesture.edge.touch_count;
2223 fingers = runner->ev.gesture.edge.fingers;
2224 edge = runner->ev.gesture.edge.edge;
2225 w = runner->output.w - 1;
2226 h = runner->output.h - 1;
2230 for (i = 0; i < fingers; i++)
2234 case EFL_UTIL_GESTURE_EDGE_TOP:
2235 runner->generateTouchDown(i, 100 * (i + 1), 1);
2237 case EFL_UTIL_GESTURE_EDGE_RIGHT:
2238 runner->generateTouchDown(i, w - 1, 100 * (i + 1));
2240 case EFL_UTIL_GESTURE_EDGE_BOTTOM:
2241 runner->generateTouchDown(i, 100 * (i + 1), h - 1);
2243 case EFL_UTIL_GESTURE_EDGE_LEFT:
2244 runner->generateTouchDown(i, 1, 100 * (i + 1));
2253 for (i = 0; i < fingers; i++)
2257 case EFL_UTIL_GESTURE_EDGE_TOP:
2258 runner->generateTouchMove(i, 100 * (i + 1), 40 * cnt * cnt);
2260 case EFL_UTIL_GESTURE_EDGE_RIGHT:
2261 runner->generateTouchMove(i, (w - 1) - (40 * cnt * cnt), 100 * (i + 1));
2263 case EFL_UTIL_GESTURE_EDGE_BOTTOM:
2264 runner->generateTouchMove(i, 100 * (i + 1), (h - 1) - (40 * cnt * cnt));
2266 case EFL_UTIL_GESTURE_EDGE_LEFT:
2267 runner->generateTouchMove(i, 40 * cnt * cnt, 100 * (i + 1));
2277 for (i = 0; i < fingers; i++)
2281 case EFL_UTIL_GESTURE_EDGE_TOP:
2282 runner->generateTouchUp(i, 100 * (i + 1), 40 * cnt * cnt);
2284 case EFL_UTIL_GESTURE_EDGE_RIGHT:
2285 runner->generateTouchUp(i, (w - 1) - (40 * cnt * cnt), 100 * (i + 1));
2287 case EFL_UTIL_GESTURE_EDGE_BOTTOM:
2288 runner->generateTouchUp(i, 100 * (i + 1), (h - 1) - (40 * cnt * cnt));
2290 case EFL_UTIL_GESTURE_EDGE_LEFT:
2291 runner->generateTouchUp(i, 40 * cnt * cnt, 100 * (i + 1));
2298 runner->ev.gesture.timer = NULL;
2299 if (runner->ev.gesture.edge.get_event)
2301 runner->insertEventQueue(0, E_TC_EVENT_TYPE_GESTURE_EDGE_SWIPE);
2302 //ecore_event_handler_del(runner->ev.key.eh);
2304 return ECORE_CALLBACK_CANCEL;
2307 runner->ev.gesture.timer = NULL;
2308 runner->ev.gesture.timer = ecore_timer_add(0.11,
2309 _cb_gesture_edge_swipe_delay_timer,
2312 return ECORE_CALLBACK_CANCEL;
2316 etRunner::generateEdgeSwipeGesture()
2318 ev.gesture.edge.touch_count = 0;
2319 ev.gesture.edge.get_event = EINA_FALSE;
2321 ev.gesture.timer = ecore_timer_add(0.11,
2322 _cb_gesture_edge_swipe_delay_timer,
2329 _cb_gesture_edge_drag(void *data, int type, void *event)
2331 etRunner *runner = (etRunner *)data;
2332 efl_util_event_gesture_edge_drag_s *ev =
2333 (efl_util_event_gesture_edge_drag_s *)event;
2335 if ((ev->fingers == (unsigned int)runner->ev.gesture.edge.fingers) &&
2336 (ev->edge == (unsigned int)runner->ev.gesture.edge.edge) &&
2337 (ev->mode == EFL_UTIL_GESTURE_MODE_END))
2339 runner->insertEventQueue(0, E_TC_EVENT_TYPE_GESTURE_EDGE_DRAG);
2340 //ecore_event_handler_del(runner->ev.key.eh);
2343 return ECORE_CALLBACK_PASS_ON;
2347 _cb_gesture_edge_drag_delay_timer(void *data)
2349 etRunner *runner = (etRunner *)data;
2350 int i, cnt, fingers, w, h;
2351 efl_util_gesture_edge_e edge;
2353 cnt = ++runner->ev.gesture.edge.touch_count;
2354 fingers = runner->ev.gesture.edge.fingers;
2355 edge = runner->ev.gesture.edge.edge;
2356 w = runner->output.w - 1;
2357 h = runner->output.h - 1;
2361 for (i = 0; i < fingers; i++)
2365 case EFL_UTIL_GESTURE_EDGE_TOP:
2366 runner->generateTouchDown(i, 100 * (i + 1), 1);
2368 case EFL_UTIL_GESTURE_EDGE_RIGHT:
2369 runner->generateTouchDown(i, w - 1, 100 * (i + 1));
2371 case EFL_UTIL_GESTURE_EDGE_BOTTOM:
2372 runner->generateTouchDown(i, 100 * (i + 1), h - 1);
2374 case EFL_UTIL_GESTURE_EDGE_LEFT:
2375 runner->generateTouchDown(i, 1, 100 * (i + 1));
2384 for (i = 0; i < fingers; i++)
2388 case EFL_UTIL_GESTURE_EDGE_TOP:
2389 runner->generateTouchMove(i, 100 * (i + 1), 50 * cnt);
2391 case EFL_UTIL_GESTURE_EDGE_RIGHT:
2392 runner->generateTouchMove(i, (w - 1) - (50 * cnt), 100 * (i + 1));
2394 case EFL_UTIL_GESTURE_EDGE_BOTTOM:
2395 runner->generateTouchMove(i, 100 * (i + 1), (h - 1) - (50 * cnt));
2397 case EFL_UTIL_GESTURE_EDGE_LEFT:
2398 runner->generateTouchMove(i, 50 * cnt, 100 * (i + 1));
2408 for (i = 0; i < fingers; i++)
2412 case EFL_UTIL_GESTURE_EDGE_TOP:
2413 runner->generateTouchUp(i, 100 * (i + 1), 50 * cnt);
2415 case EFL_UTIL_GESTURE_EDGE_RIGHT:
2416 runner->generateTouchUp(i, (w - 1) - (50 * cnt), 100 * (i + 1));
2418 case EFL_UTIL_GESTURE_EDGE_BOTTOM:
2419 runner->generateTouchUp(i, 100 * (i + 1), (h - 1) - (50 * cnt));
2421 case EFL_UTIL_GESTURE_EDGE_LEFT:
2422 runner->generateTouchUp(i, 50 * cnt, 100 * (i + 1));
2429 runner->ev.gesture.timer = NULL;
2430 return ECORE_CALLBACK_CANCEL;
2433 runner->ev.gesture.timer = NULL;
2434 runner->ev.gesture.timer = ecore_timer_add(0.11,
2435 _cb_gesture_edge_drag_delay_timer,
2438 return ECORE_CALLBACK_CANCEL;
2442 etRunner::generateEdgeDragGesture()
2444 ev.gesture.edge.touch_count = 0;
2446 ev.gesture.timer = ecore_timer_add(0.11,
2447 _cb_gesture_edge_drag_delay_timer,