From 8f3e2c57f8d8f2dcef1e79aba64c3ba5e29c3730 Mon Sep 17 00:00:00 2001 From: Doyoun Kang Date: Tue, 21 Apr 2020 15:58:21 +0900 Subject: [PATCH] winfo: add command for testing desk group Change-Id: I85ccd4f1d9711f29b6c6799d3f5c45c0cb1d4d79 --- src/bin/e_info_client.c | 137 ++++++++++++++++++ src/bin/e_info_server.c | 327 ++++++++++++++++++++++++++++++++++++++++++ src/bin/e_info_shared_types.h | 27 ++++ 3 files changed, 491 insertions(+) diff --git a/src/bin/e_info_client.c b/src/bin/e_info_client.c index 67bdcb9..bd0f4dc 100644 --- a/src/bin/e_info_client.c +++ b/src/bin/e_info_client.c @@ -2710,6 +2710,137 @@ arg_err: } 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) { const char *name = NULL, *text = NULL; @@ -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[] = diff --git a/src/bin/e_info_server.c b/src/bin/e_info_server.c index d188560..0c33592 100644 --- a/src/bin/e_info_server.c +++ b/src/bin/e_info_server.c @@ -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}, diff --git a/src/bin/e_info_shared_types.h b/src/bin/e_info_shared_types.h index 2578541..6125e80 100644 --- a/src/bin/e_info_shared_types.h +++ b/src/bin/e_info_shared_types.h @@ -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_ */ -- 2.7.4