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();
23 /* callbacks - method */
24 static void _cb_method_win_info_get(void *data, const Eldbus_Message *msg, Eldbus_Pending *p);
25 static void _cb_method_win_info_list_get(void *data, const Eldbus_Message *msg, Eldbus_Pending *p);
26 static void _cb_method_window_register(void *data, const Eldbus_Message *msg, Eldbus_Pending *p);
27 static void _cb_method_zone_rotation_change(void *data, const Eldbus_Message *msg, Eldbus_Pending *p);
28 static void _cb_method_window_effect(void *data, const Eldbus_Message *msg, Eldbus_Pending *p);
30 /* callbacks - signal */
31 static void _cb_signal_vis_changed(void *data, const Eldbus_Message *msg);
32 static void _cb_signal_stack_changed(void *data, const Eldbus_Message *msg);
33 static void _cb_signal_win_rot_changed(void *data, const Eldbus_Message *msg);
34 static void _cb_signal_focus_changed(void *data, const Eldbus_Message *msg);
35 static void _cb_signal_effect_run(void *data, const Eldbus_Message *msg);
37 /* callbacks - ecore */
38 static Eina_Bool _cb_ecore_key(void *data, int type, void *event);
39 static Eina_Bool _cb_key_delay_timer(void *data);
41 /* callbacks - evas */
42 static void _cb_evas_key_down(void * data, Evas * evas, Evas_Object * obj, void * event_info);
43 static void _cb_evas_key_up(void * data, Evas * evas, Evas_Object * obj, void * event_info);
45 /* callbacks - smart */
46 static void _cb_evas_smart_cb_effect_started(void *data, Evas_Object * obj, void *event_info);
47 static void _cb_evas_smart_cb_effect_done(void *data, Evas_Object * obj, void *event_info);
48 static void _cb_evas_smart_cb_launch_done(void *data, Evas_Object * obj, void *event_info);
50 /* callbacks - timer */
51 static Eina_Bool _cb_work_timeout(void *data);
52 static Eina_Bool _ev_wait_timeout(void *data);
54 /* callbacks - gesture */
55 static Eina_Bool _cb_gesture_tap(void *data, int type, void *event);
57 /* functions - gesture */
58 static void _gesture_tap_generate(etRunner *runner);
60 /**********************
62 **********************/
63 static const struct tizen_resource_listener _e_test_tizen_resource_listener =
68 /**********************
70 **********************/
71 etRunner etRunner::inst;
76 Eina_Bool res = EINA_FALSE;
78 worker.waitTime = E_TEST_WORK_TIME;
80 logDomain = eina_log_domain_register("e-tc", EINA_COLOR_BLUE);
83 if (!ecore_wl2_connected_display_get(NULL))
84 ecore_wl2_display_connect(NULL);
86 // init tizen_extension protocol
87 res = initProtocols();
88 EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE);
93 dbus.conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SYSTEM);
94 EINA_SAFETY_ON_NULL_RETURN_VAL(dbus.conn, EINA_FALSE);
96 dbus.obj = eldbus_object_get(dbus.conn,
97 "org.enlightenment.wm",
98 "/org/enlightenment/wm");
99 EINA_SAFETY_ON_NULL_RETURN_VAL(dbus.obj, EINA_FALSE);
101 dbus.proxy = eldbus_proxy_get(dbus.obj,
102 "org.enlightenment.wm.Test");
103 EINA_SAFETY_ON_NULL_RETURN_VAL(dbus.proxy, EINA_FALSE);
105 // reset registered window of e_test_helper
106 res = resetRegisterWin();
107 EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE);
109 // init input generator
110 inputGenerator = efl_util_input_initialize_generator(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN | EFL_UTIL_INPUT_DEVTYPE_KEYBOARD);
118 eina_log_domain_unregister(logDomain);
120 freeLastWinInfoList();
122 // deinit tizen_extension protocol
125 tizen_policy_destroy(tzPolicy);
131 tizen_surface_destroy(tzSurface);
137 tizen_launch_splash_destroy(tzlaunch_splash);
138 tzlaunch_splash = NULL;
143 tizen_launch_effect_destroy(tzlaunch_effect);
144 tzlaunch_effect = NULL;
148 eldbus_proxy_unref(dbus.proxy);
149 eldbus_object_unref(dbus.obj);
150 eldbus_connection_unref(dbus.conn);
153 // deinit input generator
154 efl_util_input_deinitialize_generator(inputGenerator);
158 etRunner::registerWin(etWin *tw)
160 Eldbus_Pending *p = NULL;
161 Eina_Bool accepted = EINA_FALSE;
163 p = eldbus_proxy_call(dbus.proxy,
165 _cb_method_window_register,
170 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
178 etRunner::deregisterWin(etWin *tw)
180 Eldbus_Pending *p = NULL;
181 Eina_Bool accepted = EINA_FALSE;
183 p = eldbus_proxy_call(dbus.proxy,
185 _cb_method_window_register,
190 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
198 etRunner::resetRegisterWin()
200 Eldbus_Pending *p = NULL;
201 Eina_Bool accepted = EINA_FALSE;
203 p = eldbus_proxy_call(dbus.proxy,
204 "ResetRegisterWindow",
205 _cb_method_window_register,
209 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
217 etRunner::setWinActivate(etWin *tw)
219 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
221 tw->updateGeometry();
223 tizen_policy_activate(tzPolicy,
224 getWlSurface(tw->elm_win));
230 etRunner::setWinIconic(etWin *tw,
233 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
236 tizen_policy_iconify(tzPolicy,
237 getWlSurface(tw->elm_win));
239 tizen_policy_uniconify(tzPolicy,
240 getWlSurface(tw->elm_win));
246 etRunner::setWinStack(etWin *tw,
250 Eldbus_Pending *p = NULL;
251 p = eldbus_proxy_call(dbus.proxy,
258 sibiling? sibiling->native_win : 0,
260 EINA_SAFETY_ON_TRUE_RETURN_VAL(p != NULL, EINA_FALSE);
266 etRunner::setWinTransientFor(etWin *tw_child,
270 EINA_SAFETY_ON_NULL_RETURN_VAL(tw_child, EINA_FALSE);
273 tizen_policy_set_transient_for(tzPolicy,
274 tw_child->native_win,
275 tw_parent->native_win);
277 tizen_policy_unset_transient_for(tzPolicy,
278 tw_child->native_win);
284 etRunner::setWinNotiLevel(etWin *tw,
285 efl_util_notification_level_e lv)
287 Eina_Bool res = EINA_FALSE;
289 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
291 res = efl_util_set_notification_window_level(tw->elm_win, lv);
292 EINA_SAFETY_ON_FALSE_RETURN_VAL(res == EFL_UTIL_ERROR_NONE, EINA_FALSE);
297 efl_util_notification_level_e
298 etRunner::getWinNotiLevel(etWin *tw)
300 Eina_Bool res = EINA_FALSE;
301 efl_util_notification_level_e lv = EFL_UTIL_NOTIFICATION_LEVEL_NONE;
303 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EFL_UTIL_NOTIFICATION_LEVEL_NONE);
305 res = efl_util_get_notification_window_level(tw->elm_win, &lv);
306 EINA_SAFETY_ON_FALSE_RETURN_VAL(res == EFL_UTIL_ERROR_NONE, EFL_UTIL_NOTIFICATION_LEVEL_NONE);
312 etRunner::setFocusSkip(etWin *tw, Eina_Bool set)
314 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
317 tizen_policy_set_focus_skip(tzPolicy,
318 getWlSurface(tw->elm_win));
320 tizen_policy_unset_focus_skip(tzPolicy,
321 getWlSurface(tw->elm_win));
327 etRunner::setZoneRotation(int angle)
329 Eldbus_Pending *p = NULL;
330 Eina_Bool allowed = EINA_FALSE;
332 p = eldbus_proxy_call(dbus.proxy,
333 "ChangeZoneRotation",
334 _cb_method_zone_rotation_change,
339 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
347 etRunner::getWinInfo(etWin *tw)
349 Eldbus_Pending *p = NULL;
353 EINA_SAFETY_ON_NULL_RETURN_VAL(tw, EINA_FALSE);
355 win = tw->native_win;
360 p = eldbus_proxy_call(dbus.proxy,
362 _cb_method_win_info_get,
367 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
371 if ((tw->native_win == win) && (!tw->effect))
377 if (tw->native_win != win)
379 ERR("Something Wrong. Difference with quering window"
380 "and received window from server");
381 tw->native_win = win;
388 etRunner::getWinInfoList()
390 Eldbus_Pending *p = NULL;
391 Window_Info_List *info_list = NULL;
393 Eina_List *result = NULL;
395 info_list = E_NEW(Window_Info_List, 1);
396 EINA_SAFETY_ON_NULL_RETURN_VAL(info_list, NULL);
400 p = eldbus_proxy_call(dbus.proxy,
402 _cb_method_win_info_list_get,
406 EINA_SAFETY_ON_NULL_RETURN_VAL(p, NULL);
410 if (info_list->retry)
412 info_list->retry = EINA_FALSE;
413 EINA_LIST_CAST_FREE(info_list->list, tw, etWin*)
425 result = eina_list_clone(info_list->list);
428 freeLastWinInfoList();
429 listWinInfo = result;
435 etRunner::freeWinInfoList(Eina_List *list)
439 EINA_SAFETY_ON_NULL_RETURN(list);
441 if (listWinInfo == list)
444 EINA_LIST_CAST_FREE(list, tw, etWin*)
454 etRunner::freeLastWinInfoList()
457 freeWinInfoList(listWinInfo);
463 etRunner::setLastWinInfoList(Eina_List *list)
465 EINA_SAFETY_ON_NULL_RETURN(list);
467 freeLastWinInfoList();
473 etRunner::getWinId(Evas_Object *elm_win)
475 struct wl_surface *surf = NULL;
477 struct tizen_resource *tzres = NULL;
479 surf = getWlSurface(elm_win);
480 EINA_SAFETY_ON_NULL_RETURN_VAL(surf, 0);
482 tzres = tizen_surface_get_tizen_resource(tzSurface, surf);
483 EINA_SAFETY_ON_NULL_RETURN_VAL(tzres, 0);
485 tizen_resource_add_listener(tzres,
486 &_e_test_tizen_resource_listener, &id);
490 tizen_resource_destroy(tzres);
496 etRunner::getWlSurface(Evas_Object *elm_win)
498 Ecore_Wl2_Window *wlwin = NULL;
499 struct wl_surface *surf = NULL;
501 EINA_SAFETY_ON_NULL_RETURN_VAL(elm_win, NULL);
503 wlwin = (Ecore_Wl2_Window *)elm_win_wl_window_get(elm_win);
504 EINA_SAFETY_ON_NULL_RETURN_VAL(wlwin, NULL);
506 surf = ecore_wl2_window_surface_get(wlwin);
507 EINA_SAFETY_ON_NULL_RETURN_VAL(surf, NULL);
513 etRunner::setDpms(Eina_Bool on)
515 Eldbus_Pending *p = NULL;
516 p = eldbus_proxy_call(dbus.proxy,
523 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
528 etRunner::feedMouseDown(int x, int y)
530 Eldbus_Pending *p = NULL;
531 p = eldbus_proxy_call(dbus.proxy,
539 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
544 etRunner::feedMouseMove(int x, int y)
546 Eldbus_Pending *p = NULL;
547 p = eldbus_proxy_call(dbus.proxy,
555 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
560 etRunner::feedMouseUp(int x, int y)
562 Eldbus_Pending *p = NULL;
563 p = eldbus_proxy_call(dbus.proxy,
571 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
576 etRunner::feedKeyDown(const char *key)
578 Eldbus_Pending *p = NULL;
579 p = eldbus_proxy_call(dbus.proxy,
587 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
592 etRunner::feedKeyUp(const char *key)
594 Eldbus_Pending *p = NULL;
595 p = eldbus_proxy_call(dbus.proxy,
603 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
608 etRunner::generateMouseDown(int x, int y)
610 // Using efl_util_input_generate instead of generate event by eldbus
611 int ret = EFL_UTIL_ERROR_NONE;
613 if (inputGenerator == NULL)
615 inputGenerator = efl_util_input_initialize_generator(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN);
619 ret = efl_util_input_generate_touch(inputGenerator,
621 EFL_UTIL_INPUT_TOUCH_BEGIN,
623 if (ret != EFL_UTIL_ERROR_NONE)
625 efl_util_input_deinitialize_generator(inputGenerator);
626 inputGenerator = NULL;
634 etRunner::generateMouseMove(int x, int y)
636 // Using efl_util_input_generate instead of generate event by eldbus
637 int ret = EFL_UTIL_ERROR_NONE;
639 if (inputGenerator == NULL)
641 inputGenerator = efl_util_input_initialize_generator(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN);
645 ret = efl_util_input_generate_touch(inputGenerator,
647 EFL_UTIL_INPUT_TOUCH_UPDATE,
649 if (ret != EFL_UTIL_ERROR_NONE)
651 efl_util_input_deinitialize_generator(inputGenerator);
652 inputGenerator = NULL;
660 etRunner::generateMouseUp(int x, int y)
662 // Using efl_util_input_generate instead of generate event by eldbus
663 int ret = EFL_UTIL_ERROR_NONE;
665 if (inputGenerator == NULL)
667 inputGenerator = efl_util_input_initialize_generator(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN);
671 ret = efl_util_input_generate_touch(inputGenerator,
673 EFL_UTIL_INPUT_TOUCH_END,
675 if (ret != EFL_UTIL_ERROR_NONE)
677 efl_util_input_deinitialize_generator(inputGenerator);
678 inputGenerator = NULL;
686 etRunner::generateKeyPress(const char *keyname)
688 // Using efl_util_input_generate instead of generate event by eldbus
689 int ret = EFL_UTIL_ERROR_NONE;
691 if (inputGenerator == NULL)
693 inputGenerator = efl_util_input_initialize_generator(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN);
697 ret = efl_util_input_generate_key(inputGenerator,
700 if (ret != EFL_UTIL_ERROR_NONE)
702 efl_util_input_deinitialize_generator(inputGenerator);
703 inputGenerator = NULL;
711 etRunner::generateKeyRelease(const char *keyname)
713 // Using efl_util_input_generate instead of generate event by eldbus
714 int ret = EFL_UTIL_ERROR_NONE;
716 if (inputGenerator == NULL)
718 inputGenerator = efl_util_input_initialize_generator(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN);
722 ret = efl_util_input_generate_key(inputGenerator,
725 if (ret != EFL_UTIL_ERROR_NONE)
727 efl_util_input_deinitialize_generator(inputGenerator);
728 inputGenerator = NULL;
736 etRunner::generateKeyEvent(const char *keyname, double delay)
738 this->ev.key.timer = ecore_timer_add(delay,
744 etRunner::generateTouchDown(int idx, int x, int y)
746 // Using efl_util_input_generate instead of generate event by eldbus
747 int ret = EFL_UTIL_ERROR_NONE;
749 if (inputGenerator == NULL)
751 inputGenerator = efl_util_input_initialize_generator(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN);
755 ret = efl_util_input_generate_touch(inputGenerator,
757 EFL_UTIL_INPUT_TOUCH_BEGIN,
759 if (ret != EFL_UTIL_ERROR_NONE)
761 efl_util_input_deinitialize_generator(inputGenerator);
762 inputGenerator = NULL;
770 etRunner::generateTouchMove(int idx, int x, int y)
772 // Using efl_util_input_generate instead of generate event by eldbus
773 int ret = EFL_UTIL_ERROR_NONE;
775 if (inputGenerator == NULL)
777 inputGenerator = efl_util_input_initialize_generator(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN);
781 ret = efl_util_input_generate_touch(inputGenerator,
783 EFL_UTIL_INPUT_TOUCH_UPDATE,
785 if (ret != EFL_UTIL_ERROR_NONE)
787 efl_util_input_deinitialize_generator(inputGenerator);
788 inputGenerator = NULL;
796 etRunner::generateTouchUp(int idx, int x, int y)
798 // Using efl_util_input_generate instead of generate event by eldbus
799 int ret = EFL_UTIL_ERROR_NONE;
801 if (inputGenerator == NULL)
803 inputGenerator = efl_util_input_initialize_generator(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN);
807 ret = efl_util_input_generate_touch(inputGenerator,
809 EFL_UTIL_INPUT_TOUCH_END,
811 if (ret != EFL_UTIL_ERROR_NONE)
813 efl_util_input_deinitialize_generator(inputGenerator);
814 inputGenerator = NULL;
822 etRunner::setSplashLaunch(const char *path, int type)
824 const char *effect_type = "launch";
825 struct wl_array options1, options2;
827 // init tzlaunch_splash
830 tizen_launch_splash_destroy(tzlaunch_splash);
831 tzlaunch_splash = NULL;
833 if (tzlaunch_effect) tzlaunch_splash = tizen_launch_effect_create_splash_img(tzlaunch_effect);
834 EINA_SAFETY_ON_NULL_RETURN_VAL(tzlaunch_splash, EINA_FALSE);
836 wl_array_init(&options1);
837 tizen_launch_effect_type_set(tzlaunch_effect, "launch", 555, &options1);
838 wl_array_release(&options1);
840 wl_array_init(&options2);
841 tizen_launch_splash_launch(tzlaunch_splash, path, type,
843 effect_type, NULL, &options2);
844 wl_array_release(&options2);
850 etRunner::setSplashOwner()
853 EINA_SAFETY_ON_NULL_RETURN_VAL(tzlaunch_splash, EINA_FALSE);
855 tizen_launch_splash_owner(tzlaunch_splash, (int)getpid());
861 etRunner::setWindowEffectType(etWin *tw, E_TC_Window_Effect_type type)
863 Eldbus_Pending *p = NULL;
864 Eina_Bool accepted = EINA_FALSE;
866 this->ev.effect.type = type;
867 this->ev.win = tw->elm_win;
869 p = eldbus_proxy_call(dbus.proxy,
871 _cb_method_window_effect,
877 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
879 this->ev.sh = eldbus_proxy_signal_handler_add(dbus.proxy,
881 _cb_signal_effect_run,
883 EINA_SAFETY_ON_NULL_RETURN_VAL(this->ev.sh, EINA_FALSE);
890 etRunner::freezeEvent()
892 Eldbus_Pending *p = NULL;
893 p = eldbus_proxy_call(dbus.proxy,
900 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
905 etRunner::thawEvent()
907 Eldbus_Pending *p = NULL;
908 p = eldbus_proxy_call(dbus.proxy,
915 EINA_SAFETY_ON_NULL_RETURN_VAL(p, EINA_FALSE);
920 etRunner::waitEvent(E_TC_Event_Type ev_type)
922 Eldbus_Signal_Handler *sh = NULL;
923 Ecore_Event_Handler *eh = NULL, *eh2 = NULL;
924 Eina_Bool res = EINA_FALSE;
926 EINA_SAFETY_ON_FALSE_RETURN_VAL((E_TC_EVENT_TYPE_NONE < ev_type), res);
927 EINA_SAFETY_ON_FALSE_RETURN_VAL((E_TC_EVENT_TYPE_MAX > ev_type), res);
931 case E_TC_EVENT_TYPE_VIS_ON:
932 case E_TC_EVENT_TYPE_VIS_OFF:
933 case E_TC_EVENT_TYPE_VIS_CHANGED:
934 sh = eldbus_proxy_signal_handler_add(dbus.proxy,
936 _cb_signal_vis_changed,
938 EINA_SAFETY_ON_NULL_GOTO(sh, finish);
941 case E_TC_EVENT_TYPE_STACK_RAISE:
942 case E_TC_EVENT_TYPE_STACK_LOWER:
943 case E_TC_EVENT_TYPE_STACK_ABOVE:
944 case E_TC_EVENT_TYPE_STACK_BELOW:
945 sh = eldbus_proxy_signal_handler_add(dbus.proxy,
947 _cb_signal_stack_changed,
949 EINA_SAFETY_ON_NULL_GOTO(sh, finish);
952 case E_TC_EVENT_TYPE_WINDOW_ROTATION_CHANGE:
953 sh = eldbus_proxy_signal_handler_add(dbus.proxy,
954 "WinRotationChanged",
955 _cb_signal_win_rot_changed,
957 EINA_SAFETY_ON_NULL_GOTO(sh, finish);
960 case E_TC_EVENT_TYPE_FOCUS_CHANGED:
961 sh = eldbus_proxy_signal_handler_add(dbus.proxy,
963 _cb_signal_focus_changed,
965 EINA_SAFETY_ON_NULL_GOTO(sh, finish);
968 case E_TC_EVENT_TYPE_INPUT_ECORE_KEY:
969 eh = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _cb_ecore_key, this);
970 EINA_SAFETY_ON_NULL_GOTO(eh, finish);
971 eh2 = ecore_event_handler_add(ECORE_EVENT_KEY_UP, _cb_ecore_key, this);
972 EINA_SAFETY_ON_NULL_GOTO(eh2, finish);
974 this->ev.key.state = EINA_FALSE;
975 this->generateKeyEvent(this->ev.key.name, 1.0);
978 case E_TC_EVENT_TYPE_INPUT_EVAS_KEY:
979 evas_object_event_callback_add(this->ev.win, EVAS_CALLBACK_KEY_DOWN, _cb_evas_key_down, this);
980 evas_object_event_callback_add(this->ev.win, EVAS_CALLBACK_KEY_UP, _cb_evas_key_up, this);
982 this->ev.key.state = EINA_FALSE;
983 this->generateKeyEvent(this->ev.key.name, 1.0);
986 case E_TC_EVENT_TYPE_EFFECT:
987 EINA_SAFETY_ON_NULL_GOTO(this->ev.sh, finish);
990 case E_TC_EVENT_TYPE_EFFECT_EVAS_CB:
991 this->ev.effect.state_smcb = E_TC_EVAS_SMART_CB_STATE_NONE;
992 evas_object_smart_callback_add(this->ev.win, effect_started, _cb_evas_smart_cb_effect_started, this);
993 evas_object_smart_callback_add(this->ev.win, effect_done, _cb_evas_smart_cb_effect_done, this);
994 evas_object_smart_callback_add(this->ev.win, launch_done, _cb_evas_smart_cb_launch_done, this);
997 case E_TC_EVENT_TYPE_GESTURE_TAP:
998 eh = ecore_event_handler_add(EFL_UTIL_EVENT_GESTURE_TAP, _cb_gesture_tap, this);
999 _gesture_tap_generate(this);
1007 if (ev.expire_timer)
1008 ecore_timer_del(ev.expire_timer);
1010 ev.request = ev_type;
1011 ev.response = E_TC_EVENT_TYPE_NONE;
1012 ev.expire_timer = ecore_timer_add(5.0, _ev_wait_timeout, this);
1016 if (ev.expire_timer)
1018 ecore_timer_del(ev.expire_timer);
1019 ev.expire_timer = NULL;
1022 if (sh) eldbus_signal_handler_del(sh);
1023 if (this->ev.sh) eldbus_signal_handler_del(this->ev.sh);
1025 if (eh) ecore_event_handler_del(eh);
1026 if (eh2) ecore_event_handler_del(eh2);
1028 if (ev_type == E_TC_EVENT_TYPE_INPUT_EVAS_KEY)
1030 evas_object_event_callback_del(this->ev.win, EVAS_CALLBACK_KEY_DOWN, _cb_evas_key_down);
1031 evas_object_event_callback_del(this->ev.win, EVAS_CALLBACK_KEY_UP, _cb_evas_key_up);
1033 else if (ev_type == E_TC_EVENT_TYPE_EFFECT_EVAS_CB)
1035 evas_object_smart_callback_del(this->ev.win, effect_started, _cb_evas_smart_cb_effect_started);
1036 evas_object_smart_callback_del(this->ev.win, effect_done, _cb_evas_smart_cb_effect_done);
1037 evas_object_smart_callback_del(this->ev.win, launch_done, _cb_evas_smart_cb_launch_done);
1040 res = (ev.response == ev.request);
1041 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1044 ev.request = E_TC_EVENT_TYPE_NONE;
1045 ev.response = E_TC_EVENT_TYPE_NONE;
1053 /* give a turn to deal with deferred job for given time*/
1054 addTimer(worker.waitTime);
1059 etRunner::work(double time)
1061 /* give a turn to deal with deferred job for given time*/
1062 if (time < 0.0) time = 0.0;
1069 etRunner::finishWork()
1078 etRunner::printWinInfoList()
1081 Eina_List *l = NULL, *ll = NULL;
1083 printf("--------------------------------------------------------------------------------------------------------------------------\n");
1084 l = getWinInfoList();
1085 EINA_LIST_CAST_FOREACH(l, ll, tw, etWin*)
1087 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",
1089 (unsigned int)tw->native_win,
1091 tw->x, tw->y, tw->w, tw->h,
1103 printf("--------------------------------------------------------------------------------------------------------------------------\n");
1107 etRunner::delTimer()
1109 if (!worker.timer) return;
1111 ecore_timer_del(worker.timer);
1112 worker.timer = NULL;
1116 etRunner::addTimer()
1120 worker.timer = ecore_timer_add(worker.waitTime,
1126 etRunner::addTimer(double time)
1130 worker.timer = ecore_timer_add(time,
1136 etRunner::waitForDestroy()
1138 work(E_TEST_WORK_TIME);
1142 etRunner::initProtocols()
1144 Eina_Iterator *globals = NULL;
1145 Ecore_Wl2_Global *global = NULL;
1146 struct wl_registry *registry = NULL;
1148 registry = ecore_wl2_display_registry_get(ecore_wl2_connected_display_get(NULL));
1149 globals = ecore_wl2_display_globals_get(ecore_wl2_connected_display_get(NULL));
1151 EINA_SAFETY_ON_NULL_GOTO(registry, err);
1152 EINA_SAFETY_ON_NULL_GOTO(globals, err);
1154 EINA_ITERATOR_FOREACH(globals, global)
1156 if (!strcmp(global->interface, "tizen_policy"))
1158 tzPolicy = (struct tizen_policy *)
1159 wl_registry_bind(registry,
1161 &tizen_policy_interface,
1162 (global->version > 7)? 7 : global->version);
1164 if (!strcmp(global->interface, "tizen_surface"))
1166 tzSurface = (struct tizen_surface *)
1167 wl_registry_bind(registry,
1169 &tizen_surface_interface,
1170 (global->version > 1)? 1 : global->version);
1172 if (!strcmp(global->interface, "tizen_launch_effect"))
1174 tzlaunch_effect = (struct tizen_launch_effect *)
1175 wl_registry_bind(registry,
1177 &tizen_launch_effect_interface,
1178 (global->version > 1)? 1 : global->version);
1182 EINA_SAFETY_ON_NULL_GOTO(tzPolicy, err);
1183 EINA_SAFETY_ON_NULL_GOTO(tzSurface, err);
1184 EINA_SAFETY_ON_NULL_GOTO(tzlaunch_effect, err);
1186 eina_iterator_free(globals);
1191 eina_iterator_free(globals);
1195 /* callbacks - method */
1197 _cb_method_win_info_get(void *data,
1198 const Eldbus_Message *msg,
1201 const char *name = NULL, *text = NULL, *wname = NULL;
1203 Eina_Bool res = EINA_FALSE;
1207 res = eldbus_message_error_get(msg, &name, &text);
1208 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1210 res = eldbus_message_arguments_get
1215 &tw->x, &tw->y, &tw->w, &tw->h,
1231 // change window name from char * to Eina_Stringshare
1233 eina_stringshare_del(tw->name);
1234 tw->name = eina_stringshare_add(wname);
1238 if ((name) || (text))
1240 ERR("errname:%s errmsg:%s\n", name, text);
1243 etRunner::get().finishWork();
1247 _cb_method_win_info_list_get(void *data,
1248 const Eldbus_Message *msg,
1251 const char *name = NULL, *text = NULL, *wname = NULL;
1252 Eldbus_Message_Iter *array = NULL, *ec = NULL;
1253 Ecore_Window target_win = 0;
1254 Window_Info_List *info_list = (Window_Info_List *)data;
1255 Eina_Bool res = EINA_FALSE, animating = EINA_FALSE;
1257 if (info_list == NULL)
1260 res = eldbus_message_error_get(msg, &name, &text);
1261 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1263 res = eldbus_message_arguments_get(msg, "ua(" E_TC_SIGN_WIN_INFO ")", &target_win, &array);
1264 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1266 while (eldbus_message_iter_get_and_next(array, 'r', &ec))
1268 etWin *tw = new etWin();
1271 res = eldbus_message_iter_arguments_get(
1276 &tw->x, &tw->y, &tw->w, &tw->h,
1292 // change name to eina_stringshare
1295 WRN("Failed to get win info\n");
1299 tw->name = eina_stringshare_add(wname);
1303 animating = EINA_TRUE;
1307 WRN("Failed to get win info\n");
1312 info_list->list = eina_list_append(info_list->list, tw);
1316 info_list->retry = EINA_TRUE;
1319 if ((name) || (text))
1321 ERR("errname:%s errmsg:%s\n", name, text);
1324 etRunner::get().finishWork();
1328 _cb_method_window_register(void *data,
1329 const Eldbus_Message *msg,
1332 const char *name = NULL, *text = NULL;
1333 Eina_Bool res = EINA_FALSE;
1334 Eina_Bool *accepted = (Eina_Bool *)data;
1336 *accepted = EINA_FALSE;
1338 res = eldbus_message_error_get(msg, &name, &text);
1339 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1341 res = eldbus_message_arguments_get(msg, "b", accepted);
1344 if ((name) || (text))
1346 ERR("errname: %s errmsg: %s\n", name, text);
1349 etRunner::get().finishWork();
1353 _cb_method_zone_rotation_change(void *data,
1354 const Eldbus_Message *msg,
1357 const char *name = NULL, *text = NULL;
1358 Eina_Bool res = EINA_FALSE;
1359 Eina_Bool *allowed = (Eina_Bool *)data;
1361 *allowed = EINA_FALSE;
1363 res = eldbus_message_error_get(msg, &name, &text);
1364 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1366 res = eldbus_message_arguments_get(msg, "b", allowed);
1367 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1368 EINA_SAFETY_ON_FALSE_GOTO(*allowed, finish);
1371 if ((name) || (text))
1373 ERR("errname: %s errmsg: %s\n", name, text);
1376 etRunner::get().finishWork();
1380 _cb_method_window_effect(void *data,
1381 const Eldbus_Message *msg,
1384 const char *name = NULL, *text = NULL;
1385 Eina_Bool res = EINA_FALSE;
1386 Eina_Bool *allowed = (Eina_Bool *)data;
1388 *allowed = EINA_FALSE;
1390 res = eldbus_message_error_get(msg, &name, &text);
1391 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1393 res = eldbus_message_arguments_get(msg, "b", allowed);
1394 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1395 EINA_SAFETY_ON_FALSE_GOTO(*allowed, finish);
1398 if ((name) || (text))
1400 ERR("errname: %s errmsg: %s\n", name, text);
1403 etRunner::get().finishWork();
1406 /* callbacks - signal */
1408 _cb_signal_vis_changed(void *data,
1409 const Eldbus_Message *msg)
1411 etRunner *runner = (etRunner *)data;
1412 const char *name = NULL, *text = NULL;
1413 Eina_Bool res = EINA_FALSE;
1417 res = eldbus_message_error_get(msg, &name, &text);
1418 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1420 res = eldbus_message_arguments_get(msg, "ub", &id, &vis);
1421 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1424 if (((E_TC_EVENT_TYPE_VIS_ON == runner->ev.request) && (vis)) ||
1425 ((E_TC_EVENT_TYPE_VIS_OFF == runner->ev.request) && (!vis)) ||
1426 (E_TC_EVENT_TYPE_VIS_CHANGED == runner->ev.request))
1428 runner->ev.response = runner->ev.request;
1433 if ((name) || (text))
1435 ERR("errname:%s errmsg:%s\n", name, text);
1440 _cb_signal_stack_changed(void *data,
1441 const Eldbus_Message *msg)
1443 etRunner *runner = (etRunner *)data;
1444 const char *name = NULL, *text = NULL;
1445 Eina_Bool res = EINA_FALSE;
1447 res = eldbus_message_error_get(msg, &name, &text);
1448 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1451 if ((E_TC_EVENT_TYPE_STACK_RAISE <= runner->ev.request) &&
1452 (E_TC_EVENT_TYPE_STACK_BELOW >= runner->ev.request))
1454 runner->ev.response = runner->ev.request;
1459 if ((name) || (text))
1461 ERR("errname:%s errmsg:%s\n", name, text);
1466 _cb_signal_win_rot_changed(void *data,
1467 const Eldbus_Message *msg)
1469 etRunner *runner = (etRunner *)data;
1470 const char *name = NULL, *text = NULL;
1471 Eina_Bool res = EINA_FALSE;
1475 res = eldbus_message_error_get(msg, &name, &text);
1476 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1478 /* TODO unused 'window id' and 'angle' */
1479 res = eldbus_message_arguments_get(msg, "ui", &id, &angle);
1480 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1482 runner->ev.response = runner->ev.request;
1486 if ((name) || (text))
1488 ERR("errname:%s errmsg:%s\n", name, text);
1493 _cb_signal_focus_changed(void *data,
1494 const Eldbus_Message *msg)
1496 etRunner *runner = (etRunner *)data;
1497 const char *name = NULL, *text = NULL;
1498 Eina_Bool res = EINA_FALSE;
1500 res = eldbus_message_error_get(msg, &name, &text);
1501 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1503 if (E_TC_EVENT_TYPE_FOCUS_CHANGED == runner->ev.request)
1505 runner->ev.response = runner->ev.request;
1510 if ((name) || (text))
1512 ERR("errname:%s errmsg:%s\n", name, text);
1517 _cb_signal_effect_run(void *data,
1518 const Eldbus_Message *msg)
1520 etRunner *runner = (etRunner *)data;
1521 const char *name = NULL, *text = NULL;
1522 Eina_Bool res = EINA_FALSE;
1523 unsigned int effect_type = 0;
1526 res = eldbus_message_error_get(msg, &name, &text);
1527 EINA_SAFETY_ON_TRUE_GOTO(res, finish);
1529 res = eldbus_message_arguments_get(msg, "ui", &id, &effect_type);
1530 EINA_SAFETY_ON_FALSE_GOTO(res, finish);
1532 if (effect_type == runner->ev.effect.type)
1534 runner->ev.response = runner->ev.request;
1538 if ((name) || (text))
1540 ERR("errname:%s errmsg:%s\n", name, text);
1544 /* callbacks - timer */
1546 _cb_work_timeout(void *data)
1548 etRunner::get().finishWork();
1549 return ECORE_CALLBACK_CANCEL;
1553 _ev_wait_timeout(void *data)
1555 etRunner *runner = (etRunner *)data;
1557 runner->ev.expire_timer = NULL;
1558 runner->ev.response = E_TC_EVENT_TYPE_TIMEOUT;
1560 ERR("ev:%d\n", runner->ev.request);
1564 return ECORE_CALLBACK_DONE;
1567 /* callbacks - ecore */
1569 _cb_ecore_key(void *data, int type, void *event)
1571 Ecore_Event_Key *ev = (Ecore_Event_Key *)event;
1572 etRunner *runner = (etRunner *)data;
1574 if (!strncmp(runner->ev.key.name, ev->keyname, strlen(ev->keyname)))
1576 if (runner->ev.key.state == EINA_FALSE &&
1577 type == ECORE_EVENT_KEY_DOWN)
1579 runner->ev.key.state = EINA_TRUE;
1581 else if (runner->ev.key.state == EINA_TRUE &&
1582 type == ECORE_EVENT_KEY_UP)
1584 runner->ev.response = runner->ev.request;
1585 runner->ev.key.state = EINA_FALSE;
1590 return ECORE_CALLBACK_PASS_ON;
1593 /* callbacks - evas */
1595 _cb_evas_key_down(void *data, Evas * evas, Evas_Object * obj, void * event_info)
1597 Evas_Event_Key_Down *ev;
1598 etRunner *runner = (etRunner *)data;
1600 ev = (Evas_Event_Key_Down *)event_info;
1602 if (!strncmp(runner->ev.key.name, ev->keyname, strlen(ev->keyname)))
1604 if (runner->ev.key.state == EINA_FALSE &&
1605 runner->ev.win == obj)
1607 runner->ev.key.state = EINA_TRUE;
1613 _cb_evas_key_up(void * data, Evas * evas, Evas_Object * obj, void * event_info)
1615 Evas_Event_Key_Up *ev;
1616 etRunner *runner = (etRunner *)data;
1618 ev = (Evas_Event_Key_Up *)event_info;
1620 if (!strncmp(runner->ev.key.name, ev->keyname, strlen(ev->keyname)))
1622 if (runner->ev.key.state == EINA_TRUE &&
1623 runner->ev.win == obj)
1625 runner->ev.response = runner->ev.request;
1626 runner->ev.key.state = EINA_FALSE;
1627 runner->ev.win = NULL;
1633 /* callbacks - smart object */
1635 _cb_evas_smart_cb_effect_started(void *data, Evas_Object * obj, void *event_info)
1637 etRunner *runner = (etRunner *)data;
1638 if (runner && runner->ev.win == obj)
1640 runner->ev.effect.state_smcb = E_TC_EVAS_SMART_CB_STATE_EFFECT_STARTED;
1645 _cb_evas_smart_cb_effect_done(void *data, Evas_Object * obj, void *event_info)
1647 etRunner *runner = (etRunner *)data;
1648 if (runner && runner->ev.win == obj)
1650 runner->ev.effect.state_smcb |= E_TC_EVAS_SMART_CB_STATE_EFFECT_DONE;
1652 if((runner->ev.effect.state_smcb & E_TC_EVAS_SMART_CB_STATE_EFFECT_STARTED) &&
1653 (runner->ev.effect.state_smcb & E_TC_EVAS_SMART_CB_STATE_EFFECT_DONE))
1655 runner->ev.response = runner->ev.request;
1662 _cb_evas_smart_cb_launch_done(void *data, Evas_Object * obj, void *event_info)
1664 etRunner *runner = (etRunner *)data;
1665 if (runner && runner->ev.win == obj)
1667 runner->ev.effect.state_smcb |= E_TC_EVAS_SMART_CB_STATE_LAUNCH_DONE;
1669 if((runner->ev.effect.state_smcb & E_TC_EVAS_SMART_CB_STATE_EFFECT_STARTED) &&
1670 (runner->ev.effect.state_smcb & E_TC_EVAS_SMART_CB_STATE_EFFECT_DONE) &&
1671 (runner->ev.effect.state_smcb & E_TC_EVAS_SMART_CB_STATE_LAUNCH_DONE))
1673 runner->ev.response = runner->ev.request;
1680 _cb_key_delay_timer(void *data)
1682 etRunner *runner = (etRunner *)data;
1684 runner->generateKeyPress(runner->ev.key.name);
1685 runner->generateKeyRelease(runner->ev.key.name);
1687 runner->ev.key.timer = NULL;
1689 return ECORE_CALLBACK_CANCEL;
1693 _cb_gesture_tap(void *data, int type, void *event)
1695 etRunner *runner = (etRunner *)data;
1696 efl_util_event_gesture_tap_s *ev =
1697 (efl_util_event_gesture_tap_s *)event;
1699 if ((ev->fingers == (unsigned int)runner->ev.gesture.tap.fingers) &&
1700 (ev->repeats == (unsigned int)runner->ev.gesture.tap.repeats))
1702 runner->ev.response = E_TC_EVENT_TYPE_GESTURE_TAP;
1706 return ECORE_CALLBACK_PASS_ON;
1710 _cb_gesture_tap_delay_timer(void *data)
1712 etRunner *runner = (etRunner *)data;
1715 for (i = 0; i < runner->ev.gesture.tap.fingers; i++)
1717 if (!runner->ev.gesture.tap.pressed)
1719 runner->generateTouchDown(i, 100 * (i + 1), 100 * (i + 1));
1723 runner->generateTouchUp(i, 100 * (i + 1), 100 * (i + 1));
1727 runner->ev.gesture.tap.timer = NULL;
1729 runner->ev.gesture.tap.pressed = !runner->ev.gesture.tap.pressed;
1730 if (!runner->ev.gesture.tap.pressed)
1732 runner->ev.gesture.tap.current_repeats--;
1735 if (runner->ev.gesture.tap.current_repeats > 0)
1737 runner->ev.gesture.tap.timer = ecore_timer_add(0.11,
1738 _cb_gesture_tap_delay_timer,
1742 return ECORE_CALLBACK_CANCEL;
1746 _gesture_tap_generate(etRunner *runner)
1748 runner->ev.gesture.tap.current_repeats = runner->ev.gesture.tap.repeats;
1749 runner->ev.gesture.tap.pressed = EINA_FALSE;
1751 runner->ev.gesture.tap.timer = ecore_timer_add(1.0,
1752 _cb_gesture_tap_delay_timer,