add GetVisibleInfo_v2 method 38/277338/1
authorDoyoun Kang <doyoun.kang@samsung.com>
Thu, 10 Mar 2022 02:57:30 +0000 (11:57 +0900)
committerDoyoun Kang <doyoun.kang@samsung.com>
Tue, 5 Jul 2022 08:18:38 +0000 (17:18 +0900)
Change-Id: I667d0a6ad5ab614da0b14999570af6b87a87d00c

src/e_mod_processmgr.c

index cb632157fefcfae511fc0290d46b2669f4b22fa9..d67ec74ebe1b110d456b4d93210e65241d6753ea 100644 (file)
@@ -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;