From ad7efbbafe1070592d47e3a2404ae95d82c78a65 Mon Sep 17 00:00:00 2001 From: Doyoun Kang Date: Thu, 10 Mar 2022 11:57:30 +0900 Subject: [PATCH] add GetVisibleInfo_v2 method Change-Id: I667d0a6ad5ab614da0b14999570af6b87a87d00c --- src/e_mod_processmgr.c | 57 +++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 50 insertions(+), 7 deletions(-) diff --git a/src/e_mod_processmgr.c b/src/e_mod_processmgr.c index cb63215..d67ec74 100644 --- a/src/e_mod_processmgr.c +++ b/src/e_mod_processmgr.c @@ -14,11 +14,14 @@ static Ecore_Event_Handler *_dbus_init_done = NULL; // global res_id, geo(x,y,w,h), alpha, visibility, focused, pid, parent pid, acestor pid, noti level, opaque #define VALUE_TYPE_FOR_VISIBLE_WINS "uiiiibibiiiib" +// pid, geo(x,y,w,h), is_transformed, alpha, opaque, visibility, focused, is_mapped, layer, name +#define VALUE_TYPE_FOR_VISIBLE_WINS_V2 "iiiiibbiibbis" static void _e_processmgr_process_action_send(int pid, E_Process_Action act); static void _e_processmgr_cb_hook_action_change(void *d EINA_UNUSED, E_Process *epro, void *user); static Eldbus_Message* _e_processmgr_process_info_get(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg); static Eldbus_Message *_e_processmgr_visible_window_info_get(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg); +static Eldbus_Message *_e_processmgr_visible_window_info_v2_get(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg); static Eldbus_Message *_e_processmgr_focus_pid_get(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg); static Eina_Bool _e_processmgr_cb_client_add(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); @@ -27,6 +30,7 @@ static Eina_Bool _e_processmgr_cb_client_remove(void *data EINA_UNUSED, int type static const Eldbus_Method _e_processmgr_methods[] = { { "GetProcStatus", ELDBUS_ARGS({"i", "pid"}), ELDBUS_ARGS({"i","process status"}, {"i", "focused"}), _e_processmgr_process_info_get, 0 }, { "GetVisibleWinInfo", NULL, ELDBUS_ARGS({"a("VALUE_TYPE_FOR_VISIBLE_WINS")", "array of window"}), _e_processmgr_visible_window_info_get, 0 }, + { "GetVisibleWinInfo_v2", NULL, ELDBUS_ARGS({"a("VALUE_TYPE_FOR_VISIBLE_WINS_V2")", "array of window"}), _e_processmgr_visible_window_info_v2_get, 0 }, { "GetFocusProc", NULL, ELDBUS_ARGS({"i", "pid"}), _e_processmgr_focus_pid_get, 0 }, { NULL, NULL, NULL, NULL, 0 } }; @@ -146,7 +150,7 @@ _process_id_get(E_Client *ec) } static Eina_Bool -_msg_window_info_append(Eldbus_Message_Iter *iter) +_msg_window_info_append(Eldbus_Message_Iter *iter, int ver) { Eldbus_Message_Iter *array_of_win; E_Client *ec; @@ -158,7 +162,10 @@ _msg_window_info_append(Eldbus_Message_Iter *iter) EINA_SAFETY_ON_NULL_RETURN_VAL(iter, EINA_FALSE); - eldbus_message_iter_arguments_append(iter, "a("VALUE_TYPE_FOR_VISIBLE_WINS")", &array_of_win); + if (ver == 2) + eldbus_message_iter_arguments_append(iter, "a("VALUE_TYPE_FOR_VISIBLE_WINS_V2")", &array_of_win); + else // default version : 1 + eldbus_message_iter_arguments_append(iter, "a("VALUE_TYPE_FOR_VISIBLE_WINS")", &array_of_win); // append info. for (o = evas_object_top_get(e_comp->evas); o; o = evas_object_below_get(o)) @@ -169,6 +176,8 @@ _msg_window_info_append(Eldbus_Message_Iter *iter) Eina_Bool is_alpha; int visibility; Eina_Bool focused; + Eina_Bool is_mapped = EINA_FALSE; + Eina_Bool is_transformed = EINA_FALSE; pid_t pid = -1; pid_t p_pid = -1; pid_t a_pid = -1; @@ -244,11 +253,28 @@ _msg_window_info_append(Eldbus_Message_Iter *iter) else is_opaque = EINA_TRUE; - eldbus_message_iter_arguments_append(array_of_win, "("VALUE_TYPE_FOR_VISIBLE_WINS")", &struct_of_win); + if (ec->comp_data) + is_mapped = ec->comp_data->mapped; + + is_transformed = e_client_transform_core_enable_get(ec); + + if (ver == 2) + { + eldbus_message_iter_arguments_append(array_of_win, "("VALUE_TYPE_FOR_VISIBLE_WINS_V2")", &struct_of_win); + + // pid, geo(x,y,w,h), is_transformed, alpha, opaque, visibility, focused, is_mapped, layer, name + eldbus_message_iter_arguments_append + (struct_of_win, VALUE_TYPE_FOR_VISIBLE_WINS_V2, + pid, x, y, w, h, is_transformed, is_alpha, is_opaque, visibility, focused, is_mapped, ec->layer, e_client_util_name_get(ec) ?: "NO NAME"); + } + else + { + eldbus_message_iter_arguments_append(array_of_win, "("VALUE_TYPE_FOR_VISIBLE_WINS")", &struct_of_win); - eldbus_message_iter_arguments_append - (struct_of_win, VALUE_TYPE_FOR_VISIBLE_WINS, - res_id, x, y, w, h, is_alpha, visibility, focused, pid, p_pid, a_pid, noti_level, is_opaque); + eldbus_message_iter_arguments_append + (struct_of_win, VALUE_TYPE_FOR_VISIBLE_WINS, + res_id, x, y, w, h, is_alpha, visibility, focused, pid, p_pid, a_pid, noti_level, is_opaque); + } eldbus_message_iter_container_close(array_of_win, struct_of_win); } @@ -268,7 +294,24 @@ _e_processmgr_visible_window_info_get(const Eldbus_Service_Interface *iface EINA reply = eldbus_message_method_return_new(msg); EINA_SAFETY_ON_NULL_RETURN_VAL(reply, NULL); - ret = _msg_window_info_append(eldbus_message_iter_get(reply)); + ret = _msg_window_info_append(eldbus_message_iter_get(reply), 1); + ELOGF("PROCESSMGR", "Reply result:%d", NULL, ret); + + return reply; +} + +static Eldbus_Message * +_e_processmgr_visible_window_info_v2_get(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg) +{ + Eldbus_Message *reply = NULL; + Eina_Bool ret; + + ELOGF("PROCESSMGR", "Get request - GetVisibleWinInfo_v2", NULL); + + reply = eldbus_message_method_return_new(msg); + EINA_SAFETY_ON_NULL_RETURN_VAL(reply, NULL); + + ret = _msg_window_info_append(eldbus_message_iter_get(reply), 2); ELOGF("PROCESSMGR", "Reply result:%d", NULL, ret); return reply; -- 2.7.4