From: Konstantin Drabeniuk Date: Tue, 16 May 2017 11:28:37 +0000 (+0300) Subject: [e_info] add "-wm", "-size" and "-all" options for the wininfo X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=bf5a9ff7cb3b735b7519e90ed244cd3f89e4a099;p=platform%2Fupstream%2Fenlightenment.git [e_info] add "-wm", "-size" and "-all" options for the wininfo Change-Id: Ibe2745c85b15cdcff47b8804eaa57dc03168ae75 Signed-off-by: Konstantin Drabeniuk --- diff --git a/src/bin/e_info_client.c b/src/bin/e_info_client.c index fad931626b..e056820f5e 100644 --- a/src/bin/e_info_client.c +++ b/src/bin/e_info_client.c @@ -3039,8 +3039,46 @@ finish: } } +static void +_e_info_client_cb_wininfo_print_hints(const Eldbus_Message *msg) +{ + const char *name = NULL, *text = NULL; + Eina_Bool res; + Eldbus_Message_Iter *array_of_hints; + int count = 0; + char *hint; + + res = eldbus_message_error_get(msg, &name, &text); + EINA_SAFETY_ON_TRUE_GOTO(res, finish); + + res = eldbus_message_arguments_get(msg, "as", &array_of_hints); + EINA_SAFETY_ON_FALSE_GOTO(res, finish); + + while (eldbus_message_iter_get_and_next(array_of_hints, 's', &hint)) + { + printf(" %s\n", hint); + count++; + } + + if (!count) + printf(" No window hints\n"); + + ecore_main_loop_quit(); + + return; + +finish: + if ((name) || (text)) + { + printf("errname:%s errmsg:%s\n", name, text); + } + + ecore_main_loop_quit(); +} + static Eina_Bool -_e_info_client_display_wininfo(uint64_t win, int children, int tree, int stats) +_e_info_client_display_wininfo(uint64_t win, int children, int tree, int stats, + int wm, int size) { Eina_Bool res; char *win_name; @@ -3055,6 +3093,9 @@ _e_info_client_display_wininfo(uint64_t win, int children, int tree, int stats) free(win_name); + if (!children && !tree && !wm && !size) + stats = 1; + if ((children || tree)) { res = _e_info_client_eldbus_message_with_args("wininfo_tree", @@ -3063,8 +3104,6 @@ _e_info_client_display_wininfo(uint64_t win, int children, int tree, int stats) win, tree); EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE); } - else - stats = 1; if (stats) { @@ -3075,6 +3114,26 @@ _e_info_client_display_wininfo(uint64_t win, int children, int tree, int stats) EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE); } + if (wm) + { + printf("\nAux_Hint:\n"); + res = _e_info_client_eldbus_message_with_args("wininfo_hints", + _e_info_client_cb_wininfo_print_hints, + "it", + 1, win); + EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE); + } + + if (size) + { + printf("\nSize hints:\n"); + res = _e_info_client_eldbus_message_with_args("wininfo_hints", + _e_info_client_cb_wininfo_print_hints, + "it", + 0, win); + EINA_SAFETY_ON_FALSE_RETURN_VAL(res, EINA_FALSE); + } + return EINA_TRUE; } @@ -3089,13 +3148,16 @@ _e_info_client_display_wininfo(uint64_t win, int children, int tree, int stats) "\t-name windowname : use the window with the specified name\n" \ "\t-pid windowpid : use the window with the specified id\n" \ "\t-int : print window id in decimal\n" \ + "\t-size : print size hints\n" \ + "\t-wm : print window manager hints\n" \ + "\t-all : -tree, -stats, -wm, -size\n" \ static void _e_info_client_proc_wininfo(int argc, char **argv) { Eina_Bool res; uint64_t win = 0; - int i, children = 0, tree = 0, stats = 0; + int i, children = 0, tree = 0, stats = 0, wm = 0, size = 0; char *name = NULL, *pid = NULL; Eina_List *win_list = NULL, *l; @@ -3169,6 +3231,24 @@ _e_info_client_proc_wininfo(int argc, char **argv) window_id_format_dec = 1; continue; } + if (eina_streq (argv[i], "-wm")) + { + wm = 1; + continue; + } + if (eina_streq (argv[i], "-size")) + { + size = 1; + continue; + } + if (eina_streq (argv[i], "-all")) + { + tree = 1; + stats = 1; + wm = 1; + size = 1; + continue; + } goto usage; } @@ -3187,7 +3267,6 @@ _e_info_client_proc_wininfo(int argc, char **argv) } } - if (!win && !win_list) { printf("Please select the window about which you\n" @@ -3202,7 +3281,7 @@ _e_info_client_proc_wininfo(int argc, char **argv) if (win) { - res = _e_info_client_display_wininfo(win, children, tree, stats); + res = _e_info_client_display_wininfo(win, children, tree, stats, wm, size); EINA_SAFETY_ON_FALSE_RETURN(res); } else @@ -3212,7 +3291,7 @@ _e_info_client_proc_wininfo(int argc, char **argv) uint64_t win; win = (uint64_t)((Ecore_Window)eina_list_data_get(l)); - res = _e_info_client_display_wininfo(win, children, tree, stats); + res = _e_info_client_display_wininfo(win, children, tree, stats, wm, size); EINA_SAFETY_ON_FALSE_GOTO(res, finish); } } diff --git a/src/bin/e_info_server.c b/src/bin/e_info_server.c index 5486aeeeb3..480fb21327 100755 --- a/src/bin/e_info_server.c +++ b/src/bin/e_info_server.c @@ -3482,6 +3482,93 @@ _e_info_server_cb_wininfo(const Eldbus_Service_Interface *iface EINA_UNUSED, con return reply; } +static void +_e_info_server_cb_wininfo_size_hints_append(E_Client *ec, Eldbus_Message_Iter *array_of_hints) +{ + char temp[512] = {0}; + Evas_Coord w, h, l, r, t, b; + double x, y; + + evas_object_size_hint_min_get(ec->frame, &w, &h); + snprintf(temp, sizeof(temp), " min: h(%d), v(%d)", w, h); + eldbus_message_iter_arguments_append(array_of_hints, "s", temp); + + evas_object_size_hint_max_get(ec->frame, &w, &h); + snprintf(temp, sizeof(temp), " max: h(%d), v(%d)", w, h); + eldbus_message_iter_arguments_append(array_of_hints, "s", temp); + + evas_object_size_hint_request_get(ec->frame, &w, &h); + snprintf(temp, sizeof(temp), " request: h(%d), v(%d)", w, h); + eldbus_message_iter_arguments_append(array_of_hints, "s", temp); + + evas_object_size_hint_align_get(ec->frame, &x, &y); + snprintf(temp, sizeof(temp), " align: x(%f), y(%f)", x, y); + eldbus_message_iter_arguments_append(array_of_hints, "s", temp); + + evas_object_size_hint_weight_get(ec->frame, &x, &y); + snprintf(temp, sizeof(temp), " weight: x(%f), y(%f)", x, y); + eldbus_message_iter_arguments_append(array_of_hints, "s", temp); + + evas_object_size_hint_padding_get(ec->frame, &l, &r, &t, &b); + snprintf(temp, sizeof(temp), " padding: l(%d), r(%d), t(%d), b(%d)", + l, r, t, b); + eldbus_message_iter_arguments_append(array_of_hints, "s", temp); +} + +static void +_e_info_server_cb_wininfo_wm_hints_append(E_Client *ec, Eldbus_Message_Iter *array_of_hints) +{ + Eina_List *l; + E_Comp_Wl_Aux_Hint *hint; + char temp[512] = {0}; + + if (!ec->comp_data) + return; + + EINA_LIST_FOREACH(ec->comp_data->aux_hint.hints, l, hint) + { + snprintf(temp, sizeof(temp), "%s: %s", hint->hint, hint->val); + eldbus_message_iter_arguments_append(array_of_hints, "s", temp); + } +} + +static Eldbus_Message * +_e_info_server_cb_wininfo_hints(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg) +{ + Eldbus_Message *reply; + Eldbus_Message_Iter *iter, *array_of_hints; + Eina_Bool res; + E_Client *ec; + uint64_t win; + int wm_mode; + + res = eldbus_message_arguments_get(msg, "it", &wm_mode, &win); + if (res != EINA_TRUE) + { + return eldbus_message_error_new(msg, GET_CALL_MSG_ARG_ERR, + "wininfo_hints: an attempt to get arguments from method call message failed"); + } + + ec = _e_info_server_ec_find_by_win(win); + if (!ec) + { + return eldbus_message_error_new(msg, WIN_NOT_EXIST, + "wininfo_hints: specified window(s) doesn't exist"); + } + + reply = eldbus_message_method_return_new(msg); + iter = eldbus_message_iter_get(reply); + + eldbus_message_iter_arguments_append(iter, "as", &array_of_hints); + if (wm_mode) + _e_info_server_cb_wininfo_wm_hints_append(ec, array_of_hints); + else + _e_info_server_cb_wininfo_size_hints_append(ec, array_of_hints); + eldbus_message_iter_container_close(iter, array_of_hints); + + return reply; +} + static const Eldbus_Method methods[] = { { "get_window_info", NULL, ELDBUS_ARGS({"a("VALUE_TYPE_FOR_TOPVWINS")", "array of ec"}), _e_info_server_cb_window_info_get, 0 }, { "compobjs", NULL, ELDBUS_ARGS({"a("SIGNATURE_COMPOBJS_CLIENT")", "array of comp objs"}), _e_info_server_cb_compobjs, 0 }, @@ -3528,6 +3615,7 @@ static const Eldbus_Method methods[] = { { "get_windows", ELDBUS_ARGS({"is", "mode, value"}), ELDBUS_ARGS({"at", "array_of_windows"}), _e_info_server_cb_get_windows, 0 }, { "wininfo", ELDBUS_ARGS({VALUE_TYPE_REQUEST_FOR_WININFO, "window"}), ELDBUS_ARGS({VALUE_TYPE_REPLY_WININFO, "window info"}), _e_info_server_cb_wininfo, 0 }, { "wininfo_tree", ELDBUS_ARGS({VALUE_TYPE_REQUEST_FOR_WININFO_TREE, "wininfo_tree"}), ELDBUS_ARGS({VALUE_TYPE_REPLY_WININFO_TREE, "window tree info"}), _e_info_server_cb_wininfo_tree, 0 }, + { "wininfo_hints", ELDBUS_ARGS({"it", "mode, window"}), ELDBUS_ARGS({"as", "window hints"}), _e_info_server_cb_wininfo_hints, 0 }, { NULL, NULL, NULL, NULL, 0 } };