winfo: add command for testing desk group 13/231313/3
authorDoyoun Kang <doyoun.kang@samsung.com>
Tue, 21 Apr 2020 06:58:21 +0000 (15:58 +0900)
committerDoyoun Kang <doyoun.kang@samsung.com>
Tue, 21 Apr 2020 07:41:48 +0000 (07:41 +0000)
Change-Id: I85ccd4f1d9711f29b6c6799d3f5c45c0cb1d4d79

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

index 67bdcb9d192bb1edd2545bfc9e9ff9a415a2502a..bd0f4dcc7fef88a71143c8a4a25c991d8be7165e 100644 (file)
@@ -2709,6 +2709,137 @@ arg_err:
    printf("Usage: enlightenment_info -desk\n");
 }
 
+static void
+_e_info_client_proc_desk_group(int argc, char **argv)
+{
+   const int offset = 2, base_cmd_len = 1;
+   Eina_Bool res = EINA_FALSE;
+   int sub_cmd_len = 0;
+
+   if (argc < offset + base_cmd_len)
+     goto arg_err;
+
+   if (eina_streq(argv[offset], "info"))
+     {
+        res = _e_info_client_eldbus_message("desk_group_info", NULL);
+     }
+   else if (eina_streq(argv[offset], "enable"))
+     {
+        sub_cmd_len = 1;
+        if (argc < offset + base_cmd_len + sub_cmd_len)
+          goto arg_err;
+
+        uint32_t enable;
+        enable = atoi(argv[offset+1]);
+
+        if (enable == 1 || enable == 0)
+          {
+             res = _e_info_client_eldbus_message_with_args("desk_group_enable", NULL, "i", enable);
+          }
+     }
+   else if (eina_streq(argv[offset], "make_sub1"))
+     {
+        sub_cmd_len = 5;
+        if (argc < offset + base_cmd_len + sub_cmd_len)
+          goto arg_err;
+
+        int x, y, w, h, layer;
+
+        x = atoi(argv[offset + base_cmd_len]);
+        y = atoi(argv[offset + base_cmd_len + 1]);
+        w = atoi(argv[offset + base_cmd_len + 2]);
+        h = atoi(argv[offset + base_cmd_len + 3]);
+        layer = atoi(argv[offset + base_cmd_len + 4]);
+
+        res = _e_info_client_eldbus_message_with_args("desk_group_new_sub1", NULL, "iiiii", x, y, w, h, layer);
+     }
+   else if (eina_streq(argv[offset], "make_sub2"))
+     {
+        sub_cmd_len = 5;
+        if (argc < offset + base_cmd_len + sub_cmd_len)
+          goto arg_err;
+
+        int x, y, w, h, layer;
+
+        x = atoi(argv[offset + base_cmd_len]);
+        y = atoi(argv[offset + base_cmd_len + 1]);
+        w = atoi(argv[offset + base_cmd_len + 2]);
+        h = atoi(argv[offset + base_cmd_len + 3]);
+        layer = atoi(argv[offset + base_cmd_len + 4]);
+
+        res = _e_info_client_eldbus_message_with_args("desk_group_new_sub2", NULL, "iiiii", x, y, w, h, layer);
+     }
+   else if (eina_streq(argv[offset], "remove_sub1"))
+     {
+        uint32_t id = 1;
+        res = _e_info_client_eldbus_message_with_args("desk_group_remove_sub", NULL, "i", id);
+     }
+   else if (eina_streq(argv[offset], "remove_sub2"))
+     {
+        uint32_t id = 2;
+        res = _e_info_client_eldbus_message_with_args("desk_group_remove_sub", NULL, "i", id);
+     }
+   else if (eina_streq(argv[offset], "raise_base"))
+     {
+        sub_cmd_len = 1;
+        if (argc < offset + base_cmd_len + sub_cmd_len)
+          goto arg_err;
+
+        uint32_t raise;
+        raise = atoi(argv[offset+1]);
+
+        if (raise == 1 || raise == 0)
+          {
+             res = _e_info_client_eldbus_message_with_args("desk_group_base_raise", NULL, "i", raise);
+          }
+     }
+   else if (eina_streq(argv[offset], "raise_sub1"))
+     {
+        sub_cmd_len = 1;
+        if (argc < offset + base_cmd_len + sub_cmd_len)
+          goto arg_err;
+
+        uint32_t raise;
+        raise = atoi(argv[offset+1]);
+
+        if (raise == 1 || raise == 0)
+          {
+             res = _e_info_client_eldbus_message_with_args("desk_group_sub1_raise", NULL, "i", raise);
+          }
+     }
+   else if (eina_streq(argv[offset], "raise_sub2"))
+     {
+        sub_cmd_len = 1;
+        if (argc < offset + base_cmd_len + sub_cmd_len)
+          goto arg_err;
+
+        uint32_t raise;
+        raise = atoi(argv[offset+1]);
+
+        if (raise == 1 || raise == 0)
+          {
+             res = _e_info_client_eldbus_message_with_args("desk_group_sub2_raise", NULL, "i", raise);
+          }
+     }
+   else if (eina_streq(argv[offset], "check_stack"))
+     {
+        res = _e_info_client_eldbus_message("desk_group_check_stack", NULL);
+     }
+
+   else
+     goto arg_err;
+
+   if (!res)
+     {
+        printf("_e_info_client_eldbus_message_with_args error");
+        return;
+     }
+
+   return;
+arg_err:
+   printf("Usage: enlightenment_info -desk_group -h\n");
+}
+
 static void
 _cb_buffer_shot(const Eldbus_Message *msg)
 {
@@ -6041,6 +6172,12 @@ static ProcInfo procs_to_execute[] =
       "apply filter option to windows",
       _e_info_client_proc_apply_filter
    },
+   {
+      "desk_group",
+      USAGE_DESK_GROUP,
+      "Get information or Enable/Disable functionality for desk group",
+      _e_info_client_proc_desk_group
+   },
 };
 
 ProcInfo procs_to_input[] =
index d188560ed261d3b6885b6155ff0669bdca2f4bc8..0c335923c9db44f0c245170f5191528f1468aa5a 100644 (file)
@@ -3927,6 +3927,324 @@ _e_info_server_cb_desk_zoom(const Eldbus_Service_Interface *iface EINA_UNUSED, c
    return reply;
 }
 
+static E_Desk_Group *_edg_sub1 = NULL;
+static E_Desk_Group *_edg_sub2 = NULL;
+
+static Eldbus_Message *
+_e_info_server_cb_desk_group_info(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
+{
+   Eldbus_Message *reply = eldbus_message_method_return_new(msg);
+   E_Zone *zone;
+   E_Desk *desk;
+
+   zone = e_zone_current_get();
+   desk = e_desk_current_get(zone);
+
+   e_desk_desk_group_info_print(desk);
+
+   return reply;
+}
+
+static Eldbus_Message *
+_e_info_server_cb_desk_group_enable(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
+{
+   Eldbus_Message *reply = eldbus_message_method_return_new(msg);
+   uint32_t enable;
+
+   if (!eldbus_message_arguments_get(msg, "i", &enable))
+     {
+        ERR("Error getting arguments.");
+        return reply;
+     }
+
+   if (enable == 1)
+     {
+        e_desk_desk_group_enable(e_desk_current_get(e_zone_current_get()));
+     }
+   else if (enable == 0)
+     {
+        e_desk_desk_group_disable(e_desk_current_get(e_zone_current_get()));
+     }
+
+   return reply;
+}
+
+static void _desk_group_new(int sub_edg_id, int x, int y, int w, int h, int layer)
+{
+   E_Zone *zone;
+   E_Desk *desk;
+   E_Desk_Group_Layer edg_layer;
+
+   zone = e_zone_current_get();
+   desk = e_desk_current_get(zone);
+
+   switch (layer)
+     {
+      case 0:  edg_layer = E_DESK_GROUP_LAYER_BACKGROUND; break;
+      case 1:  edg_layer = E_DESK_GROUP_LAYER_NORMAL_BELOW; break;
+      case 2:  edg_layer = E_DESK_GROUP_LAYER_NORMAL; break;
+      case 3:  edg_layer = E_DESK_GROUP_LAYER_NORMAL_ABOVE; break;
+      case 4:  edg_layer = E_DESK_GROUP_LAYER_NOTIFICATION_LOW; break;
+      case 5:  edg_layer = E_DESK_GROUP_LAYER_NOTIFICATION_NORMAL; break;
+      case 6:  edg_layer = E_DESK_GROUP_LAYER_NOTIFICATION_HIGH; break;
+      default:  edg_layer = E_DESK_GROUP_LAYER_NORMAL; break;
+     }
+
+   if (sub_edg_id == 1)
+     {
+        if (!_edg_sub1)
+          _edg_sub1 = e_desk_desk_group_add(desk, x, y, w, h, edg_layer);
+        else
+          {
+             e_desk_group_geometry_set(_edg_sub1, x, y, w, h);
+             e_desk_group_layer_set(_edg_sub1, edg_layer);
+          }
+     }
+   else if (sub_edg_id == 2)
+     {
+        if (!_edg_sub2)
+          _edg_sub2 = e_desk_desk_group_add(desk, x, y, w, h, edg_layer);
+        else
+          {
+             e_desk_group_geometry_set(_edg_sub2, x, y, w, h);
+             e_desk_group_layer_set(_edg_sub2, edg_layer);
+          }
+     }
+}
+
+static Eldbus_Message *
+_e_info_server_cb_desk_group_new_sub1(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
+{
+   Eldbus_Message *reply = eldbus_message_method_return_new(msg);
+   E_Client *ec;
+   int x, y, w, h;
+   int layer;
+   Eina_List*l;
+   Eina_List *ec_list = NULL;
+
+   if (!eldbus_message_arguments_get(msg, "iiiii", &x, &y, &w, &h, &layer))
+     {
+        ERR("Error getting arguments.");
+        return reply;
+     }
+
+   _desk_group_new(1, x, y, w, h, layer);
+
+   E_CLIENT_REVERSE_FOREACH(ec)
+     {
+        ec_list = eina_list_append(ec_list, ec);
+     }
+
+   EINA_LIST_REVERSE_FOREACH(ec_list, l, ec)
+     {
+        e_client_desk_group_set(ec, _edg_sub1);
+     }
+
+   //e_desk_group_all_ec_update(_edg_sub1);
+
+   return reply;
+}
+
+static Eldbus_Message *
+_e_info_server_cb_desk_group_new_sub2(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
+{
+   Eldbus_Message *reply = eldbus_message_method_return_new(msg);
+   int x, y, w, h;
+   int layer;
+   E_Client *ec;
+
+   if (!eldbus_message_arguments_get(msg, "iiiii", &x, &y, &w, &h, &layer))
+     {
+        ERR("Error getting arguments.");
+        return reply;
+     }
+
+   _desk_group_new(2, x, y, w, h, layer);
+
+   E_CLIENT_FOREACH(ec)
+     {
+        if (e_policy_client_is_home_screen(ec))
+          e_client_desk_group_set(ec, _edg_sub2);
+        else if (e_policy_client_is_quickpanel(ec))
+          e_client_desk_group_set(ec, _edg_sub2);
+     }
+
+   return reply;
+}
+
+static Eldbus_Message *
+_e_info_server_cb_desk_group_remove_sub(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
+{
+   Eldbus_Message *reply = eldbus_message_method_return_new(msg);
+   uint32_t sub_edg_id;
+   E_Zone *zone;
+   E_Desk *desk;
+
+   if (!eldbus_message_arguments_get(msg, "i", &sub_edg_id))
+     {
+        ERR("Error getting arguments.");
+        return reply;
+     }
+
+   zone = e_zone_current_get();
+   desk = e_desk_current_get(zone);
+
+   if (sub_edg_id == 1)
+     {
+        e_desk_desk_group_del(desk, _edg_sub1);
+        _edg_sub1 = NULL;
+     }
+   else if (sub_edg_id == 2)
+     {
+        e_desk_desk_group_del(desk, _edg_sub2);
+        _edg_sub2 = NULL;
+     }
+
+   return reply;
+}
+
+static void
+_desk_group_raise(E_Desk_Group *edg, uint32_t raise)
+{
+   E_Zone *zone;
+   E_Desk *desk;
+
+   zone = e_zone_current_get();
+   desk = e_desk_current_get(zone);
+   if (!desk) return;
+
+   if (!edg)
+     edg = desk->desk_group.base;
+
+   if (edg)
+     {
+        if (raise == 1)
+          {
+             //e_desk_group_raise(edg);
+             e_desk_desk_group_raise(edg->desk, edg);
+          }
+        else if (raise == 0)
+          {
+             //e_desk_group_lower(edg);
+             e_desk_desk_group_lower(edg->desk, edg);
+          }
+     }
+}
+
+static Eldbus_Message *
+_e_info_server_cb_desk_group_base_raise(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
+{
+   Eldbus_Message *reply = eldbus_message_method_return_new(msg);
+   uint32_t raise;
+
+   if (!eldbus_message_arguments_get(msg, "i", &raise))
+     {
+        ERR("Error getting arguments.");
+        return reply;
+     }
+
+   _desk_group_raise(NULL, raise);
+
+   return reply;
+}
+
+static Eldbus_Message *
+_e_info_server_cb_desk_group_sub1_raise(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
+{
+   Eldbus_Message *reply = eldbus_message_method_return_new(msg);
+   uint32_t raise;
+
+   if (!eldbus_message_arguments_get(msg, "i", &raise))
+     {
+        ERR("Error getting arguments.");
+        return reply;
+     }
+
+   if (_edg_sub1)
+     _desk_group_raise(_edg_sub1, raise);
+
+   return reply;
+}
+
+static Eldbus_Message *
+_e_info_server_cb_desk_group_sub2_raise(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
+{
+   Eldbus_Message *reply = eldbus_message_method_return_new(msg);
+   uint32_t raise;
+
+   if (!eldbus_message_arguments_get(msg, "i", &raise))
+     {
+        ERR("Error getting arguments.");
+        return reply;
+     }
+
+   if (_edg_sub2)
+     _desk_group_raise(_edg_sub2, raise);
+
+   return reply;
+}
+
+static Eldbus_Message *
+_e_info_server_cb_desk_group_check_stack(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
+{
+   Eldbus_Message *reply = eldbus_message_method_return_new(msg);
+   E_Zone *zone;
+   E_Desk *desk;
+   E_Desk_Group *edg = NULL;
+   Eina_List *l;
+   Eina_List *ll;
+   Eina_List *edg_ecs_list = NULL;
+   E_Client *ec;
+   E_Client *edg_ec;
+   Evas_Object *o;
+   int i, j;
+   Eina_Bool mis_match = EINA_FALSE;
+
+   zone = e_zone_current_get();
+   desk = e_desk_current_get(zone);
+
+   if (!desk->desk_group.enable)
+     {
+        ELOGF("EDG_TEST", "Desk_Group is not enable... return", NULL);
+        return reply;
+     }
+
+   for (i=E_DESK_GROUP_LAYER_COUNT-1; i>=0; i--)
+     {
+        EINA_LIST_FOREACH(desk->desk_group.list[i], l, edg)
+          {
+             for (j=E_DESK_GROUP_CLIENT_LAYER_MAX-1; j>=0; j--)
+               {
+                  EINA_LIST_FOREACH(edg->ec_lists[j], ll, edg_ec)
+                    {
+                       edg_ecs_list = eina_list_append(edg_ecs_list, edg_ec);
+                    }
+               }
+          }
+     }
+
+   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;
+
+        edg_ec = eina_list_nth(edg_ecs_list, 0);
+        if (edg_ec != ec)
+          {
+             ELOGF("EDG_TEST", "BAD.BAD.BAD... NOT MATCHED!!! edg_ec(win:0x%08zx, ec:%p)", ec, e_client_util_win_get(edg_ec), edg_ec);
+             mis_match = EINA_TRUE;
+          }
+        edg_ecs_list = eina_list_remove(edg_ecs_list, edg_ec);
+     }
+
+   if (!mis_match)
+     ELOGF("EDG_TEST", "No error. STACK is MATCHED!!!", NULL);
+   else
+     ELOGF("EDG_TEST", "Error. STACK is NOT MATCHED!!!", NULL);
+
+   return reply;
+}
+
 static Eina_Bool
 _e_info_server_cb_buffer_change(void *data, int type, void *event)
 {
@@ -6443,6 +6761,15 @@ static const Eldbus_Method methods[] = {
    { "slot_message", ELDBUS_ARGS({"iiiiii", "slot_message"}), ELDBUS_ARGS({"a(ss)", "array of ec"}), e_info_server_cb_slot_message, 0},
    { "desktop_geometry_set", ELDBUS_ARGS({"iiii", "Geometry"}), NULL, _e_info_server_cb_desktop_geometry_set, 0},
    { "desk_zoom", ELDBUS_ARGS({"ddii", "Zoom"}), NULL, _e_info_server_cb_desk_zoom, 0},
+   { "desk_group_info", NULL, NULL, _e_info_server_cb_desk_group_info, 0},
+   { "desk_group_enable", ELDBUS_ARGS({"i", "enable"}), NULL, _e_info_server_cb_desk_group_enable, 0},
+   { "desk_group_new_sub1", ELDBUS_ARGS({"iiiii", "geometry"}), NULL, _e_info_server_cb_desk_group_new_sub1, 0},
+   { "desk_group_new_sub2", ELDBUS_ARGS({"iiiii", "geometry"}), NULL, _e_info_server_cb_desk_group_new_sub2, 0},
+   { "desk_group_remove_sub", ELDBUS_ARGS({"i", "sub_id"}), NULL, _e_info_server_cb_desk_group_remove_sub, 0},
+   { "desk_group_base_raise", ELDBUS_ARGS({"i", "raise"}), NULL, _e_info_server_cb_desk_group_base_raise, 0},
+   { "desk_group_sub1_raise", ELDBUS_ARGS({"i", "raise"}), NULL, _e_info_server_cb_desk_group_sub1_raise, 0},
+   { "desk_group_sub2_raise", ELDBUS_ARGS({"i", "raise"}), NULL, _e_info_server_cb_desk_group_sub2_raise, 0},
+   { "desk_group_check_stack", NULL, NULL, _e_info_server_cb_desk_group_check_stack, 0},
    { "frender", ELDBUS_ARGS({"i", "frender"}), ELDBUS_ARGS({"s", "force_render_result"}), _e_info_server_cb_force_render, 0},
    { "screen_rotation_pre", ELDBUS_ARGS({"i", "value"}), NULL, _e_info_server_cb_screen_rotation_pre, 0},
    { "screen_rotation", ELDBUS_ARGS({"i", "value"}), NULL, _e_info_server_cb_screen_rotation, 0},
index 257854102b301b2678eac15843181af35f9f7f61..6125e803db77c1a6129d4be6eaf199bbf00e0a34 100644 (file)
@@ -307,4 +307,31 @@ typedef enum
    "\twinfo -filter inverse_color on\n"                                        \
    "\twinfo -filter inverse_color off\n"
 
+/* -------------------------------------------------------------------------- */
+/* DESK GROUP                                                                 */
+/* -------------------------------------------------------------------------- */
+#define USAGE_DESK_GROUP                                                 \
+   "[Option..] [DIR]\n"                                                  \
+   "\tinfo                          : print desk group information\n"    \
+   "\tenable [1:enable, 0:disable]  : enable/disable desk_group\n"       \
+   "\tmake_sub1 [x][y][w][h][layer 0:bg, 1:below, 2:normal, 3:above, 4~6:noti] : make sub1 desk_group\n" \
+   "\tmake_sub2 [x][y][w][h][layer 0:bg, 1:below, 2:normal, 3:above, 4~6:noti] : make sub2 desk_group\n" \
+   "\tremove_sub1                   : remove sub1 desk_group\n"          \
+   "\tremove_sub2                   : remove sub2 desk_group\n"          \
+   "\traise_base [1:raise, 0:lower] : raise/lower base desk_group\n"     \
+   "\traise_sub1 [1:raise, 0:lower] : raise/lower sub1 desk_group\n"     \
+   "\traise_sub2 [1:raise, 0:lower] : raise/lower sub2 desk_group\n"     \
+   "\tcheck_stack                   : check stack\n"                     \
+   "Example:\n"                                                          \
+   "\twinfo -desk_group info\n"                                          \
+   "\twinfo -desk_group enable 1\n"                                      \
+   "\twinfo -desk_group make_sub1 240 480 480 800 2\n"                   \
+   "\twinfo -desk_group make_sub2 310 80 320 480 2\n"                    \
+   "\twinfo -desk_group remove_sub1\n"                                   \
+   "\twinfo -desk_group remove_sub2\n"                                   \
+   "\twinfo -desk_group raise_base 1\n"                                  \
+   "\twinfo -desk_group raise_sub1 1\n"                                  \
+   "\twinfo -desk_group raise_sub2 0\n"                                  \
+   "\twinfo -desk_group check_stack\n"
+
 #endif /* end of _E_INFO_SHARED_TYPES_ */