add GetVisibleInfo_v3 method 93/291793/2
authorDoyoun Kang <doyoun.kang@samsung.com>
Fri, 21 Apr 2023 08:16:01 +0000 (17:16 +0900)
committerDoyoun Kang <doyoun.kang@samsung.com>
Mon, 24 Apr 2023 06:37:53 +0000 (15:37 +0900)
Change-Id: Ibe7bd20a54b11bbb2e8e0a582ee9c7dda7c28cf9

src/e_mod_processmgr.c

index d67ec74ebe1b110d456b4d93210e65241d6753ea..e3d1cdb87e38549a9d461ea6260284c277d44bb4 100644 (file)
@@ -16,12 +16,15 @@ static Ecore_Event_Handler *_dbus_init_done = NULL;
 #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"
+// pid, geo(x,y,w,h), win angle, target angle, is_transformed, alpha, opaque, visibility, focused, is_mapped, layer, name
+#define VALUE_TYPE_FOR_VISIBLE_WINS_V3 "iiiiiiibbiibbis"
 
 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_visible_window_info_v3_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);
@@ -31,6 +34,7 @@ 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 },
+   { "GetVisibleWinInfo_v3", NULL, ELDBUS_ARGS({"a("VALUE_TYPE_FOR_VISIBLE_WINS_V3")", "array of window"}), _e_processmgr_visible_window_info_v3_get, 0 },
    { "GetFocusProc", NULL, ELDBUS_ARGS({"i", "pid"}), _e_processmgr_focus_pid_get, 0 },
    { NULL, NULL, NULL, NULL, 0 }
 };
@@ -156,14 +160,18 @@ _msg_window_info_append(Eldbus_Message_Iter *iter, int ver)
    E_Client *ec;
    E_Client *p_ec;
    E_Client *a_ec;
+   E_Zone *zone;
    Evas_Object *o;
    int noti_level;
    Eina_Bool is_opaque;
+   int zone_angle, win_angle;
 
    EINA_SAFETY_ON_NULL_RETURN_VAL(iter, EINA_FALSE);
 
    if (ver == 2)
      eldbus_message_iter_arguments_append(iter, "a("VALUE_TYPE_FOR_VISIBLE_WINS_V2")", &array_of_win);
+   else if (ver == 3)
+     eldbus_message_iter_arguments_append(iter, "a("VALUE_TYPE_FOR_VISIBLE_WINS_V3")", &array_of_win);
    else // default version : 1
      eldbus_message_iter_arguments_append(iter, "a("VALUE_TYPE_FOR_VISIBLE_WINS")", &array_of_win);
 
@@ -196,6 +204,12 @@ _msg_window_info_append(Eldbus_Message_Iter *iter, int ver)
         // color depth
         is_alpha = ec->argb;
 
+        // current angle
+        win_angle = ec->e.state.rot.ang.curr;
+
+        // zone angle
+        zone_angle = ec->zone ? ec->zone->rot.curr : 0;
+
         // visibility
         visibility = ec->visibility.obscured;
 
@@ -267,6 +281,15 @@ _msg_window_info_append(Eldbus_Message_Iter *iter, int ver)
                 (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 if (ver == 3)
+          {
+             eldbus_message_iter_arguments_append(array_of_win, "("VALUE_TYPE_FOR_VISIBLE_WINS_V3")", &struct_of_win);
+
+             // pid, geo(x,y,w,h), win angle, target angle, is_transformed, alpha, opaque, visibility, focused, is_mapped, layer, name
+             eldbus_message_iter_arguments_append
+                (struct_of_win, VALUE_TYPE_FOR_VISIBLE_WINS_V3,
+                 pid, x, y, w, h, win_angle, zone_angle, 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);
@@ -317,6 +340,23 @@ _e_processmgr_visible_window_info_v2_get(const Eldbus_Service_Interface *iface E
    return reply;
 }
 
+static Eldbus_Message *
+_e_processmgr_visible_window_info_v3_get(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
+{
+   Eldbus_Message *reply = NULL;
+   Eina_Bool ret;
+
+   ELOGF("PROCESSMGR", "Get request - GetVisibleWinInfo_v3", 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), 3);
+   ELOGF("PROCESSMGR", "Reply result:%d", NULL, ret);
+
+   return reply;
+}
+
 static Eldbus_Message *
 _e_processmgr_focus_pid_get(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
 {