1 #include "e_test_helper_intern.h"
2 #include "e_policy_wl_intern.h"
3 #include "e_comp_canvas_intern.h"
4 #include "e_comp_intern.h"
5 #include "e_devicemgr_intern.h"
6 #include "e_pixmap_intern.h"
7 #include "e_policy_intern.h"
8 #include "e_client_intern.h"
9 #include "e_comp_object_intern.h"
10 #include "e_dbus_conn_intern.h"
11 #include "e_info_server_intern.h"
12 #include "e_utils_intern.h"
13 #include "e_hints_intern.h"
15 #define BUS "org.enlightenment.wm"
16 #define PATH "/org/enlightenment/wm"
17 #define IFACE "org.enlightenment.wm.Test"
19 #define E_TH_SIGN_WIN_INFO "usiiiiibbbiibibbbi"
20 #define E_TC_TIMEOUT 10.0
22 typedef struct _Test_Helper_Reg_Win
27 Eina_Bool render_send;
28 } Test_Helper_Reg_Win;
31 typedef struct _Test_Helper_Data
33 Eldbus_Connection *conn;
34 Eldbus_Service_Interface *iface;
35 Ecore_Event_Handler *dbus_init_done_h;
42 Eina_Bool tc_timer_needs;
43 Ecore_Timer *tc_timer;
46 static Test_Helper_Data *th_data = NULL;
48 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);
50 static Eldbus_Message *_e_test_helper_cb_testcase_start(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
51 static Eldbus_Message *_e_test_helper_cb_testcase_end(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
52 static Eldbus_Message *_e_test_helper_cb_testcase_timeout_set(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
53 static Eldbus_Message *_e_test_helper_cb_register_window(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
54 static Eldbus_Message *_e_test_helper_cb_deregister_window(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
55 static Eldbus_Message *_e_test_helper_cb_reset_register_window(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
56 static Eldbus_Message *_e_test_helper_cb_change_stack(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
57 static Eldbus_Message *_e_test_helper_cb_activate_window(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
58 static Eldbus_Message *_e_test_helper_cb_change_iconic_state(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
59 static Eldbus_Message *_e_test_helper_cb_set_transient_for(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
60 static Eldbus_Message *_e_test_helper_cb_unset_transient_for(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
61 static Eldbus_Message *_e_test_helper_cb_set_transient_for_below(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
62 static Eldbus_Message *_e_test_helper_cb_set_noti_level(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
63 static Eldbus_Message *_e_test_helper_cb_set_focus_skip(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
64 static Eldbus_Message *_e_test_helper_cb_get_client_info(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg);
65 static Eldbus_Message *_e_test_helper_cb_get_clients(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
66 static Eldbus_Message *_e_test_helper_cb_get_noti_level(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
67 static Eldbus_Message *_e_test_helper_cb_dpms(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
68 static Eldbus_Message *_e_test_helper_cb_ev_freeze(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
69 static Eldbus_Message *_e_test_helper_cb_kill_win(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
70 static Eldbus_Message *_e_test_helper_cb_ev_mouse(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
71 static Eldbus_Message *_e_test_helper_cb_ev_key(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
72 static Eldbus_Message *_e_test_helper_cb_hwc(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
73 static Eldbus_Message *_e_test_helper_cb_zone_rot_change(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
74 static Eldbus_Message *_e_test_helper_cb_zone_rot_get(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
75 static Eldbus_Message *_e_test_helper_cb_set_render_condition(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
76 static Eldbus_Message *_e_test_helper_cb_add_supported_aux_hint(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
77 static Eldbus_Message *_e_test_helper_cb_del_supported_aux_hint(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
78 static Eldbus_Message *_e_test_helper_cb_get_aux_hint(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg);
79 static Eina_Bool _e_test_helper_cb_img_render(void *data EINA_UNUSED, int type EINA_UNUSED, void *event);
80 static Eina_Bool _e_test_helper_cb_effect_start(void *data EINA_UNUSED, int type EINA_UNUSED, void *event);
81 static Eina_Bool _e_test_helper_cb_effect_end(void *data EINA_UNUSED, int type EINA_UNUSED, void *event);
85 E_TEST_HELPER_SIGNAL_CHANGE_VISIBILITY = 0,
86 E_TEST_HELPER_SIGNAL_RESTACK,
87 E_TEST_HELPER_SIGNAL_WINDOW_ROTATION_CHANGED,
88 E_TEST_HELPER_SIGNAL_FOCUS_CHANGED,
89 E_TEST_HELPER_SIGNAL_RENDER,
90 E_TEST_HELPER_AUX_HINT_CHANGED,
91 E_TEST_HELPER_SIGNAL_ICONIC_STATE_CHANGED,
94 static const Eldbus_Signal signals[] = {
95 [E_TEST_HELPER_SIGNAL_CHANGE_VISIBILITY] =
98 ELDBUS_ARGS({"ub", "window id, visibility"}),
101 [E_TEST_HELPER_SIGNAL_RESTACK] =
104 ELDBUS_ARGS({"u", "window id was restacked"}),
107 [E_TEST_HELPER_SIGNAL_WINDOW_ROTATION_CHANGED] =
109 "WinRotationChanged",
110 ELDBUS_ARGS({"ui", "a window id was rotated to given angle"}),
113 [E_TEST_HELPER_SIGNAL_FOCUS_CHANGED] =
116 ELDBUS_ARGS({"ub", "window id, focus state"}),
119 [E_TEST_HELPER_SIGNAL_RENDER] =
122 ELDBUS_ARGS({"u", "window id for tracing rendering"}),
125 [E_TEST_HELPER_AUX_HINT_CHANGED] =
128 ELDBUS_ARGS({"uuss", "window id, aux_hint id, aux_hint key, aux_hint value"}),
131 [E_TEST_HELPER_SIGNAL_ICONIC_STATE_CHANGED] =
133 "IconicStateChanged",
134 ELDBUS_ARGS({"ubb", "window id, iconic state"}),
140 static const Eldbus_Method methods[] ={
144 ELDBUS_ARGS({"b", "accept or not"}),
145 _e_test_helper_cb_testcase_start, 0
150 ELDBUS_ARGS({"b", "accept or not"}),
151 _e_test_helper_cb_testcase_end, 0
155 ELDBUS_ARGS({"bu", "needs timer and time in millisecond"}),
156 ELDBUS_ARGS({"b", "accept or not"}),
157 _e_test_helper_cb_testcase_timeout_set, 0
161 ELDBUS_ARGS({"u", "window id to be registered"}),
162 ELDBUS_ARGS({"b", "accept or not"}),
163 _e_test_helper_cb_register_window, 0
167 ELDBUS_ARGS({"u", "window id to be deregistered"}),
168 ELDBUS_ARGS({"b", "accept or not"}),
169 _e_test_helper_cb_deregister_window, 0
172 "ResetRegisterWindow",
174 ELDBUS_ARGS({"b", "accept or not"}),
175 _e_test_helper_cb_reset_register_window, 0
179 ELDBUS_ARGS({"uui", "window id to restack, above or below, stacking type"}),
181 _e_test_helper_cb_change_stack, 0
185 ELDBUS_ARGS({"u", "window id to activate"}),
187 _e_test_helper_cb_activate_window, 0
191 ELDBUS_ARGS({"ub", "window id to change iconic state, iconify or uniconify"}),
193 _e_test_helper_cb_change_iconic_state, 0
196 "SetWindowTransientFor",
197 ELDBUS_ARGS({"uu", "child window id to set transient_for, parent window id to set transient_for"}),
198 ELDBUS_ARGS({"b", "accept or not"}),
199 _e_test_helper_cb_set_transient_for, 0
202 "UnsetWindowTransientFor",
203 ELDBUS_ARGS({"u", "child window id to set transient_for"}),
204 ELDBUS_ARGS({"b", "accept or not"}),
205 _e_test_helper_cb_unset_transient_for, 0
208 "SetWindowTransientForBelow",
209 ELDBUS_ARGS({"uub", "child window id to set transient_for, parent window id to set transient_for, set or unset"}),
210 ELDBUS_ARGS({"b", "accept or not"}),
211 _e_test_helper_cb_set_transient_for_below, 0
214 "SetWindowNotiLevel",
215 ELDBUS_ARGS({"ui", "window id to set notification level, notification level"}),
217 _e_test_helper_cb_set_noti_level, 0
220 "SetWindowFocusSkip",
221 ELDBUS_ARGS({"ub", "window id to set focus skip, skip set or skip unset"}),
223 _e_test_helper_cb_set_focus_skip, 0
227 ELDBUS_ARGS({"u", "window id"}),
228 ELDBUS_ARGS({E_TH_SIGN_WIN_INFO, "information of ec"}),
229 _e_test_helper_cb_get_client_info, 0
234 ELDBUS_ARGS({"ua("E_TH_SIGN_WIN_INFO")", "array of ec"}),
235 _e_test_helper_cb_get_clients, 0
238 "GetWindowNotiLevel",
239 ELDBUS_ARGS({"u", "window id to get notification level"}),
240 ELDBUS_ARGS({"i", "notification level"}),
241 _e_test_helper_cb_get_noti_level, 0
245 ELDBUS_ARGS({"u", "DPMS 0=off or 1=on"}),
246 ELDBUS_ARGS({"b", "accept or not"}),
247 _e_test_helper_cb_dpms, 0
251 ELDBUS_ARGS({"u", "0=events will start to be processed or 1=freeze input events processing"}),
252 ELDBUS_ARGS({"b", "accept or not"}),
253 _e_test_helper_cb_ev_freeze, 0
257 ELDBUS_ARGS({"s", "window name to kill"}),
259 _e_test_helper_cb_kill_win, 0
263 ELDBUS_ARGS({"uii", "type 0=down 1=move 2=up, x position, y position"}),
264 ELDBUS_ARGS({"b", "accept or not"}),
265 _e_test_helper_cb_ev_mouse, 0
269 ELDBUS_ARGS({"us", "type 0=down 1=up, key name"}),
270 ELDBUS_ARGS({"b", "accept or not"}),
271 _e_test_helper_cb_ev_key, 0
275 ELDBUS_ARGS({"u", "0=off or 1=on"}),
276 ELDBUS_ARGS({"b", "accept or not"}),
277 _e_test_helper_cb_hwc, 0
280 "GetCurrentZoneRotation",
282 ELDBUS_ARGS({"i", "a angle of current zone"}),
283 _e_test_helper_cb_zone_rot_get, 0,
286 "ChangeZoneRotation",
287 ELDBUS_ARGS({"i", "(0, 90, 180, 270) = specific angle, -1 = unknown state"}),
288 ELDBUS_ARGS({"b", "accept or not"}),
289 _e_test_helper_cb_zone_rot_change, 0,
293 ELDBUS_ARGS({"us", "window id and type of rendering to trace"}),
294 ELDBUS_ARGS({"b", "accept or not"}),
295 _e_test_helper_cb_set_render_condition, 0,
298 "AddSupportedAuxHint",
299 ELDBUS_ARGS({"s", "Aux hint string to add supported aux hint"}),
300 ELDBUS_ARGS({"b", "accept or not"}),
301 _e_test_helper_cb_add_supported_aux_hint, 0,
304 "DelSupportedAuxHint",
305 ELDBUS_ARGS({"s", "Aux hint string to del supported aux hint"}),
306 ELDBUS_ARGS({"b", "accept or not"}),
307 _e_test_helper_cb_del_supported_aux_hint, 0,
311 ELDBUS_ARGS({"us", "window id and Aux hint string to get aux hint data"}),
312 ELDBUS_ARGS({"iss", "id, name, value"}),
313 _e_test_helper_cb_get_aux_hint, 0,
318 static const Eldbus_Property properties[] = {
319 { "Registrant", "au", NULL, NULL, 0 },
323 static const Eldbus_Service_Interface_Desc iface_desc = {
324 IFACE, methods, signals, properties, _e_test_helper_cb_property_get, NULL
328 _e_test_helper_registrant_clear(void)
330 Test_Helper_Reg_Win *reg_win = NULL;
332 EINA_SAFETY_ON_NULL_RETURN(th_data);
333 EINA_SAFETY_ON_NULL_RETURN(th_data->reg_wins);
335 EINA_LIST_FREE(th_data->reg_wins, reg_win)
337 if (reg_win->ec && reg_win->ec->frame)
338 e_comp_object_render_trace_set(reg_win->ec->frame, EINA_FALSE);
343 _e_test_helper_registrant_remove(Ecore_Window target_win)
345 Test_Helper_Reg_Win *reg_win = NULL;
346 Eina_List *l = NULL, *ll = NULL;
347 Eina_Bool res = EINA_FALSE;
349 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data, EINA_FALSE);
350 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data->reg_wins, EINA_FALSE);
352 EINA_LIST_FOREACH_SAFE(th_data->reg_wins, l, ll, reg_win)
354 if (reg_win->win == target_win)
356 if (reg_win->ec && reg_win->ec->frame)
357 e_comp_object_render_trace_set(reg_win->ec->frame, EINA_FALSE);
358 th_data->reg_wins = eina_list_remove(th_data->reg_wins, reg_win);
367 _e_test_helper_message_append_client(Eldbus_Message_Iter *iter, E_Client *ec)
369 eldbus_message_iter_arguments_append
370 (iter, E_TH_SIGN_WIN_INFO,
371 e_pixmap_res_id_get(ec->pixmap),
372 e_client_util_name_get(ec) ?: "NO NAME",
375 ec->x, ec->y, ec->w, ec->h,
378 evas_object_layer_get(ec->frame),
381 evas_object_data_get(ec->frame, "effect_running"),
383 /* visibility & iconify */
385 evas_object_visible_get(ec->frame),
386 ec->visibility.opaque,
387 e_client_visibility_get(ec),
389 ec->iconic ? (e_client_is_iconified_by_client(ec) ? 2 : 1) : 0,
396 evas_object_focus_get(ec->frame),
399 ec->e.state.rot.ang.curr);
403 _e_test_helper_cb_dbus_init_done(void *data EINA_UNUSED, int type, void *event)
405 E_DBus_Conn_Init_Done_Event *e = event;
407 if ((e->status == E_DBUS_CONN_INIT_SUCCESS) && (e->conn_type == ELDBUS_CONNECTION_TYPE_SYSTEM))
409 th_data->conn = e_dbus_conn_connection_ref(ELDBUS_CONNECTION_TYPE_SYSTEM);
412 th_data->iface = eldbus_service_interface_register(th_data->conn, PATH, &iface_desc);
415 ecore_event_handler_del(th_data->dbus_init_done_h);
416 th_data->dbus_init_done_h = NULL;
418 return ECORE_CALLBACK_PASS_ON;
422 _e_test_helper_message_append_client_info_by_window_id(Eldbus_Message_Iter *iter, Ecore_Window win)
426 ec = e_pixmap_find_client_by_res_id(win);
430 _e_test_helper_message_append_client(iter, ec);
434 _e_test_helper_message_append_clients(Eldbus_Message_Iter *iter)
436 Eldbus_Message_Iter *array_of_ec;
441 EINA_SAFETY_ON_NULL_RETURN(th_data);
443 if (!(comp = e_comp)) return;
445 eldbus_message_iter_arguments_append(iter, "a("E_TH_SIGN_WIN_INFO")", &array_of_ec);
448 for (o = evas_object_top_get(comp->evas); o; o = evas_object_below_get(o))
450 Eldbus_Message_Iter* struct_of_ec;
452 ec = evas_object_data_get(o, "E_Client");
454 if (e_client_util_ignored_get(ec)) continue;
456 eldbus_message_iter_arguments_append(array_of_ec, "("E_TH_SIGN_WIN_INFO")", &struct_of_ec);
457 _e_test_helper_message_append_client(struct_of_ec, ec);
458 eldbus_message_iter_container_close(array_of_ec, struct_of_ec);
461 eldbus_message_iter_container_close(iter, array_of_ec);
465 _e_test_helper_restack(Ecore_Window win, Ecore_Window target, int above)
467 E_Client *ec = NULL, *tec = NULL;
469 ec = e_pixmap_find_client_by_res_id(win);
470 tec = e_pixmap_find_client_by_res_id(target);
479 e_policy_stack_transient_child_raise(ec);
486 e_policy_stack_transient_child_lower(ec);
495 e_client_stack_above(ec, tec);
497 e_client_stack_below(ec, tec);
502 _e_test_helper_cb_tc_timeout(void *data)
504 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data, ECORE_CALLBACK_DONE);
506 th_data->tc_running = EINA_FALSE;
507 _e_test_helper_registrant_clear();
509 if (th_data->tc_timer)
511 ecore_timer_del(th_data->tc_timer);
512 th_data->tc_timer = NULL;
515 return ECORE_CALLBACK_DONE;
520 _e_test_helper_send_change_visibility(Ecore_Window win, Eina_Bool vis)
522 Eldbus_Message *signal;
524 EINA_SAFETY_ON_NULL_RETURN(th_data);
526 signal = eldbus_service_signal_new(th_data->iface,
527 E_TEST_HELPER_SIGNAL_CHANGE_VISIBILITY);
528 eldbus_message_arguments_append(signal, "ub", win, vis);
529 eldbus_service_signal_send(th_data->iface, signal);
533 _e_test_helper_send_render(Ecore_Window win)
535 Eldbus_Message *signal;
537 EINA_SAFETY_ON_NULL_RETURN(th_data);
539 signal = eldbus_service_signal_new(th_data->iface, E_TEST_HELPER_SIGNAL_RENDER);
540 eldbus_message_arguments_append(signal, "u", win);
541 eldbus_service_signal_send(th_data->iface, signal);
545 _e_test_helper_send_aux_hint_change(Ecore_Window win, int hint_id, const char *hint_key, const char *hint_val)
547 Eldbus_Message *signal;
549 EINA_SAFETY_ON_NULL_RETURN(th_data);
551 signal = eldbus_service_signal_new(th_data->iface, E_TEST_HELPER_AUX_HINT_CHANGED);
552 eldbus_message_arguments_append(signal, "uuss", win, hint_id, hint_key, hint_val);
553 eldbus_service_signal_send(th_data->iface, signal);
556 static Test_Helper_Reg_Win *
557 _e_test_helper_find_win_on_reg_list(Ecore_Window win)
560 Test_Helper_Reg_Win *reg_win = NULL;
562 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data, NULL);
563 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data->reg_wins, NULL);
565 EINA_LIST_FOREACH(th_data->reg_wins, l, reg_win)
567 if (reg_win->win == win)
574 /* Method Handlers */
575 static Eldbus_Message *
576 _e_test_helper_cb_testcase_start(const Eldbus_Service_Interface *iface EINA_UNUSED,
577 const Eldbus_Message *msg)
579 Eldbus_Message *reply;
580 Eina_Bool res = EINA_FALSE;
582 reply = eldbus_message_method_return_new(msg);
586 if (th_data->tc_timer)
587 ecore_timer_del(th_data->tc_timer);
589 if (th_data->tc_timer_needs)
590 th_data->tc_timer = ecore_timer_add(E_TC_TIMEOUT, _e_test_helper_cb_tc_timeout, NULL);
591 res = th_data->tc_running = EINA_TRUE;
594 eldbus_message_arguments_append(reply, "b", res);
599 static Eldbus_Message *
600 _e_test_helper_cb_testcase_end(const Eldbus_Service_Interface *iface EINA_UNUSED,
601 const Eldbus_Message *msg)
603 Eldbus_Message *reply;
604 Eina_Bool res = EINA_FALSE;
606 reply = eldbus_message_method_return_new(msg);
610 if (th_data->tc_timer)
612 ecore_timer_del(th_data->tc_timer);
613 th_data->tc_timer = NULL;
615 th_data->tc_running = EINA_FALSE;
619 eldbus_message_arguments_append(reply, "b", res);
624 static Eldbus_Message *
625 _e_test_helper_cb_testcase_timeout_set(const Eldbus_Service_Interface *iface EINA_UNUSED,
626 const Eldbus_Message *msg)
628 Eldbus_Message *reply;
629 Eina_Bool res = EINA_FALSE;
630 Eina_Bool set = EINA_TRUE;
631 uint32_t timeout = E_TC_TIMEOUT;
633 reply = eldbus_message_method_return_new(msg);
635 if (!eldbus_message_arguments_get(msg, "bu", &set, &timeout))
637 ERR("Error on eldbus_message_arguments_get()\n");
643 if (set != th_data->tc_timer_needs)
645 th_data->tc_timer_needs = set;
647 ecore_timer_del(th_data->tc_timer);
652 if (th_data->tc_timer)
653 ecore_timer_del(th_data->tc_timer);
655 if (th_data->tc_timer_needs)
656 th_data->tc_timer = ecore_timer_add(timeout, _e_test_helper_cb_tc_timeout, NULL);
661 eldbus_message_arguments_append(reply, "b", res);
666 eldbus_message_arguments_append(reply, "b", EINA_FALSE);
670 static Eldbus_Message *
671 _e_test_helper_cb_register_window(const Eldbus_Service_Interface *iface EINA_UNUSED,
672 const Eldbus_Message *msg)
674 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
676 Test_Helper_Reg_Win *new_win = NULL;
678 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data, reply);
680 if (!eldbus_message_arguments_get(msg, "u", &id))
682 ERR("Error on eldbus_message_arguments_get()\n");
686 new_win = E_NEW(Test_Helper_Reg_Win, 1);
687 EINA_SAFETY_ON_NULL_GOTO(new_win, err);
690 new_win->ec = e_pixmap_find_client_by_res_id(id);
692 th_data->reg_wins = eina_list_append(th_data->reg_wins, new_win);
693 eldbus_message_arguments_append(reply, "b", EINA_TRUE);
698 eldbus_message_arguments_append(reply, "b", EINA_FALSE);
702 static Eldbus_Message *
703 _e_test_helper_cb_dpms(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
705 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
706 Eina_Bool accept = EINA_FALSE;
709 if (!eldbus_message_arguments_get(msg, "u", &dpms))
711 ERR("Error on eldbus_message_arguments_get()\n");
730 eldbus_message_arguments_append(reply, "b", accept);
735 static Eldbus_Message *
736 _e_test_helper_cb_ev_freeze(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
738 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
739 Eina_Bool accept = EINA_TRUE;
742 if (!eldbus_message_arguments_get(msg, "u", &freeze))
744 ERR("Error on eldbus_message_arguments_get()\n");
750 case 0: e_comp_all_thaw(); break;
751 case 1: e_comp_all_freeze(); break;
752 default: accept = EINA_FALSE; break;
755 eldbus_message_arguments_append(reply, "b", accept);
760 static Eldbus_Message *
761 _e_test_helper_cb_kill_win(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
763 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
765 Evas_Object *o = NULL;
766 char *win_name = NULL;
768 if (!eldbus_message_arguments_get(msg, "s", &win_name))
770 ERR("Error on eldbus_message_arguments_get()\n");
774 for (o = evas_object_top_get(e_comp->evas); o; o = evas_object_below_get(o))
776 const char *ec_name = NULL;
777 ec = evas_object_data_get(o, "E_Client");
779 if (e_client_util_ignored_get(ec)) continue;
781 ec_name = e_client_util_name_get(ec) ?: "NO NAME";
783 if (e_util_strcmp(ec_name, win_name)) continue;
784 ELOGF("E_TEST_HELPER", "Window killed by request(ec: %s)", ec, ec? ec->icccm.name : "NO NAME");
785 e_client_act_kill_begin(ec);
791 static Eldbus_Message *
792 _e_test_helper_cb_ev_mouse(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
794 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
795 Eina_Bool accept = EINA_TRUE;
796 Ecore_Event_Mouse_Button *ev = NULL;
800 if (!eldbus_message_arguments_get(msg, "uii", &type, &x, &y))
802 ERR("Error on eldbus_message_arguments_get()\n");
806 ev = E_NEW(Ecore_Event_Mouse_Button, 1);
807 EINA_SAFETY_ON_NULL_RETURN_VAL(ev, reply);
809 ev->timestamp = (unsigned int)(ecore_time_unix_get() * (double)1000);
811 ev->x = ev->root.x = x;
812 ev->y = ev->root.y = y;
817 case 0: ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, ev, NULL, NULL); break;
818 case 1: ecore_event_add(ECORE_EVENT_MOUSE_MOVE, ev, NULL, NULL); break;
819 case 2: ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_UP, ev, NULL, NULL); break;
820 default: accept = EINA_FALSE; break;
823 eldbus_message_arguments_append(reply, "b", accept);
832 _e_test_helper_key_event_add(char *key_name, unsigned int type)
835 char *device_identifier = NULL;
837 EINA_SAFETY_ON_NULL_RETURN_VAL(key_name, EINA_FALSE);
838 EINA_SAFETY_ON_NULL_RETURN_VAL(e_devicemgr, EINA_FALSE);
839 EINA_SAFETY_ON_NULL_RETURN_VAL(e_devicemgr->last_device_kbd, EINA_FALSE);
841 device_identifier = (char *)e_devicemgr->last_device_kbd->identifier;
843 EINA_SAFETY_ON_NULL_RETURN_VAL(device_identifier, EINA_FALSE);
845 res = e_devicemgr_inputgen_key_event_add(key_name, (Eina_Bool)type, device_identifier);
849 ERR("[E_Test_Helper] Failed on generating key event ! (key_name=%s, type=%d)\n", key_name, type);
856 static Eldbus_Message *
857 _e_test_helper_cb_ev_key(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
859 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
860 Eina_Bool accept = EINA_FALSE;
864 if (!eldbus_message_arguments_get(msg, "us", &type, &key))
866 ERR("Error on eldbus_message_arguments_get()\n");
877 accept = _e_test_helper_key_event_add(key, type);
883 eldbus_message_arguments_append(reply, "b", accept);
888 static Eldbus_Message *
889 _e_test_helper_cb_hwc(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
891 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
892 Eina_Bool r, accept = EINA_FALSE;
895 r = eldbus_message_arguments_get(msg, "u", &on);
896 EINA_SAFETY_ON_FALSE_RETURN_VAL(r, reply);
902 case 0: accept = EINA_TRUE; e_comp_hwc_deactive_set(EINA_TRUE); break;
903 case 1: accept = EINA_TRUE; e_comp_hwc_deactive_set(EINA_FALSE); break;
908 eldbus_message_arguments_append(reply, "b", accept);
914 _e_test_helper_event_zone_rot_change_free(void *data EINA_UNUSED, void *event)
916 E_Event_Info_Rotation_Message *ev = event;
918 e_object_unref(E_OBJECT(ev->zone));
923 static Eldbus_Message *
924 _e_test_helper_cb_zone_rot_change(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
926 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
927 E_Event_Info_Rotation_Message *ev;
929 Eina_Bool r, accept = EINA_FALSE;
932 r = eldbus_message_arguments_get(msg, "i", &rot);
933 EINA_SAFETY_ON_FALSE_GOTO(r, end);
935 if ((rot < 0) || (rot > 270) || ((rot % 90) != 0))
938 zone = e_zone_current_get();
942 ev = E_NEW(E_Event_Info_Rotation_Message, 1);
943 if (EINA_UNLIKELY(!ev))
945 ERR("Failed to allocate 'E_Event_Info_Rotation_Message'");
949 e_object_ref(E_OBJECT(zone));
951 ev->message = E_INFO_ROTATION_MESSAGE_SET;
953 ecore_event_add(E_EVENT_INFO_ROTATION_MESSAGE, ev, _e_test_helper_event_zone_rot_change_free, NULL);
958 eldbus_message_arguments_append(reply, "b", accept);
963 static Eldbus_Message *
964 _e_test_helper_cb_zone_rot_get(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
967 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
971 r = eldbus_message_arguments_get(msg, "i", &rot);
972 EINA_SAFETY_ON_FALSE_GOTO(r, end);
974 if ((rot < 0) || (rot > 270) || ((rot % 90) != 0))
977 zone = e_zone_current_get();
981 eldbus_message_arguments_append(reply, "b", zone->rot.curr);
986 static Eldbus_Message *
987 _e_test_helper_cb_deregister_window(const Eldbus_Service_Interface *iface EINA_UNUSED,
988 const Eldbus_Message *msg)
990 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
992 Eina_Bool res = EINA_FALSE;
994 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data, reply);
996 if (!eldbus_message_arguments_get(msg, "u", &id))
998 ERR("Error on eldbus_message_arguments_get()\n");
1002 res = _e_test_helper_registrant_remove(id);
1003 eldbus_message_arguments_append(reply, "b", res);
1008 static Eldbus_Message *
1009 _e_test_helper_cb_reset_register_window(const Eldbus_Service_Interface *iface EINA_UNUSED,
1010 const Eldbus_Message *msg)
1012 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
1014 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data, reply);
1016 _e_test_helper_registrant_clear();
1018 eldbus_message_arguments_append(reply, "b", EINA_TRUE);
1023 static Eldbus_Message*
1024 _e_test_helper_cb_change_stack(const Eldbus_Service_Interface *iface EINA_UNUSED,
1025 const Eldbus_Message *msg)
1027 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
1028 Ecore_Window win, target;
1031 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data, reply);
1033 if (!eldbus_message_arguments_get(msg, "uui", &win, &target, &above))
1035 ERR("error on eldbus_message_arguments_get()\n");
1039 if ((win) && (above != -1))
1040 _e_test_helper_restack(win, target, above);
1045 static Eldbus_Message*
1046 _e_test_helper_cb_activate_window(const Eldbus_Service_Interface *iface EINA_UNUSED,
1047 const Eldbus_Message *msg)
1049 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
1050 Ecore_Window win = 0x0;
1051 E_Client *ec = NULL;
1053 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data, reply);
1055 if (!eldbus_message_arguments_get(msg, "u", &win))
1057 ERR("error on eldbus_message_arguments_get()\n");
1063 ec = e_pixmap_find_client_by_res_id(win);
1064 e_policy_wl_activate(ec);
1070 static Eldbus_Message*
1071 _e_test_helper_cb_change_iconic_state(const Eldbus_Service_Interface *iface EINA_UNUSED,
1072 const Eldbus_Message *msg)
1074 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
1075 Ecore_Window win = 0x0;
1076 Eina_Bool iconic = EINA_FALSE;
1077 E_Client *ec = NULL;
1079 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data, reply);
1081 if (!eldbus_message_arguments_get(msg, "ub", &win, &iconic))
1083 ERR("error on eldbus_message_arguments_get()\n");
1089 ec = e_pixmap_find_client_by_res_id(win);
1091 e_policy_wl_iconify(ec);
1093 e_policy_wl_uniconify(ec);
1099 static Eldbus_Message*
1100 _e_test_helper_cb_set_transient_for(const Eldbus_Service_Interface *iface EINA_UNUSED,
1101 const Eldbus_Message *msg)
1103 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
1104 Ecore_Window parent = 0x0, child = 0x0;
1105 E_Client *ec = NULL, *pec = NULL;
1106 Eina_Bool accept = EINA_FALSE;
1108 EINA_SAFETY_ON_NULL_GOTO(th_data, fin);
1110 if (!eldbus_message_arguments_get(msg, "uu", &child, &parent))
1112 ERR("error on eldbus_message_arguments_get()\n");
1116 if (parent && child)
1118 pec = e_pixmap_find_client_by_res_id(parent);
1119 EINA_SAFETY_ON_NULL_GOTO(pec, fin);
1121 ec = e_pixmap_find_client_by_res_id(child);
1122 EINA_SAFETY_ON_NULL_GOTO(ec, fin);
1124 e_policy_stack_transient_for_set(ec, pec);
1129 eldbus_message_arguments_append(reply, "b", accept);
1133 static Eldbus_Message*
1134 _e_test_helper_cb_unset_transient_for(const Eldbus_Service_Interface *iface EINA_UNUSED,
1135 const Eldbus_Message *msg)
1137 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
1138 Ecore_Window child = 0x0;
1139 E_Client *ec = NULL;
1140 Eina_Bool accept = EINA_FALSE;
1142 EINA_SAFETY_ON_NULL_GOTO(th_data, fin);
1144 if (!eldbus_message_arguments_get(msg, "u", &child))
1146 ERR("error on eldbus_message_arguments_get()\n");
1152 ec = e_pixmap_find_client_by_res_id(child);
1153 EINA_SAFETY_ON_NULL_GOTO(ec, fin);
1155 e_policy_stack_transient_for_set(ec, NULL);
1160 eldbus_message_arguments_append(reply, "b", accept);
1164 static Eldbus_Message*
1165 _e_test_helper_cb_set_transient_for_below(const Eldbus_Service_Interface *iface EINA_UNUSED,
1166 const Eldbus_Message *msg)
1168 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
1169 Ecore_Window parent = 0x0, child = 0x0;
1170 E_Client *ec = NULL, *pec = NULL;
1171 Eina_Bool set = EINA_FALSE;
1172 Eina_Bool accept = EINA_FALSE;
1174 EINA_SAFETY_ON_NULL_GOTO(th_data, fin);
1176 if (!eldbus_message_arguments_get(msg, "uub", &child, &parent, &set))
1178 ERR("error on eldbus_message_arguments_get()\n");
1182 if (parent && child)
1184 pec = e_pixmap_find_client_by_res_id(parent);
1185 EINA_SAFETY_ON_NULL_GOTO(pec, fin);
1187 ec = e_pixmap_find_client_by_res_id(child);
1188 EINA_SAFETY_ON_NULL_GOTO(ec, fin);
1192 e_policy_stack_transient_for_below_set(ec, pec, EINA_TRUE);
1197 e_policy_stack_transient_for_below_set(ec, NULL, EINA_TRUE);
1203 eldbus_message_arguments_append(reply, "b", accept);
1207 static Eldbus_Message*
1208 _e_test_helper_cb_set_noti_level(const Eldbus_Service_Interface *iface EINA_UNUSED,
1209 const Eldbus_Message *msg)
1211 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
1212 Ecore_Window win = 0x0;
1214 E_Client *ec = NULL;
1216 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data, reply);
1218 if (!eldbus_message_arguments_get(msg, "ui", &win, &layer))
1220 ERR("error on eldbus_message_arguments_get()\n");
1226 ec = e_pixmap_find_client_by_res_id(win);
1227 if (!ec) return reply;
1229 e_client_layer_set(ec, layer);
1235 static Eldbus_Message*
1236 _e_test_helper_cb_set_focus_skip(const Eldbus_Service_Interface *iface EINA_UNUSED,
1237 const Eldbus_Message *msg)
1239 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
1240 Ecore_Window win = 0x0;
1241 Eina_Bool skip_set = EINA_FALSE;
1242 E_Client *ec = NULL;
1244 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data, reply);
1246 if (!eldbus_message_arguments_get(msg, "ub", &win, &skip_set))
1248 ERR("error on eldbus_message_arguments_get()\n");
1254 ec = e_pixmap_find_client_by_res_id(win);
1255 if (!ec) return reply;
1257 ec->icccm.accepts_focus = ec->icccm.take_focus = !skip_set;
1258 ec->changes.accepts_focus = 1;
1265 static Eldbus_Message *
1266 _e_test_helper_cb_get_client_info(const Eldbus_Service_Interface *iface EINA_UNUSED,
1267 const Eldbus_Message *msg)
1269 Eldbus_Message *reply;
1272 reply = eldbus_message_method_return_new(msg);
1273 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data, reply);
1275 if (!eldbus_message_arguments_get(msg, "u", &win))
1277 ERR("error getting window ID");
1281 _e_test_helper_message_append_client_info_by_window_id(eldbus_message_iter_get(reply), win);
1286 static Eldbus_Message *
1287 _e_test_helper_cb_get_clients(const Eldbus_Service_Interface *iface EINA_UNUSED,
1288 const Eldbus_Message *msg)
1290 Eldbus_Message *reply;
1292 reply = eldbus_message_method_return_new(msg);
1293 _e_test_helper_message_append_clients(eldbus_message_iter_get(reply));
1298 static Eldbus_Message *
1299 _e_test_helper_cb_get_noti_level(const Eldbus_Service_Interface *iface EINA_UNUSED,
1300 const Eldbus_Message *msg)
1302 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
1303 Ecore_Window win = 0x0;
1304 E_Client *ec = NULL;
1307 if (!eldbus_message_arguments_get(msg, "u", &win))
1309 ERR("error on eldbus_message_arguments_get()\n");
1313 ec = e_pixmap_find_client_by_res_id(win);
1319 eldbus_message_arguments_append(reply, "i", layer);
1324 _e_test_helper_cb_visibility_change(void *data EINA_UNUSED,
1325 int type EINA_UNUSED,
1329 Ecore_Window win = 0;
1330 E_Event_Client *ev = event;
1331 Test_Helper_Reg_Win *reg_win = NULL;
1333 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data, ECORE_CALLBACK_PASS_ON);
1334 if (!th_data->tc_running) return ECORE_CALLBACK_PASS_ON;
1337 win = e_pixmap_res_id_get(ec->pixmap);
1338 reg_win = _e_test_helper_find_win_on_reg_list(win);
1340 if (reg_win == NULL) return ECORE_CALLBACK_PASS_ON;
1342 if (reg_win->vis != !e_client_visibility_get(ec))
1343 _e_test_helper_send_change_visibility(win, !e_client_visibility_get(ec));
1345 reg_win->vis = !e_client_visibility_get(ec);
1347 return ECORE_CALLBACK_PASS_ON;
1351 _e_test_helper_cb_client_remove(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
1354 E_Event_Client *ev = event;
1355 Ecore_Window win = 0;
1357 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data, ECORE_CALLBACK_PASS_ON);
1360 if (ec && ec->pixmap)
1361 win = e_pixmap_res_id_get(ec->pixmap);
1363 if (win <= 0) return ECORE_CALLBACK_PASS_ON;
1365 _e_test_helper_registrant_remove(win);
1367 return ECORE_CALLBACK_PASS_ON;
1371 _e_test_helper_cb_client_restack(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
1373 E_Event_Client *ev = event;
1375 Eldbus_Message *sig;
1378 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data, ECORE_CALLBACK_PASS_ON);
1379 if (!th_data->tc_running) return ECORE_CALLBACK_PASS_ON;
1383 win = e_pixmap_res_id_get(ec->pixmap);
1384 if (!_e_test_helper_find_win_on_reg_list(win)) return ECORE_CALLBACK_PASS_ON;
1388 sig = eldbus_service_signal_new(th_data->iface, E_TEST_HELPER_SIGNAL_RESTACK);
1389 eldbus_message_arguments_append(sig, "u", win);
1390 eldbus_service_signal_send(th_data->iface, sig);
1393 return ECORE_CALLBACK_PASS_ON;
1397 _e_test_helper_cb_client_rotation_end(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
1399 E_Event_Client *ev = event;
1401 Eldbus_Message *sig;
1405 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data, ECORE_CALLBACK_PASS_ON);
1406 if (!th_data->tc_running) return ECORE_CALLBACK_PASS_ON;
1410 win = e_pixmap_res_id_get(ec->pixmap);
1411 if (!_e_test_helper_find_win_on_reg_list(win)) return ECORE_CALLBACK_PASS_ON;
1413 rot = ec->e.state.rot.ang.curr;
1417 sig = eldbus_service_signal_new(th_data->iface, E_TEST_HELPER_SIGNAL_WINDOW_ROTATION_CHANGED);
1418 eldbus_message_arguments_append(sig, "ui", win, rot);
1419 eldbus_service_signal_send(th_data->iface, sig);
1422 return ECORE_CALLBACK_PASS_ON;
1426 _e_test_helper_cb_client_focus_changed(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
1428 E_Event_Client *ev = event;
1429 E_Client *ec = NULL;
1430 Eldbus_Message *sig = NULL;
1431 Ecore_Window win = 0;
1433 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data, ECORE_CALLBACK_PASS_ON);
1434 if (!th_data->tc_running) return ECORE_CALLBACK_PASS_ON;
1438 win = e_pixmap_res_id_get(ec->pixmap);
1439 if (!_e_test_helper_find_win_on_reg_list(win)) return ECORE_CALLBACK_PASS_ON;
1443 sig = eldbus_service_signal_new(th_data->iface, E_TEST_HELPER_SIGNAL_FOCUS_CHANGED);
1444 eldbus_message_arguments_append(sig, "ub", win, ec->focused);
1445 eldbus_service_signal_send(th_data->iface, sig);
1448 return ECORE_CALLBACK_PASS_ON;
1452 _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)
1454 EINA_SAFETY_ON_NULL_RETURN_VAL(th_data, EINA_FALSE);
1456 Eldbus_Message_Iter *arr_of_win = NULL;
1457 Test_Helper_Reg_Win *reg_win = NULL;
1458 Eina_List *l = NULL;
1460 if (!e_util_strcmp(name, "Registrant"))
1462 arr_of_win = eldbus_message_iter_container_new(iter, 'a', "u");
1464 EINA_LIST_FOREACH(th_data->reg_wins, l, reg_win)
1466 eldbus_message_iter_basic_append(arr_of_win, 'u', reg_win->win);
1468 eldbus_message_iter_container_close(iter, arr_of_win);
1474 static Eldbus_Message *
1475 _e_test_helper_cb_set_render_condition(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
1477 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
1478 Ecore_Window win = 0x0;
1479 Eina_Bool accept = EINA_FALSE;
1482 if (!eldbus_message_arguments_get(msg, "us", &win, &cond))
1484 ERR("error on eldbus_message_arguments_get()\n");
1488 // a window should be registered for tracing, otherwise reply accept FALSE
1489 if (!th_data) goto fin;
1490 if (!th_data->tc_running) goto fin;
1491 if (!th_data->reg_wins) goto fin;
1492 if (!_e_test_helper_find_win_on_reg_list(win)) goto fin;
1494 // tracning condition on and off depending on "cond" string.
1495 if (!e_util_strcmp(cond, "effect"))
1497 E_LIST_HANDLER_APPEND(th_data->hdlrs, E_EVENT_COMP_OBJECT_EFFECT_START,
1498 _e_test_helper_cb_effect_start, NULL);
1499 E_LIST_HANDLER_APPEND(th_data->hdlrs, E_EVENT_COMP_OBJECT_EFFECT_END,
1500 _e_test_helper_cb_effect_end, NULL);
1505 eldbus_message_arguments_append(reply, "b", accept);
1510 static Eldbus_Message *
1511 _e_test_helper_cb_add_supported_aux_hint(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
1513 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
1514 Eina_Bool accept = EINA_FALSE;
1515 const Eina_List *supported_list = NULL;
1518 if (!eldbus_message_arguments_get(msg, "s", &hint))
1520 ERR("error on eldbus_message_arguments_get()\n");
1524 if (!th_data) goto fin;
1525 if (!th_data->tc_running) goto fin;
1527 supported_list = e_hints_aux_hint_supported_add(hint);
1529 if (eina_list_data_find(supported_list, hint))
1533 eldbus_message_arguments_append(reply, "b", accept);
1538 static Eldbus_Message *
1539 _e_test_helper_cb_del_supported_aux_hint(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
1541 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
1542 Eina_Bool accept = EINA_FALSE;
1543 const Eina_List *supported_list = NULL;
1546 if (!eldbus_message_arguments_get(msg, "s", &hint))
1548 ERR("error on eldbus_message_arguments_get()\n");
1552 if (!th_data) goto fin;
1553 if (!th_data->tc_running) goto fin;
1555 supported_list = e_hints_aux_hint_supported_del(hint);
1557 if (eina_list_data_find(supported_list, hint))
1561 eldbus_message_arguments_append(reply, "b", accept);
1566 static Eldbus_Message *
1567 _e_test_helper_cb_get_aux_hint(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg)
1569 Eldbus_Message *reply = eldbus_message_method_return_new(msg);
1570 Ecore_Window win = 0x0;
1571 Test_Helper_Reg_Win *reg_win = NULL;
1572 E_Comp_Wl_Aux_Hint *ecah;
1577 const char *hint = NULL, *val = NULL;
1579 if (!eldbus_message_arguments_get(msg, "us", &win, &hint))
1581 ERR("error on eldbus_message_arguments_get()\n");
1585 if (!th_data) goto fin;
1586 if (!th_data->tc_running) goto fin;
1587 if (!th_data->reg_wins) goto fin;
1588 if (!(reg_win = _e_test_helper_find_win_on_reg_list(win))) goto fin;
1589 if (!(ec = reg_win->ec)) goto fin;
1591 EINA_LIST_REVERSE_FOREACH(ec->comp_data->aux_hint.hints, l, ecah)
1593 if ((!ecah->deleted) &&
1594 (!e_util_strcmp(ecah->hint, hint)))
1604 eldbus_message_arguments_append(reply, "iss", id, hint, val);
1610 _e_test_helper_cb_img_render(void *data EINA_UNUSED,
1611 int type EINA_UNUSED,
1615 E_Event_Comp_Object *ev = event;
1616 Ecore_Window win = 0;
1617 Test_Helper_Reg_Win *reg_win = NULL;
1619 if (!(ec = evas_object_data_get(ev->comp_object, "E_Client")))
1620 return ECORE_CALLBACK_DONE;
1622 // a window should be registered for tracing
1623 if (!th_data) return ECORE_CALLBACK_DONE;
1624 if (!th_data->tc_running) return ECORE_CALLBACK_DONE;
1625 if (!th_data->reg_wins) return ECORE_CALLBACK_DONE;
1627 win = e_pixmap_res_id_get(ec->pixmap);
1628 reg_win = _e_test_helper_find_win_on_reg_list(win);
1630 if (reg_win && reg_win->render_send)
1631 _e_test_helper_send_render(win);
1633 return ECORE_CALLBACK_DONE;
1637 _e_test_helper_cb_effect_start(void *data EINA_UNUSED,
1638 int type EINA_UNUSED,
1642 E_Event_Comp_Object *ev = event;
1643 Ecore_Window win = 0;
1644 Test_Helper_Reg_Win *reg_win = NULL;
1646 if (!(ec = evas_object_data_get(ev->comp_object, "E_Client")))
1647 return ECORE_CALLBACK_DONE;
1649 // a window should be registered for tracing
1650 if (!th_data) return ECORE_CALLBACK_DONE;
1651 if (!th_data->tc_running) return ECORE_CALLBACK_DONE;
1652 if (!th_data->reg_wins) return ECORE_CALLBACK_DONE;
1654 win = e_pixmap_res_id_get(ec->pixmap);
1655 reg_win = _e_test_helper_find_win_on_reg_list(win);
1657 if (reg_win && ec && ec->frame)
1659 reg_win->render_send = EINA_TRUE;
1660 e_comp_object_render_trace_set(ec->frame, EINA_TRUE);
1661 e_pixmap_image_refresh(ec->pixmap);
1662 e_comp_object_dirty(ec->frame);
1665 return ECORE_CALLBACK_DONE;
1669 _e_test_helper_cb_effect_end(void *data EINA_UNUSED,
1670 int type EINA_UNUSED,
1674 E_Event_Comp_Object *ev = event;
1675 Ecore_Window win = 0;
1676 Test_Helper_Reg_Win *reg_win = NULL;
1678 ec = evas_object_data_get(ev->comp_object, "E_Client");
1679 EINA_SAFETY_ON_NULL_RETURN_VAL(ec, ECORE_CALLBACK_DONE);
1681 // a window should be registered for tracing
1682 if (!th_data) return ECORE_CALLBACK_DONE;
1683 if (!th_data->tc_running) return ECORE_CALLBACK_DONE;
1684 if (!th_data->reg_wins) return ECORE_CALLBACK_DONE;
1686 win = e_pixmap_res_id_get(ec->pixmap);
1687 reg_win = _e_test_helper_find_win_on_reg_list(win);
1689 if (reg_win && ec->frame)
1691 e_comp_object_render_trace_set(ec->frame, EINA_FALSE);
1692 reg_win->render_send = EINA_FALSE;
1695 return ECORE_CALLBACK_DONE;
1699 _e_test_helper_hook_cb_client_aux_hint_change(void *data EINA_UNUSED, E_Client *ec)
1701 Ecore_Window win = 0;
1702 E_Comp_Wl_Client_Data *cdata = e_client_cdata_get(ec);
1704 E_Comp_Wl_Aux_Hint *hint;
1706 EINA_SAFETY_ON_NULL_RETURN(th_data);
1707 if (!th_data->tc_running) return;
1709 win = e_pixmap_res_id_get(ec->pixmap);
1710 if (!_e_test_helper_find_win_on_reg_list(win)) return;
1714 EINA_LIST_FOREACH_SAFE(cdata->aux_hint.hints, l, ll, hint)
1718 _e_test_helper_send_aux_hint_change(win, hint->id, hint->hint, hint->val);
1725 _e_test_helper_cb_client_iconic_state_changed(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
1727 E_Event_Client *ev = event;
1729 Eldbus_Message *sig;
1732 if (!th_data->tc_running) return ECORE_CALLBACK_PASS_ON;
1735 if (!ec) return ECORE_CALLBACK_PASS_ON;
1737 win = e_pixmap_res_id_get(ec->pixmap);
1738 if (!win) return ECORE_CALLBACK_PASS_ON;
1740 if (!_e_test_helper_find_win_on_reg_list(win)) return ECORE_CALLBACK_PASS_ON;
1742 sig = eldbus_service_signal_new(th_data->iface, E_TEST_HELPER_SIGNAL_ICONIC_STATE_CHANGED);
1743 eldbus_message_arguments_append(sig, "ubb", win, ec->iconic, e_client_is_iconified_by_client(ec));
1744 eldbus_service_signal_send(th_data->iface, sig);
1746 return ECORE_CALLBACK_PASS_ON;
1749 /* externally accessible functions */
1751 e_test_helper_init(void)
1753 Eina_Bool res = EINA_FALSE;
1755 EINA_SAFETY_ON_TRUE_GOTO((e_dbus_conn_init() <= 0), err);
1757 th_data = E_NEW(Test_Helper_Data, 1);
1758 EINA_SAFETY_ON_NULL_GOTO(th_data, err);
1760 th_data->dbus_init_done_h = ecore_event_handler_add(E_EVENT_DBUS_CONN_INIT_DONE, _e_test_helper_cb_dbus_init_done, NULL);
1761 EINA_SAFETY_ON_NULL_GOTO(th_data->dbus_init_done_h, err);
1763 res = e_dbus_conn_dbus_init(ELDBUS_CONNECTION_TYPE_SYSTEM);
1764 EINA_SAFETY_ON_FALSE_GOTO(res, err);
1766 E_LIST_HANDLER_APPEND(th_data->hdlrs, E_EVENT_CLIENT_VISIBILITY_CHANGE,
1767 _e_test_helper_cb_visibility_change, NULL);
1768 E_LIST_HANDLER_APPEND(th_data->hdlrs, E_EVENT_CLIENT_REMOVE,
1769 _e_test_helper_cb_client_remove, NULL);
1770 E_LIST_HANDLER_APPEND(th_data->hdlrs, E_EVENT_CLIENT_STACK,
1771 _e_test_helper_cb_client_restack, NULL);
1772 E_LIST_HANDLER_APPEND(th_data->hdlrs, E_EVENT_CLIENT_ROTATION_CHANGE_END,
1773 _e_test_helper_cb_client_rotation_end, NULL);
1774 E_LIST_HANDLER_APPEND(th_data->hdlrs, E_EVENT_CLIENT_FOCUS_IN,
1775 _e_test_helper_cb_client_focus_changed, NULL);
1776 E_LIST_HANDLER_APPEND(th_data->hdlrs, E_EVENT_CLIENT_FOCUS_OUT,
1777 _e_test_helper_cb_client_focus_changed, NULL);
1778 E_LIST_HANDLER_APPEND(th_data->hdlrs, E_EVENT_COMP_OBJECT_IMG_RENDER,
1779 _e_test_helper_cb_img_render, NULL);
1780 E_LIST_HANDLER_APPEND(th_data->hdlrs, E_EVENT_CLIENT_ICONIFY,
1781 _e_test_helper_cb_client_iconic_state_changed, NULL);
1782 E_LIST_HANDLER_APPEND(th_data->hdlrs, E_EVENT_CLIENT_UNICONIFY,
1783 _e_test_helper_cb_client_iconic_state_changed, NULL);
1785 E_LIST_HOOK_APPEND(th_data->hooks, E_CLIENT_HOOK_AUX_HINT_CHANGE,
1786 _e_test_helper_hook_cb_client_aux_hint_change, NULL);
1791 e_test_helper_shutdown();
1796 e_test_helper_shutdown(void)
1800 E_FREE_LIST(th_data->hdlrs, ecore_event_handler_del);
1802 _e_test_helper_registrant_clear();
1804 if (th_data->tc_timer)
1806 ecore_timer_del(th_data->tc_timer);
1807 th_data->tc_timer = NULL;
1810 if (th_data->dbus_init_done_h)
1812 ecore_event_handler_del(th_data->dbus_init_done_h);
1813 th_data->dbus_init_done_h = NULL;
1819 eldbus_service_interface_unregister(th_data->iface);
1821 e_dbus_conn_connection_unref(th_data->conn);
1822 th_data->conn = NULL;
1825 e_dbus_conn_shutdown();