2 #include "e_test_helper_intern.h"
3 #include "e_policy_wl.h"
4 #include "e_comp_canvas_intern.h"
5 #include "e_comp_intern.h"
6 #include "e_devicemgr_intern.h"
8 #define BUS "org.enlightenment.wm"
9 #define PATH "/org/enlightenment/wm"
10 #define IFACE "org.enlightenment.wm.Test"
12 #define E_TH_SIGN_WIN_INFO "usiiiiibbbiibibbbi"
13 #define E_TC_TIMEOUT 10.0
15 typedef struct _Test_Helper_Reg_Win
20 Eina_Bool render_send;
21 } Test_Helper_Reg_Win;
24 typedef struct _Test_Helper_Data
26 Eldbus_Connection *conn;
27 Eldbus_Service_Interface *iface;
28 Ecore_Event_Handler *dbus_init_done_h;
35 Eina_Bool tc_timer_needs;
36 Ecore_Timer *tc_timer;
39 static Test_Helper_Data *th_data = NULL;
41 static Eina_Bool _e_test_helper_cb_property_get(const Eldbus_Service_Interface *iface, const char *name, Eldbus_Message_Iter *iter, const Eldbus_Message *msg, Eldbus_Message **err);
43 static Eldbus_Message *_e_test_helper_cb_testcase_start(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
44 static Eldbus_Message *_e_test_helper_cb_testcase_end(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
45 static Eldbus_Message *_e_test_helper_cb_testcase_timeout_set(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
46 static Eldbus_Message *_e_test_helper_cb_register_window(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
47 static Eldbus_Message *_e_test_helper_cb_deregister_window(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
48 static Eldbus_Message *_e_test_helper_cb_reset_register_window(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
49 static Eldbus_Message *_e_test_helper_cb_change_stack(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
50 static Eldbus_Message *_e_test_helper_cb_activate_window(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
51 static Eldbus_Message *_e_test_helper_cb_change_iconic_state(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
52 static Eldbus_Message *_e_test_helper_cb_set_transient_for(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
53 static Eldbus_Message *_e_test_helper_cb_unset_transient_for(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
54 static Eldbus_Message *_e_test_helper_cb_set_transient_for_below(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
55 static Eldbus_Message *_e_test_helper_cb_set_noti_level(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
56 static Eldbus_Message *_e_test_helper_cb_set_focus_skip(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
57 static Eldbus_Message *_e_test_helper_cb_get_client_info(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg);
58 static Eldbus_Message *_e_test_helper_cb_get_clients(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
59 static Eldbus_Message *_e_test_helper_cb_get_noti_level(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
60 static Eldbus_Message *_e_test_helper_cb_dpms(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
61 static Eldbus_Message *_e_test_helper_cb_ev_freeze(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
62 static Eldbus_Message *_e_test_helper_cb_kill_win(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
63 static Eldbus_Message *_e_test_helper_cb_ev_mouse(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
64 static Eldbus_Message *_e_test_helper_cb_ev_key(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
65 static Eldbus_Message *_e_test_helper_cb_hwc(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
66 static Eldbus_Message *_e_test_helper_cb_zone_rot_change(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
67 static Eldbus_Message *_e_test_helper_cb_zone_rot_get(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
68 static Eldbus_Message *_e_test_helper_cb_set_render_condition(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
69 static Eldbus_Message *_e_test_helper_cb_add_supported_aux_hint(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
70 static Eldbus_Message *_e_test_helper_cb_del_supported_aux_hint(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
71 static Eldbus_Message *_e_test_helper_cb_get_aux_hint(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
72 static Eina_Bool _e_test_helper_cb_img_render(void *data EINA_UNUSED, int type EINA_UNUSED, void *event);
73 static Eina_Bool _e_test_helper_cb_effect_start(void *data EINA_UNUSED, int type EINA_UNUSED, void *event);
74 static Eina_Bool _e_test_helper_cb_effect_end(void *data EINA_UNUSED, int type EINA_UNUSED, void *event);
78 E_TEST_HELPER_SIGNAL_CHANGE_VISIBILITY = 0,
79 E_TEST_HELPER_SIGNAL_RESTACK,
80 E_TEST_HELPER_SIGNAL_WINDOW_ROTATION_CHANGED,
81 E_TEST_HELPER_SIGNAL_FOCUS_CHANGED,
82 E_TEST_HELPER_SIGNAL_RENDER,
83 E_TEST_HELPER_AUX_HINT_CHANGED,
84 E_TEST_HELPER_SIGNAL_ICONIC_STATE_CHANGED,
87 static const Eldbus_Signal signals[] = {
88 [E_TEST_HELPER_SIGNAL_CHANGE_VISIBILITY] =
91 ELDBUS_ARGS({"ub", "window id, visibility"}),
94 [E_TEST_HELPER_SIGNAL_RESTACK] =
97 ELDBUS_ARGS({"u", "window id was restacked"}),
100 [E_TEST_HELPER_SIGNAL_WINDOW_ROTATION_CHANGED] =
102 "WinRotationChanged",
103 ELDBUS_ARGS({"ui", "a window id was rotated to given angle"}),
106 [E_TEST_HELPER_SIGNAL_FOCUS_CHANGED] =
109 ELDBUS_ARGS({"ub", "window id, focus state"}),
112 [E_TEST_HELPER_SIGNAL_RENDER] =
115 ELDBUS_ARGS({"u", "window id for tracing rendering"}),
118 [E_TEST_HELPER_AUX_HINT_CHANGED] =
121 ELDBUS_ARGS({"uuss", "window id, aux_hint id, aux_hint key, aux_hint value"}),
124 [E_TEST_HELPER_SIGNAL_ICONIC_STATE_CHANGED] =
126 "IconicStateChanged",
127 ELDBUS_ARGS({"ubb", "window id, iconic state"}),
133 static const Eldbus_Method methods[] ={
137 ELDBUS_ARGS({"b", "accept or not"}),
138 _e_test_helper_cb_testcase_start, 0
143 ELDBUS_ARGS({"b", "accept or not"}),
144 _e_test_helper_cb_testcase_end, 0
148 ELDBUS_ARGS({"bu", "needs timer and time in millisecond"}),
149 ELDBUS_ARGS({"b", "accept or not"}),
150 _e_test_helper_cb_testcase_timeout_set, 0
154 ELDBUS_ARGS({"u", "window id to be registered"}),
155 ELDBUS_ARGS({"b", "accept or not"}),
156 _e_test_helper_cb_register_window, 0
160 ELDBUS_ARGS({"u", "window id to be deregistered"}),
161 ELDBUS_ARGS({"b", "accept or not"}),
162 _e_test_helper_cb_deregister_window, 0
165 "ResetRegisterWindow",
167 ELDBUS_ARGS({"b", "accept or not"}),
168 _e_test_helper_cb_reset_register_window, 0
172 ELDBUS_ARGS({"uui", "window id to restack, above or below, stacking type"}),
174 _e_test_helper_cb_change_stack, 0
178 ELDBUS_ARGS({"u", "window id to activate"}),
180 _e_test_helper_cb_activate_window, 0
184 ELDBUS_ARGS({"ub", "window id to change iconic state, iconify or uniconify"}),
186 _e_test_helper_cb_change_iconic_state, 0
189 "SetWindowTransientFor",
190 ELDBUS_ARGS({"uu", "child window id to set transient_for, parent window id to set transient_for"}),
191 ELDBUS_ARGS({"b", "accept or not"}),
192 _e_test_helper_cb_set_transient_for, 0
195 "UnsetWindowTransientFor",
196 ELDBUS_ARGS({"u", "child window id to set transient_for"}),
197 ELDBUS_ARGS({"b", "accept or not"}),
198 _e_test_helper_cb_unset_transient_for, 0
201 "SetWindowTransientForBelow",
202 ELDBUS_ARGS({"uub", "child window id to set transient_for, parent window id to set transient_for, set or unset"}),
203 ELDBUS_ARGS({"b", "accept or not"}),
204 _e_test_helper_cb_set_transient_for_below, 0
207 "SetWindowNotiLevel",
208 ELDBUS_ARGS({"ui", "window id to set notification level, notification level"}),
210 _e_test_helper_cb_set_noti_level, 0
213 "SetWindowFocusSkip",
214 ELDBUS_ARGS({"ub", "window id to set focus skip, skip set or skip unset"}),
216 _e_test_helper_cb_set_focus_skip, 0
220 ELDBUS_ARGS({"u", "window id"}),
221 ELDBUS_ARGS({E_TH_SIGN_WIN_INFO, "information of ec"}),
222 _e_test_helper_cb_get_client_info, 0
227 ELDBUS_ARGS({"ua("E_TH_SIGN_WIN_INFO")", "array of ec"}),
228 _e_test_helper_cb_get_clients, 0
231 "GetWindowNotiLevel",
232 ELDBUS_ARGS({"u", "window id to get notification level"}),
233 ELDBUS_ARGS({"i", "notification level"}),
234 _e_test_helper_cb_get_noti_level, 0
238 ELDBUS_ARGS({"u", "DPMS 0=off or 1=on"}),
239 ELDBUS_ARGS({"b", "accept or not"}),
240 _e_test_helper_cb_dpms, 0
244 ELDBUS_ARGS({"u", "0=events will start to be processed or 1=freeze input events processing"}),
245 ELDBUS_ARGS({"b", "accept or not"}),
246 _e_test_helper_cb_ev_freeze, 0
250 ELDBUS_ARGS({"s", "window name to kill"}),
252 _e_test_helper_cb_kill_win, 0
256 ELDBUS_ARGS({"uii", "type 0=down 1=move 2=up, x position, y position"}),
257 ELDBUS_ARGS({"b", "accept or not"}),
258 _e_test_helper_cb_ev_mouse, 0
262 ELDBUS_ARGS({"us", "type 0=down 1=up, key name"}),
263 ELDBUS_ARGS({"b", "accept or not"}),
264 _e_test_helper_cb_ev_key, 0
268 ELDBUS_ARGS({"u", "0=off or 1=on"}),
269 ELDBUS_ARGS({"b", "accept or not"}),
270 _e_test_helper_cb_hwc, 0
273 "GetCurrentZoneRotation",
275 ELDBUS_ARGS({"i", "a angle of current zone"}),
276 _e_test_helper_cb_zone_rot_get, 0,
279 "ChangeZoneRotation",
280 ELDBUS_ARGS({"i", "(0, 90, 180, 270) = specific angle, -1 = unknown state"}),
281 ELDBUS_ARGS({"b", "accept or not"}),
282 _e_test_helper_cb_zone_rot_change, 0,
286 ELDBUS_ARGS({"us", "window id and type of rendering to trace"}),
287 ELDBUS_ARGS({"b", "accept or not"}),
288 _e_test_helper_cb_set_render_condition, 0,
291 "AddSupportedAuxHint",
292 ELDBUS_ARGS({"s", "Aux hint string to add supported aux hint"}),
293 ELDBUS_ARGS({"b", "accept or not"}),
294 _e_test_helper_cb_add_supported_aux_hint, 0,
297 "DelSupportedAuxHint",
298 ELDBUS_ARGS({"s", "Aux hint string to del supported aux hint"}),
299 ELDBUS_ARGS({"b", "accept or not"}),
300 _e_test_helper_cb_del_supported_aux_hint, 0,
304 ELDBUS_ARGS({"us", "window id and Aux hint string to get aux hint data"}),
305 ELDBUS_ARGS({"iss", "id, name, value"}),
306 _e_test_helper_cb_get_aux_hint, 0,
311 static const Eldbus_Property properties[] = {
312 { "Registrant", "au", NULL, NULL, 0 },
316 static const Eldbus_Service_Interface_Desc iface_desc = {
317 IFACE, methods, signals, properties, _e_test_helper_cb_property_get, NULL
321 _e_test_helper_registrant_clear(void)
323 Test_Helper_Reg_Win *reg_win = NULL;
325 EINA_SAFETY_ON_NULL_RETURN(th_data);
326 EINA_SAFETY_ON_NULL_RETURN(th_data->reg_wins);
328 EINA_LIST_FREE(th_data->reg_wins, reg_win)
330 if (reg_win->ec && reg_win->ec->frame)
331 e_comp_object_render_trace_set(reg_win->ec->frame, EINA_FALSE);
336 _e_test_helper_registrant_remove(Ecore_Window target_win)
338 Test_Helper_Reg_Win *reg_win = NULL;
339 Eina_List *l = NULL, *ll = NULL;
340 Eina_Bool res = EINA_FALSE;
342 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data, EINA_FALSE);
343 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data->reg_wins, EINA_FALSE);
345 EINA_LIST_FOREACH_SAFE(th_data->reg_wins, l, ll, reg_win)
347 if (reg_win->win == target_win)
349 if (reg_win->ec && reg_win->ec->frame)
350 e_comp_object_render_trace_set(reg_win->ec->frame, EINA_FALSE);
351 th_data->reg_wins = eina_list_remove(th_data->reg_wins, reg_win);
360 _e_test_helper_message_append_client(Eldbus_Message_Iter *iter, E_Client *ec)
362 eldbus_message_iter_arguments_append
363 (iter, E_TH_SIGN_WIN_INFO,
364 e_pixmap_res_id_get(ec->pixmap),
365 e_client_util_name_get(ec) ?: "NO NAME",
368 ec->x, ec->y, ec->w, ec->h,
371 evas_object_layer_get(ec->frame),
374 evas_object_data_get(ec->frame, "effect_running"),
376 /* visibility & iconify */
378 evas_object_visible_get(ec->frame),
379 ec->visibility.opaque,
380 ec->visibility.obscured,
382 ec->iconic ? (e_client_is_iconified_by_client(ec) ? 2 : 1) : 0,
389 evas_object_focus_get(ec->frame),
392 ec->e.state.rot.ang.curr);
396 _e_test_helper_cb_dbus_init_done(void *data EINA_UNUSED, int type, void *event)
398 E_DBus_Conn_Init_Done_Event *e = event;
400 if ((e->status == E_DBUS_CONN_INIT_SUCCESS) && (e->conn_type == ELDBUS_CONNECTION_TYPE_SYSTEM))
402 th_data->conn = e_dbus_conn_connection_ref(ELDBUS_CONNECTION_TYPE_SYSTEM);
405 th_data->iface = eldbus_service_interface_register(th_data->conn, PATH, &iface_desc);
408 ecore_event_handler_del(th_data->dbus_init_done_h);
409 th_data->dbus_init_done_h = NULL;
411 return ECORE_CALLBACK_PASS_ON;
415 _e_test_helper_message_append_client_info_by_window_id(Eldbus_Message_Iter *iter, Ecore_Window win)
419 ec = e_pixmap_find_client_by_res_id(win);
423 _e_test_helper_message_append_client(iter, ec);
427 _e_test_helper_message_append_clients(Eldbus_Message_Iter *iter)
429 Eldbus_Message_Iter *array_of_ec;
434 EINA_SAFETY_ON_NULL_RETURN(th_data);
436 if (!(comp = e_comp)) return;
438 eldbus_message_iter_arguments_append(iter, "a("E_TH_SIGN_WIN_INFO")", &array_of_ec);
441 for (o = evas_object_top_get(comp->evas); o; o = evas_object_below_get(o))
443 Eldbus_Message_Iter* struct_of_ec;
445 ec = evas_object_data_get(o, "E_Client");
447 if (e_client_util_ignored_get(ec)) continue;
449 eldbus_message_iter_arguments_append(array_of_ec, "("E_TH_SIGN_WIN_INFO")", &struct_of_ec);
450 _e_test_helper_message_append_client(struct_of_ec, ec);
451 eldbus_message_iter_container_close(array_of_ec, struct_of_ec);
454 eldbus_message_iter_container_close(iter, array_of_ec);
458 _e_test_helper_restack(Ecore_Window win, Ecore_Window target, int above)
460 E_Client *ec = NULL, *tec = NULL;
462 ec = e_pixmap_find_client_by_res_id(win);
463 tec = e_pixmap_find_client_by_res_id(target);
472 e_policy_stack_transient_child_raise(ec);
479 e_policy_stack_transient_child_lower(ec);
488 e_client_stack_above(ec, tec);
490 e_client_stack_below(ec, tec);
495 _e_test_helper_cb_tc_timeout(void *data)
497 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data, ECORE_CALLBACK_DONE);
499 th_data->tc_running = EINA_FALSE;
500 _e_test_helper_registrant_clear();
502 if (th_data->tc_timer)
504 ecore_timer_del(th_data->tc_timer);
505 th_data->tc_timer = NULL;
508 return ECORE_CALLBACK_DONE;
513 _e_test_helper_send_change_visibility(Ecore_Window win, Eina_Bool vis)
515 Eldbus_Message *signal;
517 EINA_SAFETY_ON_NULL_RETURN(th_data);
519 signal = eldbus_service_signal_new(th_data->iface,
520 E_TEST_HELPER_SIGNAL_CHANGE_VISIBILITY);
521 eldbus_message_arguments_append(signal, "ub", win, vis);
522 eldbus_service_signal_send(th_data->iface, signal);
526 _e_test_helper_send_render(Ecore_Window win)
528 Eldbus_Message *signal;
530 EINA_SAFETY_ON_NULL_RETURN(th_data);
532 signal = eldbus_service_signal_new(th_data->iface, E_TEST_HELPER_SIGNAL_RENDER);
533 eldbus_message_arguments_append(signal, "u", win);
534 eldbus_service_signal_send(th_data->iface, signal);
538 _e_test_helper_send_aux_hint_change(Ecore_Window win, int hint_id, const char *hint_key, const char *hint_val)
540 Eldbus_Message *signal;
542 EINA_SAFETY_ON_NULL_RETURN(th_data);
544 signal = eldbus_service_signal_new(th_data->iface, E_TEST_HELPER_AUX_HINT_CHANGED);
545 eldbus_message_arguments_append(signal, "uuss", win, hint_id, hint_key, hint_val);
546 eldbus_service_signal_send(th_data->iface, signal);
549 static Test_Helper_Reg_Win *
550 _e_test_helper_find_win_on_reg_list(Ecore_Window win)
553 Test_Helper_Reg_Win *reg_win = NULL;
555 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data, NULL);
556 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data->reg_wins, NULL);
558 EINA_LIST_FOREACH(th_data->reg_wins, l, reg_win)
560 if (reg_win->win == win)
567 /* Method Handlers */
568 static Eldbus_Message *
569 _e_test_helper_cb_testcase_start(const Eldbus_Service_Interface *iface EINA_UNUSED,
570 const Eldbus_Message *msg)
572 Eldbus_Message *reply;
573 Eina_Bool res = EINA_FALSE;
575 reply = eldbus_message_method_return_new(msg);
579 if (th_data->tc_timer)
580 ecore_timer_del(th_data->tc_timer);
582 if (th_data->tc_timer_needs)
583 th_data->tc_timer = ecore_timer_add(E_TC_TIMEOUT, _e_test_helper_cb_tc_timeout, NULL);
584 res = th_data->tc_running = EINA_TRUE;
587 eldbus_message_arguments_append(reply, "b", res);
592 static Eldbus_Message *
593 _e_test_helper_cb_testcase_end(const Eldbus_Service_Interface *iface EINA_UNUSED,
594 const Eldbus_Message *msg)
596 Eldbus_Message *reply;
597 Eina_Bool res = EINA_FALSE;
599 reply = eldbus_message_method_return_new(msg);
603 if (th_data->tc_timer)
605 ecore_timer_del(th_data->tc_timer);
606 th_data->tc_timer = NULL;
608 th_data->tc_running = EINA_FALSE;
612 eldbus_message_arguments_append(reply, "b", res);
617 static Eldbus_Message *
618 _e_test_helper_cb_testcase_timeout_set(const Eldbus_Service_Interface *iface EINA_UNUSED,
619 const Eldbus_Message *msg)
621 Eldbus_Message *reply;
622 Eina_Bool res = EINA_FALSE;
623 Eina_Bool set = EINA_TRUE;
624 uint32_t timeout = E_TC_TIMEOUT;
626 reply = eldbus_message_method_return_new(msg);
628 if (!eldbus_message_arguments_get(msg, "bu", &set, &timeout))
630 ERR("Error on eldbus_message_arguments_get()\n");
636 if (set != th_data->tc_timer_needs)
638 th_data->tc_timer_needs = set;
640 ecore_timer_del(th_data->tc_timer);
645 if (th_data->tc_timer)
646 ecore_timer_del(th_data->tc_timer);
648 if (th_data->tc_timer_needs)
649 th_data->tc_timer = ecore_timer_add(timeout, _e_test_helper_cb_tc_timeout, NULL);
654 eldbus_message_arguments_append(reply, "b", res);
659 eldbus_message_arguments_append(reply, "b", EINA_FALSE);
663 static Eldbus_Message *
664 _e_test_helper_cb_register_window(const Eldbus_Service_Interface *iface EINA_UNUSED,
665 const Eldbus_Message *msg)
667 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
669 Test_Helper_Reg_Win *new_win = NULL;
671 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data, reply);
673 if (!eldbus_message_arguments_get(msg, "u", &id))
675 ERR("Error on eldbus_message_arguments_get()\n");
679 new_win = E_NEW(Test_Helper_Reg_Win, 1);
680 EINA_SAFETY_ON_NULL_GOTO(new_win, err);
683 new_win->ec = e_pixmap_find_client_by_res_id(id);
685 th_data->reg_wins = eina_list_append(th_data->reg_wins, new_win);
686 eldbus_message_arguments_append(reply, "b", EINA_TRUE);
691 eldbus_message_arguments_append(reply, "b", EINA_FALSE);
695 static Eldbus_Message *
696 _e_test_helper_cb_dpms(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
698 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
699 Eina_Bool accept = EINA_FALSE;
702 if (!eldbus_message_arguments_get(msg, "u", &dpms))
704 ERR("Error on eldbus_message_arguments_get()\n");
723 eldbus_message_arguments_append(reply, "b", accept);
728 static Eldbus_Message *
729 _e_test_helper_cb_ev_freeze(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
731 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
732 Eina_Bool accept = EINA_TRUE;
735 if (!eldbus_message_arguments_get(msg, "u", &freeze))
737 ERR("Error on eldbus_message_arguments_get()\n");
743 case 0: e_comp_all_thaw(); break;
744 case 1: e_comp_all_freeze(); break;
745 default: accept = EINA_FALSE; break;
748 eldbus_message_arguments_append(reply, "b", accept);
753 static Eldbus_Message *
754 _e_test_helper_cb_kill_win(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
756 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
758 Evas_Object *o = NULL;
759 char *win_name = NULL;
761 if (!eldbus_message_arguments_get(msg, "s", &win_name))
763 ERR("Error on eldbus_message_arguments_get()\n");
767 for (o = evas_object_top_get(e_comp->evas); o; o = evas_object_below_get(o))
769 const char *ec_name = NULL;
770 ec = evas_object_data_get(o, "E_Client");
772 if (e_client_util_ignored_get(ec)) continue;
774 ec_name = e_client_util_name_get(ec) ?: "NO NAME";
776 if (e_util_strcmp(ec_name, win_name)) continue;
777 ELOGF("E_TEST_HELPER", "Window killed by request(ec: %s)", ec, ec? ec->icccm.name : "NO NAME");
778 e_client_act_kill_begin(ec);
784 static Eldbus_Message *
785 _e_test_helper_cb_ev_mouse(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
787 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
788 Eina_Bool accept = EINA_TRUE;
789 Ecore_Event_Mouse_Button *ev = NULL;
793 if (!eldbus_message_arguments_get(msg, "uii", &type, &x, &y))
795 ERR("Error on eldbus_message_arguments_get()\n");
799 ev = E_NEW(Ecore_Event_Mouse_Button, 1);
800 EINA_SAFETY_ON_NULL_RETURN_VAL(ev, reply);
802 ev->timestamp = (unsigned int)(ecore_time_unix_get() * (double)1000);
804 ev->x = ev->root.x = x;
805 ev->y = ev->root.y = y;
810 case 0: ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, ev, NULL, NULL); break;
811 case 1: ecore_event_add(ECORE_EVENT_MOUSE_MOVE, ev, NULL, NULL); break;
812 case 2: ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_UP, ev, NULL, NULL); break;
813 default: accept = EINA_FALSE; break;
816 eldbus_message_arguments_append(reply, "b", accept);
825 _e_test_helper_key_event_add(char *key_name, unsigned int type)
828 char *device_identifier = NULL;
830 EINA_SAFETY_ON_NULL_RETURN_VAL(key_name, EINA_FALSE);
831 EINA_SAFETY_ON_NULL_RETURN_VAL(e_devicemgr, EINA_FALSE);
832 EINA_SAFETY_ON_NULL_RETURN_VAL(e_devicemgr->last_device_kbd, EINA_FALSE);
834 device_identifier = (char *)e_devicemgr->last_device_kbd->identifier;
836 EINA_SAFETY_ON_NULL_RETURN_VAL(device_identifier, EINA_FALSE);
838 res = e_devicemgr_inputgen_key_event_add(key_name, (Eina_Bool)type, device_identifier);
842 ERR("[E_Test_Helper] Failed on generating key event ! (key_name=%s, type=%d)\n", key_name, type);
849 static Eldbus_Message *
850 _e_test_helper_cb_ev_key(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
852 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
853 Eina_Bool accept = EINA_FALSE;
857 if (!eldbus_message_arguments_get(msg, "us", &type, &key))
859 ERR("Error on eldbus_message_arguments_get()\n");
870 accept = _e_test_helper_key_event_add(key, type);
876 eldbus_message_arguments_append(reply, "b", accept);
881 static Eldbus_Message *
882 _e_test_helper_cb_hwc(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
884 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
885 Eina_Bool r, accept = EINA_FALSE;
888 r = eldbus_message_arguments_get(msg, "u", &on);
889 EINA_SAFETY_ON_FALSE_RETURN_VAL(r, reply);
895 case 0: accept = EINA_TRUE; e_comp_hwc_deactive_set(EINA_TRUE); break;
896 case 1: accept = EINA_TRUE; e_comp_hwc_deactive_set(EINA_FALSE); break;
901 eldbus_message_arguments_append(reply, "b", accept);
907 _e_test_helper_event_zone_rot_change_free(void *data EINA_UNUSED, void *event)
909 E_Event_Info_Rotation_Message *ev = event;
911 e_object_unref(E_OBJECT(ev->zone));
916 static Eldbus_Message *
917 _e_test_helper_cb_zone_rot_change(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
919 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
920 E_Event_Info_Rotation_Message *ev;
922 Eina_Bool r, accept = EINA_FALSE;
925 r = eldbus_message_arguments_get(msg, "i", &rot);
926 EINA_SAFETY_ON_FALSE_GOTO(r, end);
928 if ((rot < 0) || (rot > 270) || ((rot % 90) != 0))
931 zone = e_zone_current_get();
935 ev = E_NEW(E_Event_Info_Rotation_Message, 1);
936 if (EINA_UNLIKELY(!ev))
938 ERR("Failed to allocate 'E_Event_Info_Rotation_Message'");
942 e_object_ref(E_OBJECT(zone));
944 ev->message = E_INFO_ROTATION_MESSAGE_SET;
946 ecore_event_add(E_EVENT_INFO_ROTATION_MESSAGE, ev, _e_test_helper_event_zone_rot_change_free, NULL);
951 eldbus_message_arguments_append(reply, "b", accept);
956 static Eldbus_Message *
957 _e_test_helper_cb_zone_rot_get(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
960 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
964 r = eldbus_message_arguments_get(msg, "i", &rot);
965 EINA_SAFETY_ON_FALSE_GOTO(r, end);
967 if ((rot < 0) || (rot > 270) || ((rot % 90) != 0))
970 zone = e_zone_current_get();
974 eldbus_message_arguments_append(reply, "b", zone->rot.curr);
979 static Eldbus_Message *
980 _e_test_helper_cb_deregister_window(const Eldbus_Service_Interface *iface EINA_UNUSED,
981 const Eldbus_Message *msg)
983 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
985 Eina_Bool res = EINA_FALSE;
987 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data, reply);
989 if (!eldbus_message_arguments_get(msg, "u", &id))
991 ERR("Error on eldbus_message_arguments_get()\n");
995 res = _e_test_helper_registrant_remove(id);
996 eldbus_message_arguments_append(reply, "b", res);
1001 static Eldbus_Message *
1002 _e_test_helper_cb_reset_register_window(const Eldbus_Service_Interface *iface EINA_UNUSED,
1003 const Eldbus_Message *msg)
1005 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
1007 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data, reply);
1009 _e_test_helper_registrant_clear();
1011 eldbus_message_arguments_append(reply, "b", EINA_TRUE);
1016 static Eldbus_Message*
1017 _e_test_helper_cb_change_stack(const Eldbus_Service_Interface *iface EINA_UNUSED,
1018 const Eldbus_Message *msg)
1020 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
1021 Ecore_Window win, target;
1024 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data, reply);
1026 if (!eldbus_message_arguments_get(msg, "uui", &win, &target, &above))
1028 ERR("error on eldbus_message_arguments_get()\n");
1032 if ((win) && (above != -1))
1033 _e_test_helper_restack(win, target, above);
1038 static Eldbus_Message*
1039 _e_test_helper_cb_activate_window(const Eldbus_Service_Interface *iface EINA_UNUSED,
1040 const Eldbus_Message *msg)
1042 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
1043 Ecore_Window win = 0x0;
1044 E_Client *ec = NULL;
1046 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data, reply);
1048 if (!eldbus_message_arguments_get(msg, "u", &win))
1050 ERR("error on eldbus_message_arguments_get()\n");
1056 ec = e_pixmap_find_client_by_res_id(win);
1057 e_policy_wl_activate(ec);
1063 static Eldbus_Message*
1064 _e_test_helper_cb_change_iconic_state(const Eldbus_Service_Interface *iface EINA_UNUSED,
1065 const Eldbus_Message *msg)
1067 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
1068 Ecore_Window win = 0x0;
1069 Eina_Bool iconic = EINA_FALSE;
1070 E_Client *ec = NULL;
1072 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data, reply);
1074 if (!eldbus_message_arguments_get(msg, "ub", &win, &iconic))
1076 ERR("error on eldbus_message_arguments_get()\n");
1082 ec = e_pixmap_find_client_by_res_id(win);
1084 e_policy_wl_iconify(ec);
1086 e_policy_wl_uniconify(ec);
1092 static Eldbus_Message*
1093 _e_test_helper_cb_set_transient_for(const Eldbus_Service_Interface *iface EINA_UNUSED,
1094 const Eldbus_Message *msg)
1096 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
1097 Ecore_Window parent = 0x0, child = 0x0;
1098 E_Client *ec = NULL, *pec = NULL;
1099 Eina_Bool accept = EINA_FALSE;
1101 EINA_SAFETY_ON_NULL_GOTO(th_data, fin);
1103 if (!eldbus_message_arguments_get(msg, "uu", &child, &parent))
1105 ERR("error on eldbus_message_arguments_get()\n");
1109 if (parent && child)
1111 pec = e_pixmap_find_client_by_res_id(parent);
1112 EINA_SAFETY_ON_NULL_GOTO(pec, fin);
1114 ec = e_pixmap_find_client_by_res_id(child);
1115 EINA_SAFETY_ON_NULL_GOTO(ec, fin);
1117 e_policy_stack_transient_for_set(ec, pec);
1122 eldbus_message_arguments_append(reply, "b", accept);
1126 static Eldbus_Message*
1127 _e_test_helper_cb_unset_transient_for(const Eldbus_Service_Interface *iface EINA_UNUSED,
1128 const Eldbus_Message *msg)
1130 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
1131 Ecore_Window child = 0x0;
1132 E_Client *ec = NULL;
1133 Eina_Bool accept = EINA_FALSE;
1135 EINA_SAFETY_ON_NULL_GOTO(th_data, fin);
1137 if (!eldbus_message_arguments_get(msg, "u", &child))
1139 ERR("error on eldbus_message_arguments_get()\n");
1145 ec = e_pixmap_find_client_by_res_id(child);
1146 EINA_SAFETY_ON_NULL_GOTO(ec, fin);
1148 e_policy_stack_transient_for_set(ec, NULL);
1153 eldbus_message_arguments_append(reply, "b", accept);
1157 static Eldbus_Message*
1158 _e_test_helper_cb_set_transient_for_below(const Eldbus_Service_Interface *iface EINA_UNUSED,
1159 const Eldbus_Message *msg)
1161 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
1162 Ecore_Window parent = 0x0, child = 0x0;
1163 E_Client *ec = NULL, *pec = NULL;
1164 Eina_Bool set = EINA_FALSE;
1165 Eina_Bool accept = EINA_FALSE;
1167 EINA_SAFETY_ON_NULL_GOTO(th_data, fin);
1169 if (!eldbus_message_arguments_get(msg, "uub", &child, &parent, &set))
1171 ERR("error on eldbus_message_arguments_get()\n");
1175 if (parent && child)
1177 pec = e_pixmap_find_client_by_res_id(parent);
1178 EINA_SAFETY_ON_NULL_GOTO(pec, fin);
1180 ec = e_pixmap_find_client_by_res_id(child);
1181 EINA_SAFETY_ON_NULL_GOTO(ec, fin);
1185 e_policy_stack_transient_for_below_set(ec, pec, EINA_TRUE);
1190 e_policy_stack_transient_for_below_set(ec, NULL, EINA_TRUE);
1196 eldbus_message_arguments_append(reply, "b", accept);
1200 static Eldbus_Message*
1201 _e_test_helper_cb_set_noti_level(const Eldbus_Service_Interface *iface EINA_UNUSED,
1202 const Eldbus_Message *msg)
1204 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
1205 Ecore_Window win = 0x0;
1207 E_Client *ec = NULL;
1209 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data, reply);
1211 if (!eldbus_message_arguments_get(msg, "ui", &win, &layer))
1213 ERR("error on eldbus_message_arguments_get()\n");
1219 ec = e_pixmap_find_client_by_res_id(win);
1220 if (!ec) return reply;
1222 e_client_layer_set(ec, layer);
1228 static Eldbus_Message*
1229 _e_test_helper_cb_set_focus_skip(const Eldbus_Service_Interface *iface EINA_UNUSED,
1230 const Eldbus_Message *msg)
1232 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
1233 Ecore_Window win = 0x0;
1234 Eina_Bool skip_set = EINA_FALSE;
1235 E_Client *ec = NULL;
1237 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data, reply);
1239 if (!eldbus_message_arguments_get(msg, "ub", &win, &skip_set))
1241 ERR("error on eldbus_message_arguments_get()\n");
1247 ec = e_pixmap_find_client_by_res_id(win);
1248 if (!ec) return reply;
1250 ec->icccm.accepts_focus = ec->icccm.take_focus = !skip_set;
1251 ec->changes.accepts_focus = 1;
1258 static Eldbus_Message *
1259 _e_test_helper_cb_get_client_info(const Eldbus_Service_Interface *iface EINA_UNUSED,
1260 const Eldbus_Message *msg)
1262 Eldbus_Message *reply;
1265 reply = eldbus_message_method_return_new(msg);
1266 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data, reply);
1268 if (!eldbus_message_arguments_get(msg, "u", &win))
1270 ERR("error getting window ID");
1274 _e_test_helper_message_append_client_info_by_window_id(eldbus_message_iter_get(reply), win);
1279 static Eldbus_Message *
1280 _e_test_helper_cb_get_clients(const Eldbus_Service_Interface *iface EINA_UNUSED,
1281 const Eldbus_Message *msg)
1283 Eldbus_Message *reply;
1285 reply = eldbus_message_method_return_new(msg);
1286 _e_test_helper_message_append_clients(eldbus_message_iter_get(reply));
1291 static Eldbus_Message *
1292 _e_test_helper_cb_get_noti_level(const Eldbus_Service_Interface *iface EINA_UNUSED,
1293 const Eldbus_Message *msg)
1295 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
1296 Ecore_Window win = 0x0;
1297 E_Client *ec = NULL;
1300 if (!eldbus_message_arguments_get(msg, "u", &win))
1302 ERR("error on eldbus_message_arguments_get()\n");
1306 ec = e_pixmap_find_client_by_res_id(win);
1312 eldbus_message_arguments_append(reply, "i", layer);
1317 _e_test_helper_cb_visibility_change(void *data EINA_UNUSED,
1318 int type EINA_UNUSED,
1322 Ecore_Window win = 0;
1323 E_Event_Client *ev = event;
1324 Test_Helper_Reg_Win *reg_win = NULL;
1326 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data, ECORE_CALLBACK_PASS_ON);
1327 if (!th_data->tc_running) return ECORE_CALLBACK_PASS_ON;
1330 win = e_pixmap_res_id_get(ec->pixmap);
1331 reg_win = _e_test_helper_find_win_on_reg_list(win);
1333 if (reg_win == NULL) return ECORE_CALLBACK_PASS_ON;
1335 if (reg_win->vis != !ec->visibility.obscured)
1336 _e_test_helper_send_change_visibility(win, !ec->visibility.obscured);
1338 reg_win->vis = !ec->visibility.obscured;
1340 return ECORE_CALLBACK_PASS_ON;
1344 _e_test_helper_cb_client_remove(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
1347 E_Event_Client *ev = event;
1348 Ecore_Window win = 0;
1350 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data, ECORE_CALLBACK_PASS_ON);
1353 if (ec && ec->pixmap)
1354 win = e_pixmap_res_id_get(ec->pixmap);
1356 if (win <= 0) return ECORE_CALLBACK_PASS_ON;
1358 _e_test_helper_registrant_remove(win);
1360 return ECORE_CALLBACK_PASS_ON;
1364 _e_test_helper_cb_client_restack(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
1366 E_Event_Client *ev = event;
1368 Eldbus_Message *sig;
1371 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data, ECORE_CALLBACK_PASS_ON);
1372 if (!th_data->tc_running) return ECORE_CALLBACK_PASS_ON;
1376 win = e_pixmap_res_id_get(ec->pixmap);
1377 if (!_e_test_helper_find_win_on_reg_list(win)) return ECORE_CALLBACK_PASS_ON;
1381 sig = eldbus_service_signal_new(th_data->iface, E_TEST_HELPER_SIGNAL_RESTACK);
1382 eldbus_message_arguments_append(sig, "u", win);
1383 eldbus_service_signal_send(th_data->iface, sig);
1386 return ECORE_CALLBACK_PASS_ON;
1390 _e_test_helper_cb_client_rotation_end(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
1392 E_Event_Client *ev = event;
1394 Eldbus_Message *sig;
1398 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data, ECORE_CALLBACK_PASS_ON);
1399 if (!th_data->tc_running) return ECORE_CALLBACK_PASS_ON;
1403 win = e_pixmap_res_id_get(ec->pixmap);
1404 if (!_e_test_helper_find_win_on_reg_list(win)) return ECORE_CALLBACK_PASS_ON;
1406 rot = ec->e.state.rot.ang.curr;
1410 sig = eldbus_service_signal_new(th_data->iface, E_TEST_HELPER_SIGNAL_WINDOW_ROTATION_CHANGED);
1411 eldbus_message_arguments_append(sig, "ui", win, rot);
1412 eldbus_service_signal_send(th_data->iface, sig);
1415 return ECORE_CALLBACK_PASS_ON;
1419 _e_test_helper_cb_client_focus_changed(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
1421 E_Event_Client *ev = event;
1422 E_Client *ec = NULL;
1423 Eldbus_Message *sig = NULL;
1424 Ecore_Window win = 0;
1426 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data, ECORE_CALLBACK_PASS_ON);
1427 if (!th_data->tc_running) return ECORE_CALLBACK_PASS_ON;
1431 win = e_pixmap_res_id_get(ec->pixmap);
1432 if (!_e_test_helper_find_win_on_reg_list(win)) return ECORE_CALLBACK_PASS_ON;
1436 sig = eldbus_service_signal_new(th_data->iface, E_TEST_HELPER_SIGNAL_FOCUS_CHANGED);
1437 eldbus_message_arguments_append(sig, "ub", win, ec->focused);
1438 eldbus_service_signal_send(th_data->iface, sig);
1441 return ECORE_CALLBACK_PASS_ON;
1445 _e_test_helper_cb_property_get(const Eldbus_Service_Interface *iface EINA_UNUSED, const char *name, Eldbus_Message_Iter *iter, const Eldbus_Message *msg EINA_UNUSED, Eldbus_Message **err EINA_UNUSED)
1447 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data, EINA_FALSE);
1449 Eldbus_Message_Iter *arr_of_win = NULL;
1450 Test_Helper_Reg_Win *reg_win = NULL;
1451 Eina_List *l = NULL;
1453 if (!e_util_strcmp(name, "Registrant"))
1455 arr_of_win = eldbus_message_iter_container_new(iter, 'a', "u");
1457 EINA_LIST_FOREACH(th_data->reg_wins, l, reg_win)
1459 eldbus_message_iter_basic_append(arr_of_win, 'u', reg_win->win);
1461 eldbus_message_iter_container_close(iter, arr_of_win);
1467 static Eldbus_Message *
1468 _e_test_helper_cb_set_render_condition(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
1470 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
1471 Ecore_Window win = 0x0;
1472 Eina_Bool accept = EINA_FALSE;
1475 if (!eldbus_message_arguments_get(msg, "us", &win, &cond))
1477 ERR("error on eldbus_message_arguments_get()\n");
1481 // a window should be registered for tracing, otherwise reply accept FALSE
1482 if (!th_data) goto fin;
1483 if (!th_data->tc_running) goto fin;
1484 if (!th_data->reg_wins) goto fin;
1485 if (!_e_test_helper_find_win_on_reg_list(win)) goto fin;
1487 // tracning condition on and off depending on "cond" string.
1488 if (!e_util_strcmp(cond, "effect"))
1490 E_LIST_HANDLER_APPEND(th_data->hdlrs, E_EVENT_COMP_OBJECT_EFFECT_START,
1491 _e_test_helper_cb_effect_start, NULL);
1492 E_LIST_HANDLER_APPEND(th_data->hdlrs, E_EVENT_COMP_OBJECT_EFFECT_END,
1493 _e_test_helper_cb_effect_end, NULL);
1498 eldbus_message_arguments_append(reply, "b", accept);
1503 static Eldbus_Message *
1504 _e_test_helper_cb_add_supported_aux_hint(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
1506 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
1507 Eina_Bool accept = EINA_FALSE;
1508 const Eina_List *supported_list = NULL;
1511 if (!eldbus_message_arguments_get(msg, "s", &hint))
1513 ERR("error on eldbus_message_arguments_get()\n");
1517 if (!th_data) goto fin;
1518 if (!th_data->tc_running) goto fin;
1520 supported_list = e_hints_aux_hint_supported_add(hint);
1522 if (eina_list_data_find(supported_list, hint))
1526 eldbus_message_arguments_append(reply, "b", accept);
1531 static Eldbus_Message *
1532 _e_test_helper_cb_del_supported_aux_hint(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
1534 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
1535 Eina_Bool accept = EINA_FALSE;
1536 const Eina_List *supported_list = NULL;
1539 if (!eldbus_message_arguments_get(msg, "s", &hint))
1541 ERR("error on eldbus_message_arguments_get()\n");
1545 if (!th_data) goto fin;
1546 if (!th_data->tc_running) goto fin;
1548 supported_list = e_hints_aux_hint_supported_del(hint);
1550 if (eina_list_data_find(supported_list, hint))
1554 eldbus_message_arguments_append(reply, "b", accept);
1559 static Eldbus_Message *
1560 _e_test_helper_cb_get_aux_hint(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
1562 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
1563 Ecore_Window win = 0x0;
1564 Test_Helper_Reg_Win *reg_win = NULL;
1565 E_Comp_Wl_Aux_Hint *ecah;
1570 const char *hint = NULL, *val = NULL;
1572 if (!eldbus_message_arguments_get(msg, "us", &win, &hint))
1574 ERR("error on eldbus_message_arguments_get()\n");
1578 if (!th_data) goto fin;
1579 if (!th_data->tc_running) goto fin;
1580 if (!th_data->reg_wins) goto fin;
1581 if (!(reg_win = _e_test_helper_find_win_on_reg_list(win))) goto fin;
1582 if (!(ec = reg_win->ec)) goto fin;
1584 EINA_LIST_REVERSE_FOREACH(ec->comp_data->aux_hint.hints, l, ecah)
1586 if ((!ecah->deleted) &&
1587 (!e_util_strcmp(ecah->hint, hint)))
1597 eldbus_message_arguments_append(reply, "iss", id, hint, val);
1603 _e_test_helper_cb_img_render(void *data EINA_UNUSED,
1604 int type EINA_UNUSED,
1608 E_Event_Comp_Object *ev = event;
1609 Ecore_Window win = 0;
1610 Test_Helper_Reg_Win *reg_win = NULL;
1612 if (!(ec = evas_object_data_get(ev->comp_object, "E_Client")))
1613 return ECORE_CALLBACK_DONE;
1615 // a window should be registered for tracing
1616 if (!th_data) return ECORE_CALLBACK_DONE;
1617 if (!th_data->tc_running) return ECORE_CALLBACK_DONE;
1618 if (!th_data->reg_wins) return ECORE_CALLBACK_DONE;
1620 win = e_pixmap_res_id_get(ec->pixmap);
1621 reg_win = _e_test_helper_find_win_on_reg_list(win);
1623 if (reg_win && reg_win->render_send)
1624 _e_test_helper_send_render(win);
1626 return ECORE_CALLBACK_DONE;
1630 _e_test_helper_cb_effect_start(void *data EINA_UNUSED,
1631 int type EINA_UNUSED,
1635 E_Event_Comp_Object *ev = event;
1636 Ecore_Window win = 0;
1637 Test_Helper_Reg_Win *reg_win = NULL;
1639 if (!(ec = evas_object_data_get(ev->comp_object, "E_Client")))
1640 return ECORE_CALLBACK_DONE;
1642 // a window should be registered for tracing
1643 if (!th_data) return ECORE_CALLBACK_DONE;
1644 if (!th_data->tc_running) return ECORE_CALLBACK_DONE;
1645 if (!th_data->reg_wins) return ECORE_CALLBACK_DONE;
1647 win = e_pixmap_res_id_get(ec->pixmap);
1648 reg_win = _e_test_helper_find_win_on_reg_list(win);
1650 if (reg_win && ec && ec->frame)
1652 reg_win->render_send = EINA_TRUE;
1653 e_comp_object_render_trace_set(ec->frame, EINA_TRUE);
1654 e_pixmap_image_refresh(ec->pixmap);
1655 e_comp_object_dirty(ec->frame);
1658 return ECORE_CALLBACK_DONE;
1662 _e_test_helper_cb_effect_end(void *data EINA_UNUSED,
1663 int type EINA_UNUSED,
1667 E_Event_Comp_Object *ev = event;
1668 Ecore_Window win = 0;
1669 Test_Helper_Reg_Win *reg_win = NULL;
1671 ec = evas_object_data_get(ev->comp_object, "E_Client");
1672 EINA_SAFETY_ON_NULL_RETURN_VAL(ec, ECORE_CALLBACK_DONE);
1674 // a window should be registered for tracing
1675 if (!th_data) return ECORE_CALLBACK_DONE;
1676 if (!th_data->tc_running) return ECORE_CALLBACK_DONE;
1677 if (!th_data->reg_wins) return ECORE_CALLBACK_DONE;
1679 win = e_pixmap_res_id_get(ec->pixmap);
1680 reg_win = _e_test_helper_find_win_on_reg_list(win);
1682 if (reg_win && ec->frame)
1684 e_comp_object_render_trace_set(ec->frame, EINA_FALSE);
1685 reg_win->render_send = EINA_FALSE;
1688 return ECORE_CALLBACK_DONE;
1692 _e_test_helper_hook_cb_client_aux_hint_change(void *data EINA_UNUSED, E_Client *ec)
1694 Ecore_Window win = 0;
1695 E_Comp_Wl_Client_Data *cdata = e_client_cdata_get(ec);
1697 E_Comp_Wl_Aux_Hint *hint;
1699 EINA_SAFETY_ON_NULL_RETURN(th_data);
1700 if (!th_data->tc_running) return;
1702 win = e_pixmap_res_id_get(ec->pixmap);
1703 if (!_e_test_helper_find_win_on_reg_list(win)) return;
1707 EINA_LIST_FOREACH_SAFE(cdata->aux_hint.hints, l, ll, hint)
1711 _e_test_helper_send_aux_hint_change(win, hint->id, hint->hint, hint->val);
1718 _e_test_helper_cb_client_iconic_state_changed(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
1720 E_Event_Client *ev = event;
1722 Eldbus_Message *sig;
1725 if (!th_data->tc_running) return ECORE_CALLBACK_PASS_ON;
1728 if (!ec) return ECORE_CALLBACK_PASS_ON;
1730 win = e_pixmap_res_id_get(ec->pixmap);
1731 if (!win) return ECORE_CALLBACK_PASS_ON;
1733 if (!_e_test_helper_find_win_on_reg_list(win)) return ECORE_CALLBACK_PASS_ON;
1735 sig = eldbus_service_signal_new(th_data->iface, E_TEST_HELPER_SIGNAL_ICONIC_STATE_CHANGED);
1736 eldbus_message_arguments_append(sig, "ubb", win, ec->iconic, e_client_is_iconified_by_client(ec));
1737 eldbus_service_signal_send(th_data->iface, sig);
1739 return ECORE_CALLBACK_PASS_ON;
1742 /* externally accessible functions */
1744 e_test_helper_init(void)
1746 Eina_Bool res = EINA_FALSE;
1748 EINA_SAFETY_ON_TRUE_GOTO((e_dbus_conn_init() <= 0), err);
1750 th_data = E_NEW(Test_Helper_Data, 1);
1751 EINA_SAFETY_ON_NULL_GOTO(th_data, err);
1753 th_data->dbus_init_done_h = ecore_event_handler_add(E_EVENT_DBUS_CONN_INIT_DONE, _e_test_helper_cb_dbus_init_done, NULL);
1754 EINA_SAFETY_ON_NULL_GOTO(th_data->dbus_init_done_h, err);
1756 res = e_dbus_conn_dbus_init(ELDBUS_CONNECTION_TYPE_SYSTEM);
1757 EINA_SAFETY_ON_FALSE_GOTO(res, err);
1759 E_LIST_HANDLER_APPEND(th_data->hdlrs, E_EVENT_CLIENT_VISIBILITY_CHANGE,
1760 _e_test_helper_cb_visibility_change, NULL);
1761 E_LIST_HANDLER_APPEND(th_data->hdlrs, E_EVENT_CLIENT_REMOVE,
1762 _e_test_helper_cb_client_remove, NULL);
1763 E_LIST_HANDLER_APPEND(th_data->hdlrs, E_EVENT_CLIENT_STACK,
1764 _e_test_helper_cb_client_restack, NULL);
1765 E_LIST_HANDLER_APPEND(th_data->hdlrs, E_EVENT_CLIENT_ROTATION_CHANGE_END,
1766 _e_test_helper_cb_client_rotation_end, NULL);
1767 E_LIST_HANDLER_APPEND(th_data->hdlrs, E_EVENT_CLIENT_FOCUS_IN,
1768 _e_test_helper_cb_client_focus_changed, NULL);
1769 E_LIST_HANDLER_APPEND(th_data->hdlrs, E_EVENT_CLIENT_FOCUS_OUT,
1770 _e_test_helper_cb_client_focus_changed, NULL);
1771 E_LIST_HANDLER_APPEND(th_data->hdlrs, E_EVENT_COMP_OBJECT_IMG_RENDER,
1772 _e_test_helper_cb_img_render, NULL);
1773 E_LIST_HANDLER_APPEND(th_data->hdlrs, E_EVENT_CLIENT_ICONIFY,
1774 _e_test_helper_cb_client_iconic_state_changed, NULL);
1775 E_LIST_HANDLER_APPEND(th_data->hdlrs, E_EVENT_CLIENT_UNICONIFY,
1776 _e_test_helper_cb_client_iconic_state_changed, NULL);
1778 E_LIST_HOOK_APPEND(th_data->hooks, E_CLIENT_HOOK_AUX_HINT_CHANGE,
1779 _e_test_helper_hook_cb_client_aux_hint_change, NULL);
1784 e_test_helper_shutdown();
1789 e_test_helper_shutdown(void)
1793 E_FREE_LIST(th_data->hdlrs, ecore_event_handler_del);
1795 _e_test_helper_registrant_clear();
1797 if (th_data->tc_timer)
1799 ecore_timer_del(th_data->tc_timer);
1800 th_data->tc_timer = NULL;
1803 if (th_data->dbus_init_done_h)
1805 ecore_event_handler_del(th_data->dbus_init_done_h);
1806 th_data->dbus_init_done_h = NULL;
1812 eldbus_service_interface_unregister(th_data->iface);
1814 e_dbus_conn_connection_unref(th_data->conn);
1815 th_data->conn = NULL;
1818 e_dbus_conn_shutdown();