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::addAuxHint(etWin *tw, int hint_id, const char *hint_key, const char *hint_val)
506 Ecore_Wl2_Window *wlwin = NULL;
508 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
510 wlwin = (Ecore_Wl2_Window *)elm_win_wl_window_get(tw->elm_win);
511 EINA_SAFETY_ON_NULL_RETURN_VAL(wlwin, EINA_FALSE);
513 ecore_wl2_window_aux_hint_add(wlwin, hint_id, hint_key, hint_val);
519 etRunner::changeAuxHint(etWin *tw, int hint_id, const char *hint_val)
521 Ecore_Wl2_Window *wlwin = NULL;
523 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
525 wlwin = (Ecore_Wl2_Window *)elm_win_wl_window_get(tw->elm_win);
526 EINA_SAFETY_ON_NULL_RETURN_VAL(wlwin, EINA_FALSE);
528 ecore_wl2_window_aux_hint_change(wlwin, hint_id, hint_val);
534 etRunner::delAuxHint(etWin *tw, int hint_id)
536 Ecore_Wl2_Window *wlwin = NULL;
538 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
540 wlwin = (Ecore_Wl2_Window *)elm_win_wl_window_get(tw->elm_win);
541 EINA_SAFETY_ON_NULL_RETURN_VAL(wlwin, EINA_FALSE);
543 ecore_wl2_window_aux_hint_del(wlwin, hint_id);
549 etRunner::setTCStart()
551 Eldbus_Pending *p = NULL;
552 Eina_Bool res = EINA_FALSE;
554 p = eldbus_proxy_call(dbus.ds_proxy,
556 _cb_method_set_tc_start_end,
560 EINA_SAFETY_ON_NULL_GOTO(p, err);
564 EINA_SAFETY_ON_FALSE_GOTO(res, err);
576 Eldbus_Pending *p = NULL;
577 Eina_Bool res = EINA_FALSE;
579 p = eldbus_proxy_call(dbus.ds_proxy,
581 _cb_method_set_tc_start_end,
585 if (p == NULL) res = EINA_FALSE;
589 EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE);
595 etRunner::getWinInfo(etWin *tw)
597 Eldbus_Pending *p = NULL;
601 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
603 win = tw->native_win;
608 p = eldbus_proxy_call(dbus.ds_proxy,
610 _cb_method_win_info_get,
615 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
619 if ((tw->native_win == win) && (!tw->effect))
625 if (tw->native_win != win)
627 ERR("Something Wrong. Difference with quering window"
628 "and received window from server");
629 tw->native_win = win;
636 etRunner::getWinInfoList()
638 Eldbus_Pending *p = NULL;
639 Window_Info_List *info_list = NULL;
641 Eina_List *result = NULL;
643 info_list = E_NEW(Window_Info_List, 1);
644 EINA_SAFETY_ON_NULL_RETURN_VAL(info_list, NULL);
648 p = eldbus_proxy_call(dbus.ds_proxy,
650 _cb_method_win_info_list_get,
654 EINA_SAFETY_ON_NULL_RETURN_VAL(p, NULL);
658 if (info_list->retry)
660 info_list->retry = EINA_FALSE;
661 EINA_LIST_CAST_FREE(info_list->list, tw, etWin*)
673 result = eina_list_clone(info_list->list);
676 freeLastWinInfoList();
677 listWinInfo = result;
683 etRunner::freeWinInfoList(Eina_List *list)
687 EINA_SAFETY_ON_NULL_RETURN(list);
689 if (listWinInfo == list)
692 EINA_LIST_CAST_FREE(list, tw, etWin*)
702 etRunner::freeLastWinInfoList()
705 freeWinInfoList(listWinInfo);
711 etRunner::setLastWinInfoList(Eina_List *list)
713 EINA_SAFETY_ON_NULL_RETURN(list);
715 freeLastWinInfoList();
721 etRunner::getWinId(Evas_Object *elm_win)
723 struct wl_surface *surf = NULL;
725 struct tizen_resource *tzres = NULL;
727 surf = getWlSurface(elm_win);
728 EINA_SAFETY_ON_NULL_RETURN_VAL(surf, 0);
730 tzres = tizen_surface_get_tizen_resource(tzSurface, surf);
731 EINA_SAFETY_ON_NULL_RETURN_VAL(tzres, 0);
733 tizen_resource_add_listener(tzres,
734 &_e_test_tizen_resource_listener, &id);
738 tizen_resource_destroy(tzres);
744 etRunner::getWlSurface(Evas_Object *elm_win)
746 Ecore_Wl2_Window *wlwin = NULL;
747 struct wl_surface *surf = NULL;
749 EINA_SAFETY_ON_NULL_RETURN_VAL(elm_win, NULL);
751 wlwin = (Ecore_Wl2_Window *)elm_win_wl_window_get(elm_win);
752 EINA_SAFETY_ON_NULL_RETURN_VAL(wlwin, NULL);
754 surf = ecore_wl2_window_surface_get(wlwin);
755 EINA_SAFETY_ON_NULL_RETURN_VAL(surf, NULL);
761 etRunner::setDpms(Eina_Bool on)
763 Eldbus_Pending *p = NULL;
764 p = eldbus_proxy_call(dbus.ds_proxy,
771 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
776 etRunner::setDevctlDisplayLock(Eina_Bool lock)
778 Eldbus_Pending *p = NULL;
782 p = eldbus_proxy_call(dbus.deviced_proxy,
795 p = eldbus_proxy_call(dbus.deviced_proxy,
804 EINA_SAFETY_ON_TRUE_RETURN_VAL(p != NULL, EINA_FALSE);
810 etRunner::setDevctlDisplayOn(Eina_Bool on)
812 Eldbus_Pending *p = NULL;
814 p = eldbus_proxy_call(dbus.deviced_proxy,
820 on? "lcdon" : "lcdoff");
821 EINA_SAFETY_ON_TRUE_RETURN_VAL(p != NULL, EINA_FALSE);
827 etRunner::feedMouseDown(int x, int y)
829 Eldbus_Pending *p = NULL;
830 p = eldbus_proxy_call(dbus.ds_proxy,
838 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
843 etRunner::feedMouseMove(int x, int y)
845 Eldbus_Pending *p = NULL;
846 p = eldbus_proxy_call(dbus.ds_proxy,
854 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
859 etRunner::feedMouseUp(int x, int y)
861 Eldbus_Pending *p = NULL;
862 p = eldbus_proxy_call(dbus.ds_proxy,
870 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
875 etRunner::feedKeyDown(const char *key)
877 Eldbus_Pending *p = NULL;
878 p = eldbus_proxy_call(dbus.ds_proxy,
886 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
891 etRunner::feedKeyUp(const char *key)
893 Eldbus_Pending *p = NULL;
894 p = eldbus_proxy_call(dbus.ds_proxy,
902 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
907 etRunner::generateMouseDown(int x, int y)
909 // Using efl_util_input_generate instead of generate event by eldbus
910 int ret = EFL_UTIL_ERROR_NONE;
912 if (inputGenerator == NULL)
914 inputGenerator = efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN, NULL);
918 ret = efl_util_input_generate_touch(inputGenerator,
920 EFL_UTIL_INPUT_TOUCH_BEGIN,
922 if (ret != EFL_UTIL_ERROR_NONE)
924 efl_util_input_deinitialize_generator(inputGenerator);
925 inputGenerator = NULL;
933 etRunner::generateMouseMove(int x, int y)
935 // Using efl_util_input_generate instead of generate event by eldbus
936 int ret = EFL_UTIL_ERROR_NONE;
938 if (inputGenerator == NULL)
940 inputGenerator = efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN, NULL);
944 ret = efl_util_input_generate_touch(inputGenerator,
946 EFL_UTIL_INPUT_TOUCH_UPDATE,
948 if (ret != EFL_UTIL_ERROR_NONE)
950 efl_util_input_deinitialize_generator(inputGenerator);
951 inputGenerator = NULL;
959 etRunner::generateMouseUp(int x, int y)
961 // Using efl_util_input_generate instead of generate event by eldbus
962 int ret = EFL_UTIL_ERROR_NONE;
964 if (inputGenerator == NULL)
966 inputGenerator = efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN, NULL);
970 ret = efl_util_input_generate_touch(inputGenerator,
972 EFL_UTIL_INPUT_TOUCH_END,
974 if (ret != EFL_UTIL_ERROR_NONE)
976 efl_util_input_deinitialize_generator(inputGenerator);
977 inputGenerator = NULL;
985 etRunner::generateKeyPress(const char *keyname)
987 // Using efl_util_input_generate instead of generate event by eldbus
988 int ret = EFL_UTIL_ERROR_NONE;
990 if (inputGenerator == NULL)
992 inputGenerator = efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_KEYBOARD, NULL);
996 ret = efl_util_input_generate_key(inputGenerator,
999 if (ret != EFL_UTIL_ERROR_NONE)
1001 efl_util_input_deinitialize_generator(inputGenerator);
1002 inputGenerator = NULL;
1010 etRunner::generateKeyRelease(const char *keyname)
1012 // Using efl_util_input_generate instead of generate event by eldbus
1013 int ret = EFL_UTIL_ERROR_NONE;
1015 if (inputGenerator == NULL)
1017 inputGenerator = efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_KEYBOARD, NULL);
1021 ret = efl_util_input_generate_key(inputGenerator,
1024 if (ret != EFL_UTIL_ERROR_NONE)
1026 efl_util_input_deinitialize_generator(inputGenerator);
1027 inputGenerator = NULL;
1035 etRunner::generateKeyEvent(const char *keyname, double delay)
1037 Eina_Bool res = EINA_FALSE;
1039 res = etRunner::get().generateKeyPress(keyname);
1040 EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE);
1042 res = etRunner::get().generateKeyRelease(keyname);
1043 EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE);
1049 etRunner::generateTouchDown(int idx, int x, int y)
1051 // Using efl_util_input_generate instead of generate event by eldbus
1052 int ret = EFL_UTIL_ERROR_NONE;
1054 if (inputGenerator == NULL)
1056 inputGenerator = efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN, NULL);
1060 ret = efl_util_input_generate_touch(inputGenerator,
1062 EFL_UTIL_INPUT_TOUCH_BEGIN,
1064 if (ret != EFL_UTIL_ERROR_NONE)
1066 efl_util_input_deinitialize_generator(inputGenerator);
1067 inputGenerator = NULL;
1075 etRunner::generateTouchMove(int idx, int x, int y)
1077 // Using efl_util_input_generate instead of generate event by eldbus
1078 int ret = EFL_UTIL_ERROR_NONE;
1080 if (inputGenerator == NULL)
1082 inputGenerator = efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN, NULL);
1086 ret = efl_util_input_generate_touch(inputGenerator,
1088 EFL_UTIL_INPUT_TOUCH_UPDATE,
1090 if (ret != EFL_UTIL_ERROR_NONE)
1092 efl_util_input_deinitialize_generator(inputGenerator);
1093 inputGenerator = NULL;
1101 etRunner::generateTouchUp(int idx, int x, int y)
1103 // Using efl_util_input_generate instead of generate event by eldbus
1104 int ret = EFL_UTIL_ERROR_NONE;
1106 if (inputGenerator == NULL)
1108 inputGenerator = efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN, NULL);
1112 ret = efl_util_input_generate_touch(inputGenerator,
1114 EFL_UTIL_INPUT_TOUCH_END,
1116 if (ret != EFL_UTIL_ERROR_NONE)
1118 efl_util_input_deinitialize_generator(inputGenerator);
1119 inputGenerator = NULL;
1127 etRunner::setSplashLaunch(const char *path, int type)
1129 const char *effect_type = "launch";
1130 struct wl_array option;
1132 // init tzlaunch_splash
1133 if (tzlaunch_splash)
1135 tizen_launch_splash_destroy(tzlaunch_splash);
1136 tzlaunch_splash = NULL;
1138 if (tzlaunch_effect) tzlaunch_splash = tizen_launch_effect_create_splash_img(tzlaunch_effect);
1139 EINA_SAFETY_ON_NULL_RETURN_VAL(tzlaunch_splash, EINA_FALSE);
1141 wl_array_init(&option);
1142 tizen_launch_splash_launch(tzlaunch_splash, path, type,
1144 effect_type, NULL, &option);
1145 wl_array_release(&option);
1151 etRunner::setSplashOwner()
1154 EINA_SAFETY_ON_NULL_RETURN_VAL(tzlaunch_splash, EINA_FALSE);
1156 tizen_launch_splash_owner(tzlaunch_splash, (int)getpid());
1162 etRunner::setWinEffect(etWin *tw)
1164 Eldbus_Pending *p = NULL;
1165 Eina_Bool accepted = EINA_FALSE;
1167 this->ev.elm_win = tw->elm_win;
1169 p = eldbus_proxy_call(dbus.ds_proxy,
1171 _cb_method_window_effect,
1177 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
1184 etRunner::freezeEvent()
1186 Eldbus_Pending *p = NULL;
1187 p = eldbus_proxy_call(dbus.ds_proxy,
1194 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
1199 etRunner::thawEvent()
1201 Eldbus_Pending *p = NULL;
1202 p = eldbus_proxy_call(dbus.ds_proxy,
1209 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
1214 etRunner::addSupportedAuxHint(const char *hint)
1216 Eldbus_Pending *p = NULL;
1217 p = eldbus_proxy_call(dbus.ds_proxy,
1218 "AddSupportedAuxHint",
1224 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
1229 etRunner::delSupportedAuxHint(const char *hint)
1231 Eldbus_Pending *p = NULL;
1232 p = eldbus_proxy_call(dbus.ds_proxy,
1233 "DelSupportedAuxHint",
1239 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
1244 etRunner::waitEvent(etWin *win, E_TC_Event_Type ev_type)
1246 E_TC_Event_Item *recv_item = NULL;
1247 Eina_Bool res = EINA_FALSE;
1248 Eina_List *l = NULL;
1253 case E_TC_EVENT_TYPE_VIS_ON:
1254 case E_TC_EVENT_TYPE_VIS_OFF:
1255 case E_TC_EVENT_TYPE_VIS_CHANGED:
1256 ev_type = E_TC_EVENT_TYPE_VIS_CHANGED;
1258 case E_TC_EVENT_TYPE_STACK_RAISE:
1259 case E_TC_EVENT_TYPE_STACK_LOWER:
1260 case E_TC_EVENT_TYPE_STACK_ABOVE:
1261 case E_TC_EVENT_TYPE_STACK_BELOW:
1262 case E_TC_EVENT_TYPE_STACK_CHANGED:
1263 ev_type = E_TC_EVENT_TYPE_STACK_CHANGED;
1269 // Add event callbacks if needs
1270 if (ev_type == E_TC_EVENT_TYPE_EFFECT_EVAS_CB)
1272 ev.elm_win = win->elm_win;
1273 ev.native_win = win->native_win;
1274 ev.effect.state_smcb = E_TC_EVAS_SMART_CB_STATE_NONE;
1276 evas_object_smart_callback_add(this->ev.elm_win, effect_started, _cb_evas_smart_cb_effect_started, this);
1277 evas_object_smart_callback_add(this->ev.elm_win, effect_done, _cb_evas_smart_cb_effect_done, this);
1278 evas_object_smart_callback_add(this->ev.elm_win, launch_done, _cb_evas_smart_cb_launch_done, this);
1280 else if (ev_type == E_TC_EVENT_TYPE_INPUT_EVAS_KEY)
1282 ev.elm_win = win->elm_win;
1283 ev.native_win = win->native_win;
1284 evas_object_event_callback_add(this->ev.elm_win, EVAS_CALLBACK_KEY_DOWN, _cb_evas_key_down, this);
1285 evas_object_event_callback_add(this->ev.elm_win, EVAS_CALLBACK_KEY_UP, _cb_evas_key_up, this);
1287 ev.key.evas_state = EINA_FALSE;
1290 // pre-waiting events
1293 if (ev.wait_event_index == ev.last_event)
1295 work(0.5); // waiting additional time
1296 if (ev.wait_event_index == ev.last_event)
1300 EINA_LIST_CAST_FOREACH(ev.recv_queue, l, recv_item, E_TC_Event_Item*)
1302 if ((recv_item->win == (win?win->native_win:0)) &&
1303 (recv_item->type == ev_type))
1305 ev.wait_event_index = recv_item;
1315 etRunner::flushEventQueue()
1319 ev.recv_queue = eina_list_free(ev.recv_queue);
1320 ev.recv_queue = NULL;
1325 etRunner::insertEventQueue(Ecore_Window id, E_TC_Event_Type ev_type)
1327 E_TC_Event_Item *item = E_NEW(E_TC_Event_Item, 1);
1328 EINA_SAFETY_ON_NULL_RETURN_VAL(item, EINA_FALSE);
1331 item->type = ev_type;
1332 ev.recv_queue = eina_list_append(ev.recv_queue, item);
1333 ev.last_event = item;
1339 etRunner::isEventOccuredAfterCheckpoint(etWin *tw, E_TC_Event_Type ev_type)
1341 Eina_List *l = NULL;
1342 E_TC_Event_Item *item = NULL;
1343 Ecore_Window id = tw->native_win;
1345 EINA_LIST_CAST_FOREACH(ev.recv_queue, l, item, E_TC_Event_Item*)
1347 if (ev.last_checkpoint && ev.last_checkpoint != item)
1350 if ((item->win == id) && (item->type == ev_type))
1358 etRunner::setEventCheckpoint()
1360 ev.last_checkpoint = ev.last_event;
1365 etRunner::addSignalHandlers()
1367 Eldbus_Signal_Handler *sh = NULL;
1368 Ecore_Event_Handler *eh = NULL;
1372 sh = eldbus_proxy_signal_handler_add(dbus.ds_proxy,
1373 "VisibilityChanged",
1374 _cb_signal_vis_changed,
1376 EINA_SAFETY_ON_NULL_GOTO(sh, err);
1377 ev.sh_list = eina_list_append(ev.sh_list, sh);
1379 sh = eldbus_proxy_signal_handler_add(dbus.ds_proxy,
1381 _cb_signal_stack_changed,
1383 EINA_SAFETY_ON_NULL_GOTO(sh, err);
1384 ev.sh_list = eina_list_append(ev.sh_list, sh);
1386 sh = eldbus_proxy_signal_handler_add(dbus.ds_proxy,
1387 "WinRotationChanged",
1388 _cb_signal_win_rot_changed,
1390 EINA_SAFETY_ON_NULL_GOTO(sh, err);
1391 ev.sh_list = eina_list_append(ev.sh_list, sh);
1393 sh = eldbus_proxy_signal_handler_add(dbus.ds_proxy,
1395 _cb_signal_focus_changed,
1397 EINA_SAFETY_ON_NULL_GOTO(sh, err);
1398 ev.sh_list = eina_list_append(ev.sh_list, sh);
1400 sh = eldbus_proxy_signal_handler_add(dbus.ds_proxy,
1402 _cb_signal_render_while_effect_run,
1404 EINA_SAFETY_ON_NULL_GOTO(sh, err);
1405 ev.sh_list = eina_list_append(ev.sh_list, sh);
1407 sh = eldbus_proxy_signal_handler_add(dbus.ds_proxy,
1409 _cb_signal_aux_hint_changed,
1411 EINA_SAFETY_ON_NULL_GOTO(sh, err);
1412 ev.sh_list = eina_list_append(ev.sh_list, sh);
1414 eh = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _cb_ecore_key_down, this);
1415 EINA_SAFETY_ON_NULL_GOTO(eh, err);
1416 ev.eh_list = eina_list_append(ev.eh_list, eh);
1418 eh = ecore_event_handler_add(ECORE_EVENT_KEY_UP, _cb_ecore_key_up, this);
1419 EINA_SAFETY_ON_NULL_GOTO(eh, err);
1420 ev.eh_list = eina_list_append(ev.eh_list, eh);
1422 eh = ecore_event_handler_add(EFL_UTIL_EVENT_GESTURE_TAP, _cb_gesture_tap, this);
1423 EINA_SAFETY_ON_NULL_GOTO(eh, err);
1424 ev.eh_list = eina_list_append(ev.eh_list, eh);
1426 eh = ecore_event_handler_add(EFL_UTIL_EVENT_GESTURE_EDGE_SWIPE, _cb_gesture_edge_swipe, this);
1427 EINA_SAFETY_ON_NULL_GOTO(eh, err);
1428 ev.eh_list = eina_list_append(ev.eh_list, eh);
1430 eh = ecore_event_handler_add(EFL_UTIL_EVENT_GESTURE_EDGE_DRAG, _cb_gesture_edge_drag, this);
1431 EINA_SAFETY_ON_NULL_GOTO(eh, err);
1432 ev.eh_list = eina_list_append(ev.eh_list, eh);
1434 ev.key.ecore_state = EINA_FALSE;
1439 printf("failed to init handlers\n");
1440 delSignalHandlers();
1445 etRunner::delSignalHandlers()
1447 Eldbus_Signal_Handler *sh = NULL;
1448 Ecore_Event_Handler *eh = NULL;
1450 EINA_LIST_CAST_FREE(ev.sh_list, sh, Eldbus_Signal_Handler*)
1452 eldbus_signal_handler_del(sh);
1455 EINA_LIST_CAST_FREE(ev.eh_list, eh, Ecore_Event_Handler*)
1457 ecore_event_handler_del(eh);
1466 /* give a turn to deal with deferred job for given time*/
1467 addTimer(worker.waitTime);
1472 etRunner::work(double time)
1474 /* give a turn to deal with deferred job for given time*/
1475 if (time < 0.0) time = 0.0;
1482 etRunner::finishWork()
1491 etRunner::printWinInfoList()
1494 Eina_List *l = NULL, *ll = NULL;
1496 printf("--------------------------------------------------------------------------------------------------------------------------\n");
1497 l = getWinInfoList();
1498 EINA_LIST_CAST_FOREACH(l, ll, tw, etWin*)
1500 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",
1502 (unsigned int)tw->native_win,
1504 tw->x, tw->y, tw->w, tw->h,
1516 printf("--------------------------------------------------------------------------------------------------------------------------\n");
1520 etRunner::delTimer()
1522 if (!worker.timer) return;
1524 ecore_timer_del(worker.timer);
1525 worker.timer = NULL;
1529 etRunner::addTimer()
1533 worker.timer = ecore_timer_add(worker.waitTime,
1539 etRunner::addTimer(double time)
1543 worker.timer = ecore_timer_add(time,
1549 etRunner::waitForDestroy()
1551 work(E_TEST_WORK_TIME);
1555 etRunner::initProtocols()
1557 Eina_Iterator *globals = NULL;
1558 Ecore_Wl2_Global *global = NULL;
1559 struct wl_registry *registry = NULL;
1561 registry = ecore_wl2_display_registry_get(ecore_wl2_connected_display_get(NULL));
1562 globals = ecore_wl2_display_globals_get(ecore_wl2_connected_display_get(NULL));
1564 EINA_SAFETY_ON_NULL_GOTO(registry, err);
1565 EINA_SAFETY_ON_NULL_GOTO(globals, err);
1567 EINA_ITERATOR_FOREACH(globals, global)
1569 if (!strcmp(global->interface, "tizen_policy"))
1571 tzPolicy = (struct tizen_policy *)
1572 wl_registry_bind(registry,
1574 &tizen_policy_interface,
1575 (global->version > 7)? 7 : global->version);
1577 if (!strcmp(global->interface, "tizen_surface"))
1579 tzSurface = (struct tizen_surface *)
1580 wl_registry_bind(registry,
1582 &tizen_surface_interface,
1583 (global->version > 1)? 1 : global->version);
1585 if (!strcmp(global->interface, "tizen_launch_effect"))
1587 tzlaunch_effect = (struct tizen_launch_effect *)
1588 wl_registry_bind(registry,
1590 &tizen_launch_effect_interface,
1591 (global->version > 1)? 1 : global->version);
1593 if (!strcmp(global->interface, "wl_output"))
1595 wlOutput = (struct wl_output *)
1596 wl_registry_bind(registry,
1598 &wl_output_interface,
1599 (global->version > 2)? 2 : global->version);
1600 wl_output_add_listener(wlOutput, &_e_test_output_listener, NULL);
1606 wl_output_destroy(wlOutput);
1612 EINA_SAFETY_ON_NULL_GOTO(tzPolicy, err);
1613 EINA_SAFETY_ON_NULL_GOTO(tzSurface, err);
1614 EINA_SAFETY_ON_NULL_GOTO(tzlaunch_effect, err);
1616 eina_iterator_free(globals);
1621 eina_iterator_free(globals);
1625 /* callbacks - method */
1627 _cb_method_win_info_get(void *data,
1628 const Eldbus_Message *msg,
1631 const char *name = NULL, *text = NULL, *wname = NULL;
1633 Eina_Bool res = EINA_FALSE;
1637 res = eldbus_message_error_get(msg, &name, &text);
1638 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1640 res = eldbus_message_arguments_get
1645 &tw->x, &tw->y, &tw->w, &tw->h,
1661 // change window name from char * to Eina_Stringshare
1663 eina_stringshare_del(tw->name);
1664 tw->name = eina_stringshare_add(wname);
1668 if ((name) || (text))
1670 ERR("errname:%s errmsg:%s\n", name, text);
1673 etRunner::get().finishWork();
1677 _cb_method_win_info_list_get(void *data,
1678 const Eldbus_Message *msg,
1681 const char *name = NULL, *text = NULL, *wname = NULL;
1682 Eldbus_Message_Iter *array = NULL, *ec = NULL;
1683 Window_Info_List *info_list = (Window_Info_List *)data;
1684 Eina_Bool res = EINA_FALSE, animating = EINA_FALSE;
1686 if (info_list == NULL)
1689 res = eldbus_message_error_get(msg, &name, &text);
1690 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1692 res = eldbus_message_arguments_get(msg, "a(" E_TC_SIGN_WIN_INFO ")", &array);
1693 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1695 while (eldbus_message_iter_get_and_next(array, 'r', &ec))
1697 etWin *tw = new etWin();
1700 res = eldbus_message_iter_arguments_get(
1705 &tw->x, &tw->y, &tw->w, &tw->h,
1721 // change name to eina_stringshare
1724 WRN("Failed to get win info\n");
1728 tw->name = eina_stringshare_add(wname);
1732 animating = EINA_TRUE;
1736 WRN("Failed to get win info\n");
1741 info_list->list = eina_list_append(info_list->list, tw);
1745 info_list->retry = EINA_TRUE;
1748 if ((name) || (text))
1750 ERR("errname:%s errmsg:%s\n", name, text);
1753 etRunner::get().finishWork();
1757 _cb_method_window_register(void *data,
1758 const Eldbus_Message *msg,
1761 const char *name = NULL, *text = NULL;
1762 Eina_Bool res = EINA_FALSE;
1763 Eina_Bool *accepted = (Eina_Bool *)data;
1765 *accepted = EINA_FALSE;
1767 res = eldbus_message_error_get(msg, &name, &text);
1768 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1770 res = eldbus_message_arguments_get(msg, "b", accepted);
1773 if ((name) || (text))
1775 ERR("errname: %s errmsg: %s\n", name, text);
1778 etRunner::get().finishWork();
1782 _cb_method_zone_rotation_change(void *data,
1783 const Eldbus_Message *msg,
1786 const char *name = NULL, *text = NULL;
1787 Eina_Bool res = EINA_FALSE;
1788 Eina_Bool *allowed = (Eina_Bool *)data;
1790 *allowed = EINA_FALSE;
1792 res = eldbus_message_error_get(msg, &name, &text);
1793 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1795 res = eldbus_message_arguments_get(msg, "b", allowed);
1796 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1797 EINA_SAFETY_ON_FALSE_GOTO(*allowed, finish);
1800 if ((name) || (text))
1802 ERR("errname: %s errmsg: %s\n", name, text);
1805 etRunner::get().finishWork();
1809 _cb_method_window_effect(void *data,
1810 const Eldbus_Message *msg,
1813 const char *name = NULL, *text = NULL;
1814 Eina_Bool res = EINA_FALSE;
1815 Eina_Bool *allowed = (Eina_Bool *)data;
1817 *allowed = EINA_FALSE;
1819 res = eldbus_message_error_get(msg, &name, &text);
1820 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1822 res = eldbus_message_arguments_get(msg, "b", allowed);
1823 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1824 EINA_SAFETY_ON_FALSE_GOTO(*allowed, finish);
1827 if ((name) || (text))
1829 ERR("errname: %s errmsg: %s\n", name, text);
1832 etRunner::get().finishWork();
1836 _cb_method_set_tc_start_end(void *data,
1837 const Eldbus_Message *msg,
1840 const char *name = NULL, *text = NULL;
1841 Eina_Bool res = EINA_FALSE;
1842 Eina_Bool *accept = (Eina_Bool *)data;
1844 *accept = EINA_FALSE;
1846 res = eldbus_message_error_get(msg, &name, &text);
1847 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1849 res = eldbus_message_arguments_get(msg, "b", accept);
1850 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1851 EINA_SAFETY_ON_FALSE_GOTO(*accept, finish);
1854 if ((name) || (text))
1856 ERR("errname: %s errmsg: %s\n", name, text);
1859 etRunner::get().finishWork();
1863 _cb_method_transient_for_below(void *data,
1864 const Eldbus_Message *msg,
1867 const char *name = NULL, *text = NULL;
1868 Eina_Bool res = EINA_FALSE;
1869 Eina_Bool *accept = (Eina_Bool *)data;
1871 *accept = EINA_FALSE;
1873 res = eldbus_message_error_get(msg, &name, &text);
1874 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1876 res = eldbus_message_arguments_get(msg, "b", accept);
1877 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1878 EINA_SAFETY_ON_FALSE_GOTO(*accept, finish);
1881 if ((name) || (text))
1883 ERR("errname: %s errmsg: %s\n", name, text);
1886 etRunner::get().finishWork();
1889 /* callbacks - signal */
1891 _cb_signal_vis_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;
1900 res = eldbus_message_error_get(msg, &name, &text);
1901 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1903 res = eldbus_message_arguments_get(msg, "ub", &id, &vis);
1904 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1906 runner->insertEventQueue(id, E_TC_EVENT_TYPE_VIS_CHANGED);
1909 if ((name) || (text))
1911 ERR("errname:%s errmsg:%s\n", name, text);
1916 _cb_signal_stack_changed(void *data,
1917 const Eldbus_Message *msg)
1919 etRunner *runner = (etRunner *)data;
1920 const char *name = NULL, *text = NULL;
1921 Eina_Bool res = EINA_FALSE;
1922 Ecore_Window id = 0;
1924 res = eldbus_message_error_get(msg, &name, &text);
1925 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1927 res = eldbus_message_arguments_get(msg, "u", &id);
1928 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1930 runner->insertEventQueue(id, E_TC_EVENT_TYPE_STACK_CHANGED);
1933 if ((name) || (text))
1935 ERR("errname:%s errmsg:%s\n", name, text);
1940 _cb_signal_win_rot_changed(void *data,
1941 const Eldbus_Message *msg)
1943 etRunner *runner = (etRunner *)data;
1944 const char *name = NULL, *text = NULL;
1945 Eina_Bool res = EINA_FALSE;
1949 res = eldbus_message_error_get(msg, &name, &text);
1950 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1952 /* TODO unused 'window id' and 'angle' */
1953 res = eldbus_message_arguments_get(msg, "ui", &id, &angle);
1954 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1956 runner->insertEventQueue(id, E_TC_EVENT_TYPE_WINDOW_ROTATION_CHANGE);
1959 if ((name) || (text))
1961 ERR("errname:%s errmsg:%s\n", name, text);
1966 _cb_signal_focus_changed(void *data,
1967 const Eldbus_Message *msg)
1969 etRunner *runner = (etRunner *)data;
1970 const char *name = NULL, *text = NULL;
1971 Eina_Bool res = EINA_FALSE;
1972 Ecore_Window id = 0;
1974 res = eldbus_message_error_get(msg, &name, &text);
1975 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1977 res = eldbus_message_arguments_get(msg, "u", &id);
1978 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1980 runner->insertEventQueue(id, E_TC_EVENT_TYPE_FOCUS_CHANGED);
1983 if ((name) || (text))
1985 ERR("errname:%s errmsg:%s\n", name, text);
1990 _cb_signal_render_while_effect_run(void *data,
1991 const Eldbus_Message *msg)
1993 etRunner *runner = (etRunner *)data;
1994 const char *name = NULL, *text = NULL;
1995 Eina_Bool res = EINA_FALSE;
1996 Ecore_Window id = 0;
1998 res = eldbus_message_error_get(msg, &name, &text);
1999 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
2001 res = eldbus_message_arguments_get(msg, "u", &id);
2002 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
2004 runner->insertEventQueue(id, E_TC_EVENT_TYPE_EFFECT);
2007 if ((name) || (text))
2009 ERR("errname:%s errmsg:%s\n", name, text);
2014 _cb_signal_aux_hint_changed(void *data,
2015 const Eldbus_Message *msg)
2017 etRunner *runner = (etRunner *)data;
2018 const char *name = NULL, *text = NULL;
2019 Eina_Bool res = EINA_FALSE;
2020 Ecore_Window win = 0;
2022 const char *hint_key, *hint_val;
2024 res = eldbus_message_error_get(msg, &name, &text);
2025 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
2027 res = eldbus_message_arguments_get(msg, "uuss", &win, &hint_id, &hint_key, &hint_val);
2028 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
2030 runner->insertEventQueue(win, E_TC_EVENT_TYPE_AUX_HINT_CHANGED);
2033 if ((name) || (text))
2035 ERR("errname:%s errmsg:%s\n", name, text);
2039 /* callbacks - timer */
2041 _cb_work_timeout(void *data)
2043 etRunner::get().finishWork();
2044 return ECORE_CALLBACK_CANCEL;
2047 /* callbacks - ecore */
2049 _cb_ecore_key_down(void *data, int type, void *event)
2051 Ecore_Event_Key *ev = (Ecore_Event_Key *)event;
2052 etRunner *runner = (etRunner *)data;
2054 if (runner->ev.key.name == NULL) return ECORE_CALLBACK_PASS_ON;
2056 if (!strncmp(runner->ev.key.name, ev->keyname, strlen(ev->keyname)))
2058 if (runner->ev.key.ecore_state == EINA_FALSE &&
2059 type == ECORE_EVENT_KEY_DOWN)
2061 runner->ev.key.ecore_state = EINA_TRUE;
2065 return ECORE_CALLBACK_PASS_ON;
2069 _cb_ecore_key_up(void *data, int type, void *event)
2071 Ecore_Event_Key *ev = (Ecore_Event_Key *)event;
2072 etRunner *runner = (etRunner *)data;
2074 if (runner->ev.key.name == NULL) return ECORE_CALLBACK_PASS_ON;
2076 if (!strncmp(runner->ev.key.name, ev->keyname, strlen(ev->keyname)))
2078 if (runner->ev.key.ecore_state == EINA_TRUE &&
2079 type == ECORE_EVENT_KEY_UP)
2081 runner->ev.key.ecore_state = EINA_FALSE;
2082 runner->insertEventQueue(0, E_TC_EVENT_TYPE_INPUT_ECORE_KEY);
2086 return ECORE_CALLBACK_PASS_ON;
2089 /* callbacks - evas */
2091 _cb_evas_key_down(void *data, Evas * evas, Evas_Object * obj, void * event_info)
2093 Evas_Event_Key_Down *ev;
2094 etRunner *runner = (etRunner *)data;
2096 ev = (Evas_Event_Key_Down *)event_info;
2098 if (!strncmp(runner->ev.key.name, ev->keyname, strlen(ev->keyname)))
2100 if (runner->ev.key.evas_state == EINA_FALSE &&
2101 runner->ev.elm_win == obj)
2103 runner->ev.key.evas_state = EINA_TRUE;
2109 _cb_evas_key_up(void * data, Evas * evas, Evas_Object * obj, void * event_info)
2111 Evas_Event_Key_Up *ev;
2112 etRunner *runner = (etRunner *)data;
2114 ev = (Evas_Event_Key_Up *)event_info;
2116 if (!strncmp(runner->ev.key.name, ev->keyname, strlen(ev->keyname)))
2118 if (runner->ev.key.evas_state == EINA_TRUE &&
2119 runner->ev.elm_win == obj)
2121 runner->ev.key.evas_state = EINA_FALSE;
2122 runner->ev.elm_win = NULL;
2124 runner->insertEventQueue(runner->ev.native_win, E_TC_EVENT_TYPE_INPUT_EVAS_KEY);
2129 /* callbacks - smart object */
2131 _cb_evas_smart_cb_effect_started(void *data, Evas_Object * obj, void *event_info)
2133 etRunner *runner = (etRunner *)data;
2134 if (runner && runner->ev.elm_win == obj)
2136 runner->ev.effect.state_smcb = E_TC_EVAS_SMART_CB_STATE_EFFECT_STARTED;
2141 _cb_evas_smart_cb_effect_done(void *data, Evas_Object * obj, void *event_info)
2143 etRunner *runner = (etRunner *)data;
2144 if (runner && runner->ev.elm_win == obj)
2146 runner->ev.effect.state_smcb |= E_TC_EVAS_SMART_CB_STATE_EFFECT_DONE;
2148 runner->insertEventQueue(runner->ev.native_win, E_TC_EVENT_TYPE_EFFECT_EVAS_CB);
2150 evas_object_smart_callback_del(runner->ev.elm_win, effect_started, _cb_evas_smart_cb_effect_started);
2151 evas_object_smart_callback_del(runner->ev.elm_win, effect_done, _cb_evas_smart_cb_effect_done);
2152 evas_object_smart_callback_del(runner->ev.elm_win, launch_done, _cb_evas_smart_cb_launch_done);
2157 _cb_evas_smart_cb_launch_done(void *data, Evas_Object * obj, void *event_info)
2159 etRunner *runner = (etRunner *)data;
2160 if (runner && runner->ev.elm_win == obj)
2162 runner->ev.effect.state_smcb |= E_TC_EVAS_SMART_CB_STATE_LAUNCH_DONE;
2164 if((runner->ev.effect.state_smcb & E_TC_EVAS_SMART_CB_STATE_EFFECT_STARTED) &&
2165 (runner->ev.effect.state_smcb & E_TC_EVAS_SMART_CB_STATE_EFFECT_DONE) &&
2166 (runner->ev.effect.state_smcb & E_TC_EVAS_SMART_CB_STATE_LAUNCH_DONE))
2168 runner->insertEventQueue(runner->ev.native_win, E_TC_EVENT_TYPE_EFFECT_EVAS_CB);
2170 evas_object_smart_callback_del(runner->ev.elm_win, effect_started, _cb_evas_smart_cb_effect_started);
2171 evas_object_smart_callback_del(runner->ev.elm_win, effect_done, _cb_evas_smart_cb_effect_done);
2172 evas_object_smart_callback_del(runner->ev.elm_win, launch_done, _cb_evas_smart_cb_launch_done);
2178 _cb_gesture_tap(void *data, int type, void *event)
2180 etRunner *runner = (etRunner *)data;
2181 efl_util_event_gesture_tap_s *ev =
2182 (efl_util_event_gesture_tap_s *)event;
2184 if ((ev->fingers == (unsigned int)runner->ev.gesture.tap.fingers) &&
2185 (ev->repeats == (unsigned int)runner->ev.gesture.tap.repeats))
2187 runner->insertEventQueue(0, E_TC_EVENT_TYPE_GESTURE_TAP);
2188 //ecore_event_handler_del(runner->ev.key.eh);
2191 return ECORE_CALLBACK_PASS_ON;
2195 _cb_gesture_tap_delay_timer(void *data)
2197 etRunner *runner = (etRunner *)data;
2200 for (i = 0; i < runner->ev.gesture.tap.fingers; i++)
2202 if (!runner->ev.gesture.tap.pressed)
2204 runner->generateTouchDown(i, 100 * (i + 1), 100 * (i + 1));
2208 runner->generateTouchUp(i, 100 * (i + 1), 100 * (i + 1));
2212 runner->ev.gesture.timer = NULL;
2214 runner->ev.gesture.tap.pressed = !runner->ev.gesture.tap.pressed;
2215 if (!runner->ev.gesture.tap.pressed)
2217 runner->ev.gesture.tap.current_repeats--;
2220 if (runner->ev.gesture.tap.current_repeats > 0)
2222 runner->ev.gesture.timer = ecore_timer_add(0.11,
2223 _cb_gesture_tap_delay_timer,
2227 return ECORE_CALLBACK_CANCEL;
2231 etRunner::generateTapGesture()
2233 ev.gesture.tap.current_repeats = ev.gesture.tap.repeats;
2234 ev.gesture.tap.pressed = EINA_FALSE;
2236 ev.gesture.timer = ecore_timer_add(0.11,
2237 _cb_gesture_tap_delay_timer,
2244 _cb_gesture_edge_swipe(void *data, int type, void *event)
2246 etRunner *runner = (etRunner *)data;
2247 efl_util_event_gesture_edge_swipe_s *ev =
2248 (efl_util_event_gesture_edge_swipe_s *)event;
2250 if ((ev->fingers == (unsigned int)runner->ev.gesture.edge.fingers) &&
2251 (ev->edge == (unsigned int)runner->ev.gesture.edge.edge))
2253 if (runner->ev.gesture.timer)
2254 runner->ev.gesture.edge.get_event = EINA_TRUE;
2257 return ECORE_CALLBACK_PASS_ON;
2261 _cb_gesture_edge_swipe_delay_timer(void *data)
2263 etRunner *runner = (etRunner *)data;
2264 int i, cnt, fingers, w, h;
2265 efl_util_gesture_edge_e edge;
2267 cnt = ++runner->ev.gesture.edge.touch_count;
2268 fingers = runner->ev.gesture.edge.fingers;
2269 edge = runner->ev.gesture.edge.edge;
2270 w = runner->output.w - 1;
2271 h = runner->output.h - 1;
2275 for (i = 0; i < fingers; i++)
2279 case EFL_UTIL_GESTURE_EDGE_TOP:
2280 runner->generateTouchDown(i, 100 * (i + 1), 1);
2282 case EFL_UTIL_GESTURE_EDGE_RIGHT:
2283 runner->generateTouchDown(i, w - 1, 100 * (i + 1));
2285 case EFL_UTIL_GESTURE_EDGE_BOTTOM:
2286 runner->generateTouchDown(i, 100 * (i + 1), h - 1);
2288 case EFL_UTIL_GESTURE_EDGE_LEFT:
2289 runner->generateTouchDown(i, 1, 100 * (i + 1));
2298 for (i = 0; i < fingers; i++)
2302 case EFL_UTIL_GESTURE_EDGE_TOP:
2303 runner->generateTouchMove(i, 100 * (i + 1), 40 * cnt * cnt);
2305 case EFL_UTIL_GESTURE_EDGE_RIGHT:
2306 runner->generateTouchMove(i, (w - 1) - (40 * cnt * cnt), 100 * (i + 1));
2308 case EFL_UTIL_GESTURE_EDGE_BOTTOM:
2309 runner->generateTouchMove(i, 100 * (i + 1), (h - 1) - (40 * cnt * cnt));
2311 case EFL_UTIL_GESTURE_EDGE_LEFT:
2312 runner->generateTouchMove(i, 40 * cnt * cnt, 100 * (i + 1));
2322 for (i = 0; i < fingers; i++)
2326 case EFL_UTIL_GESTURE_EDGE_TOP:
2327 runner->generateTouchUp(i, 100 * (i + 1), 40 * cnt * cnt);
2329 case EFL_UTIL_GESTURE_EDGE_RIGHT:
2330 runner->generateTouchUp(i, (w - 1) - (40 * cnt * cnt), 100 * (i + 1));
2332 case EFL_UTIL_GESTURE_EDGE_BOTTOM:
2333 runner->generateTouchUp(i, 100 * (i + 1), (h - 1) - (40 * cnt * cnt));
2335 case EFL_UTIL_GESTURE_EDGE_LEFT:
2336 runner->generateTouchUp(i, 40 * cnt * cnt, 100 * (i + 1));
2343 runner->ev.gesture.timer = NULL;
2344 if (runner->ev.gesture.edge.get_event)
2346 runner->insertEventQueue(0, E_TC_EVENT_TYPE_GESTURE_EDGE_SWIPE);
2347 //ecore_event_handler_del(runner->ev.key.eh);
2349 return ECORE_CALLBACK_CANCEL;
2352 runner->ev.gesture.timer = NULL;
2353 runner->ev.gesture.timer = ecore_timer_add(0.11,
2354 _cb_gesture_edge_swipe_delay_timer,
2357 return ECORE_CALLBACK_CANCEL;
2361 etRunner::generateEdgeSwipeGesture()
2363 ev.gesture.edge.touch_count = 0;
2364 ev.gesture.edge.get_event = EINA_FALSE;
2366 ev.gesture.timer = ecore_timer_add(0.11,
2367 _cb_gesture_edge_swipe_delay_timer,
2374 _cb_gesture_edge_drag(void *data, int type, void *event)
2376 etRunner *runner = (etRunner *)data;
2377 efl_util_event_gesture_edge_drag_s *ev =
2378 (efl_util_event_gesture_edge_drag_s *)event;
2380 if ((ev->fingers == (unsigned int)runner->ev.gesture.edge.fingers) &&
2381 (ev->edge == (unsigned int)runner->ev.gesture.edge.edge) &&
2382 (ev->mode == EFL_UTIL_GESTURE_MODE_END))
2384 runner->insertEventQueue(0, E_TC_EVENT_TYPE_GESTURE_EDGE_DRAG);
2385 //ecore_event_handler_del(runner->ev.key.eh);
2388 return ECORE_CALLBACK_PASS_ON;
2392 _cb_gesture_edge_drag_delay_timer(void *data)
2394 etRunner *runner = (etRunner *)data;
2395 int i, cnt, fingers, w, h;
2396 efl_util_gesture_edge_e edge;
2398 cnt = ++runner->ev.gesture.edge.touch_count;
2399 fingers = runner->ev.gesture.edge.fingers;
2400 edge = runner->ev.gesture.edge.edge;
2401 w = runner->output.w - 1;
2402 h = runner->output.h - 1;
2406 for (i = 0; i < fingers; i++)
2410 case EFL_UTIL_GESTURE_EDGE_TOP:
2411 runner->generateTouchDown(i, 100 * (i + 1), 1);
2413 case EFL_UTIL_GESTURE_EDGE_RIGHT:
2414 runner->generateTouchDown(i, w - 1, 100 * (i + 1));
2416 case EFL_UTIL_GESTURE_EDGE_BOTTOM:
2417 runner->generateTouchDown(i, 100 * (i + 1), h - 1);
2419 case EFL_UTIL_GESTURE_EDGE_LEFT:
2420 runner->generateTouchDown(i, 1, 100 * (i + 1));
2429 for (i = 0; i < fingers; i++)
2433 case EFL_UTIL_GESTURE_EDGE_TOP:
2434 runner->generateTouchMove(i, 100 * (i + 1), 50 * cnt);
2436 case EFL_UTIL_GESTURE_EDGE_RIGHT:
2437 runner->generateTouchMove(i, (w - 1) - (50 * cnt), 100 * (i + 1));
2439 case EFL_UTIL_GESTURE_EDGE_BOTTOM:
2440 runner->generateTouchMove(i, 100 * (i + 1), (h - 1) - (50 * cnt));
2442 case EFL_UTIL_GESTURE_EDGE_LEFT:
2443 runner->generateTouchMove(i, 50 * cnt, 100 * (i + 1));
2453 for (i = 0; i < fingers; i++)
2457 case EFL_UTIL_GESTURE_EDGE_TOP:
2458 runner->generateTouchUp(i, 100 * (i + 1), 50 * cnt);
2460 case EFL_UTIL_GESTURE_EDGE_RIGHT:
2461 runner->generateTouchUp(i, (w - 1) - (50 * cnt), 100 * (i + 1));
2463 case EFL_UTIL_GESTURE_EDGE_BOTTOM:
2464 runner->generateTouchUp(i, 100 * (i + 1), (h - 1) - (50 * cnt));
2466 case EFL_UTIL_GESTURE_EDGE_LEFT:
2467 runner->generateTouchUp(i, 50 * cnt, 100 * (i + 1));
2474 runner->ev.gesture.timer = NULL;
2475 return ECORE_CALLBACK_CANCEL;
2478 runner->ev.gesture.timer = NULL;
2479 runner->ev.gesture.timer = ecore_timer_add(0.11,
2480 _cb_gesture_edge_drag_delay_timer,
2483 return ECORE_CALLBACK_CANCEL;
2487 etRunner::generateEdgeDragGesture()
2489 ev.gesture.edge.touch_count = 0;
2491 ev.gesture.timer = ecore_timer_add(0.11,
2492 _cb_gesture_edge_drag_delay_timer,