winfo: support basic_op_gen option 01/258801/1
authorDoyoun Kang <doyoun.kang@samsung.com>
Wed, 26 May 2021 02:37:50 +0000 (11:37 +0900)
committerDoyoun Kang <doyoun.kang@samsung.com>
Wed, 26 May 2021 02:40:52 +0000 (11:40 +0900)
We've added basic_op_gen option to winfo (enlightenment_info).
This option generates some operations (such as lower, activate).

usage:
      winfo -basic_op_gen {window_id} {operation}
example:
      winfo -basic_op_gen 0xb84b3aa0 lower
      winfo -basic_op_gen 0xb84b3aa0 activate

Change-Id: Iaf3848a7a7f1d920a09295ef2ce7caa00900b963

src/bin/e_info_client.c
src/bin/e_info_server.c
src/bin/e_info_shared_types.h
src/bin/e_policy_wl.c
src/bin/e_policy_wl.h

index fec05c2714078e6ce6986ffecedcd15784d3fe92..c8ac9ecfc4cc59b35e14f3e84b375779ee25e1db 100644 (file)
@@ -6214,6 +6214,40 @@ _e_info_client_proc_gcov(int argc, char **argv)
    return;
 }
 
+static void
+_e_info_client_basic_operation_gen(int argc, char **argv)
+{
+   const char *win, *operation;
+   Eldbus_Message *msg;
+   Eldbus_Message_Iter *itr;
+   Eldbus_Pending *p;
+
+   if (argc < 4)
+     {
+        printf("Error Check Args: enlightenment_info -basic_op_gen [window] [operation]\n");
+        return;
+     }
+
+   win = argv[2];
+   operation = argv[3];
+
+   msg = eldbus_proxy_method_call_new(e_info_client.proxy, "basic_op_gen");
+   itr = eldbus_message_iter_get(msg);
+   eldbus_message_iter_basic_append(itr, 's', win);
+   eldbus_message_iter_basic_append(itr, 's', operation);
+
+   p = eldbus_proxy_send(e_info_client.proxy, msg,
+                         _e_info_client_eldbus_message_cb,
+                         NULL, -1);
+   if (!p)
+     {
+        printf("\"aux_msg\" proxy_send error");
+        return;
+     }
+
+   ecore_main_loop_begin();
+}
+
 typedef struct _ProcInfo
 {
    const char *option;
@@ -6575,6 +6609,12 @@ static ProcInfo procs_to_execute[] =
       "execute gcov flush",
       _e_info_client_proc_gcov
    },
+   {
+      "basic_op_gen",
+      USAGE_BASIC_OPERATION_GENERATE,
+      "Generate basic operation",
+      _e_info_client_basic_operation_gen
+   },
 };
 
 ProcInfo procs_to_input[] =
index 074bc888d5b9aef39858cac05feb9b36faee654a..3a988230ba926a5c25e0bd9ba33f381f2d9f84bc 100644 (file)
@@ -11,6 +11,7 @@
 #include "e_comp_object.h"
 #include "e_info_server_input.h"
 #include <mcheck.h>
+#include "e_policy_wl.h"
 
 #define EDJE_EDIT_IS_UNSTABLE_AND_I_KNOW_ABOUT_IT
 #include <Edje_Edit.h>
@@ -7102,6 +7103,79 @@ _e_info_server_cb_gcov(const Eldbus_Service_Interface *iface EINA_UNUSED, const
    return reply;
 }
 
+static void
+_e_info_server_basic_operation_request(E_Client *ec, const char *operation)
+{
+   if (!ec) return;
+   if (!operation) return;
+
+   if (!e_util_strcmp("lower", operation))
+     {
+        e_policy_wl_generate_request(ec, E_POLICY_WL_GENERATE_REQUEST_LOWER);
+     }
+   else if (!e_util_strcmp("activate", operation))
+     {
+        e_policy_wl_generate_request(ec, E_POLICY_WL_GENERATE_REQUEST_ACTIVATE);
+     }
+   else if (!e_util_strcmp("iconify", operation))
+     {
+        e_policy_wl_generate_request(ec, E_POLICY_WL_GENERATE_REQUEST_ICONIFY);
+     }
+   else if (!e_util_strcmp("uniconify", operation))
+     {
+        e_policy_wl_generate_request(ec, E_POLICY_WL_GENERATE_REQUEST_UNICONIFY);
+     }
+   else
+     {
+        ERR("Not supported operation (%s)", operation);
+     }
+}
+
+static Eldbus_Message *
+_e_info_server_cb_basic_operation_generate(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
+{
+   Eldbus_Message *reply = eldbus_message_method_return_new(msg);
+   const char *win_str, *operation;
+   unsigned long tmp = 0;
+   uint64_t win_id = 0;
+   E_Client *ec;
+   Evas_Object *o;
+   Eina_Bool res = EINA_FALSE;
+
+   if (!e_policy)
+     {
+        ERR("e_policy is not initialized!");
+        return reply;
+     }
+
+   if (!eldbus_message_arguments_get(msg, "ss", &win_str, &operation))
+     {
+        ERR("Error getting arguments.");
+        return reply;
+     }
+
+   res = e_util_string_to_ulong(win_str, &tmp, 16);
+   EINA_SAFETY_ON_FALSE_RETURN_VAL(res, reply);
+
+   win_id = (uint64_t)tmp;
+
+   for (o = evas_object_top_get(e_comp->evas); o; o = evas_object_below_get(o))
+     {
+        ec = evas_object_data_get(o, "E_Client");
+        if (!ec) continue;
+
+        Ecore_Window win = e_client_util_win_get(ec);
+
+        if (win == win_id)
+          {
+             _e_info_server_basic_operation_request(ec, operation);
+             break;
+          }
+     }
+
+   return reply;
+}
+
 //{ "method_name", arguments_from_client, return_values_to_client, _method_cb, ELDBUS_METHOD_FLAG },
 static const Eldbus_Method methods[] = {
    { "get_window_info", NULL, ELDBUS_ARGS({"iiiiisiiiiia("VALUE_TYPE_FOR_TOPVWINS")", "array of ec"}), _e_info_server_cb_window_info_get, 0 },
@@ -7193,6 +7267,7 @@ static const Eldbus_Method methods[] = {
    { "mousegen", ELDBUS_ARGS({"iiii", "mouse information"}), ELDBUS_ARGS({"s", "result message"}), _e_info_server_cb_mousegen, 0},
    { "filter", ELDBUS_ARGS({"sis", "win_id, on(1)/off(0), filter name"}), ELDBUS_ARGS({"s", "result of request"}), _e_info_server_cb_filter, 0},
    { "gcov", ELDBUS_ARGS({"i", "option"}), NULL, _e_info_server_cb_gcov, 0},
+   { "basic_op_gen", ELDBUS_ARGS({"s","window id" }, {"s", "operation"}), NULL, _e_info_server_cb_basic_operation_generate, 0},
    { NULL, NULL, NULL, NULL, 0 }
 };
 
index ba53c3bb7c6b5086d133ccdc2ef115735edfbae7..3d004fb05181fb8ca2e8d7305a6eb6242de21705 100644 (file)
@@ -356,4 +356,12 @@ typedef enum
    "\twinfo -desk_group raise_sub2 0\n"                                  \
    "\twinfo -desk_group check_stack\n"
 
+/* -------------------------------------------------------------------------- */
+/* BASIC_OPERATION_GENERATE                                                   */
+/* -------------------------------------------------------------------------- */
+#define USAGE_BASIC_OPERATION_GENERATE                                        \
+   "-basic_op_gen {window id} ( lower | activate | iconify | uniconify )\n"   \
+   "Example:\n"                                                               \
+   "\twinfo -basic_op_gen basic_op_gen lower\n"
+
 #endif /* end of _E_INFO_SHARED_TYPES_ */
index a42fd25eb0e908a920a6d16ad66e3100c6261ac9..d5b9164bfb4c4dda054f48f22eef0e94c11545dc 100644 (file)
@@ -7516,6 +7516,36 @@ _e_policy_wl_cb_hook_shell_surface_ready(void *d, E_Client *ec)
      }
 }
 
+void
+e_policy_wl_generate_request(E_Client *ec, E_Policy_Wl_Gen_Request type)
+{
+   E_Comp_Wl_Client_Data *cdata = NULL;
+   if (!ec) return;
+
+   cdata = e_client_cdata_get(ec);
+   if (!cdata) return;
+   if (!cdata->wl_surface) return;
+
+   ELOGF("POL", "Generate operation (type:%d)", ec, type);
+   switch (type)
+     {
+      case E_POLICY_WL_GENERATE_REQUEST_LOWER:
+         _tzpol_iface_cb_lower(NULL, NULL, cdata->wl_surface);
+         break;
+      case E_POLICY_WL_GENERATE_REQUEST_ACTIVATE:
+         _tzpol_iface_cb_activate(NULL, NULL, cdata->wl_surface);
+         break;
+      case E_POLICY_WL_GENERATE_REQUEST_ICONIFY:
+         _tzpol_iface_cb_iconify(NULL, NULL, cdata->wl_surface);
+         break;
+      case E_POLICY_WL_GENERATE_REQUEST_UNICONIFY:
+         _tzpol_iface_cb_uniconify(NULL, NULL, cdata->wl_surface);
+         break;
+      default:
+         break;
+     }
+}
+
 // --------------------------------------------------------
 // public functions
 // --------------------------------------------------------
index 22ceff0dc7ede6d2e24abdbf048a3f6a4366e659..c635bcfa5aff1af193d4ff990aec8fd10199aa49 100644 (file)
@@ -15,6 +15,15 @@ void      e_policy_wl_pixmap_del(E_Pixmap *cp);
 typedef struct _E_Policy_Wl_Hook E_Policy_Wl_Hook;
 typedef void (*E_Policy_Wl_Hook_Cb)(void *data, pid_t pid);
 
+typedef enum _E_Policy_Wl_Gen_Request
+{
+   E_POLICY_WL_GENERATE_REQUEST_LOWER,
+   E_POLICY_WL_GENERATE_REQUEST_ACTIVATE,
+   E_POLICY_WL_GENERATE_REQUEST_ICONIFY,
+   E_POLICY_WL_GENERATE_REQUEST_UNICONIFY,
+   E_POLICY_WL_GENERATE_REQUEST_LAST,
+} E_Policy_Wl_Gen_Request;
+
 typedef enum _E_Policy_Wl_Hook_Point
 {
    E_POLICY_WL_HOOK_BASE_OUTPUT_RESOLUTION_GET,
@@ -90,4 +99,7 @@ E_API void e_policy_wl_stack_changed_send(E_Client *ec);
 /* activate */
 E_API void e_policy_wl_activate(E_Client *ec);
 
+/* util */
+EINTERN void e_policy_wl_generate_request(E_Client *ec, E_Policy_Wl_Gen_Request type);
+
 #endif /* E_MOD_WL_H */