From 74aa987cf33b3d94c3f8956b35995613498f130c Mon Sep 17 00:00:00 2001 From: "SungBae, Park" Date: Tue, 24 Nov 2015 15:59:51 +0900 Subject: [PATCH] enlightenment_info -topvwins layer info add Change-Id: I87cf4915e24e611ea18151a6831a5ff39ed3406d --- src/bin/e_comp.c | 35 +++++++++++++++++++++++++++++++++++ src/bin/e_comp.h | 1 + src/bin/e_info_client.c | 31 ++++++++++++++++++++++++++----- src/bin/e_info_server.c | 12 +++++++----- 4 files changed, 69 insertions(+), 10 deletions(-) diff --git a/src/bin/e_comp.c b/src/bin/e_comp.c index 77c81cb..acdabd6 100644 --- a/src/bin/e_comp.c +++ b/src/bin/e_comp.c @@ -1600,6 +1600,41 @@ e_comp_e_object_layer_get(const E_Object *obj) return 0; } +EAPI void +e_comp_layer_name_get(unsigned int layer, char *buff, int buff_size) +{ + if (!buff) return; + + switch(layer) + { + case E_LAYER_BOTTOM: strncpy(buff, "E_LAYER_BOTTOM", buff_size); break; + case E_LAYER_BG: strncpy(buff, "E_LAYER_BG", buff_size); break; + case E_LAYER_DESKTOP: strncpy(buff, "E_LAYER_DESKTOP", buff_size); break; + case E_LAYER_DESKTOP_TOP: strncpy(buff, "E_LAYER_DESKTOP_TOP", buff_size); break; + case E_LAYER_CLIENT_DESKTOP: strncpy(buff, "E_LAYER_CLIENT_DESKTOP", buff_size); break; + case E_LAYER_CLIENT_BELOW: strncpy(buff, "E_LAYER_CLIENT_BELOW", buff_size); break; + case E_LAYER_CLIENT_NORMAL: strncpy(buff, "E_LAYER_CLIENT_NORMAL", buff_size); break; + case E_LAYER_CLIENT_ABOVE: strncpy(buff, "E_LAYER_CLIENT_ABOVE", buff_size); break; + case E_LAYER_CLIENT_EDGE: strncpy(buff, "E_LAYER_CLIENT_EDGE", buff_size); break; + case E_LAYER_CLIENT_FULLSCREEN: strncpy(buff, "E_LAYER_CLIENT_FULLSCREEN", buff_size); break; + case E_LAYER_CLIENT_EDGE_FULLSCREEN: strncpy(buff, "E_LAYER_CLIENT_EDGE_FULLSCREEN", buff_size); break; + case E_LAYER_CLIENT_POPUP: strncpy(buff, "E_LAYER_CLIENT_POPUP", buff_size); break; + case E_LAYER_CLIENT_TOP: strncpy(buff, "E_LAYER_CLIENT_TOP", buff_size); break; + case E_LAYER_CLIENT_DRAG: strncpy(buff, "E_LAYER_CLIENT_DRAG", buff_size); break; + case E_LAYER_CLIENT_PRIO: strncpy(buff, "E_LAYER_CLIENT_PRIO", buff_size); break; + case E_LAYER_CLIENT_NOTIFICATION_LOW: strncpy(buff, "E_LAYER_CLIENT_NOTIFICATION_LOW", buff_size); break; + case E_LAYER_CLIENT_NOTIFICATION_NORMAL: strncpy(buff, "E_LAYER_CLIENT_NOTIFICATION_NORMAL", buff_size); break; + case E_LAYER_CLIENT_NOTIFICATION_HIGH: strncpy(buff, "E_LAYER_CLIENT_NOTIFICATION_HIGH", buff_size); break; + case E_LAYER_CLIENT_NOTIFICATION_TOP: strncpy(buff, "E_LAYER_CLIENT_NOTIFICATION_TOP", buff_size); break; + case E_LAYER_CLIENT_ALERT: strncpy(buff, "E_LAYER_CLIENT_ALERT", buff_size); break; + case E_LAYER_POPUP: strncpy(buff, "E_LAYER_POPUP", buff_size); break; + case E_LAYER_MENU: strncpy(buff, "E_LAYER_MENU", buff_size); break; + case E_LAYER_DESKLOCK: strncpy(buff, "E_LAYER_DESKLOCK", buff_size); break; + case E_LAYER_MAX: strncpy(buff, "E_LAYER_MAX", buff_size); break; + default:strncpy(buff, "E_LAYER_NONE", buff_size); break; + } +} + EAPI Eina_Bool e_comp_grab_input(E_Comp *c, Eina_Bool mouse, Eina_Bool kbd) { diff --git a/src/bin/e_comp.h b/src/bin/e_comp.h index e10154b..9eea321 100644 --- a/src/bin/e_comp.h +++ b/src/bin/e_comp.h @@ -185,6 +185,7 @@ EAPI void e_comp_block_window_del(void); EAPI E_Comp *e_comp_find_by_window(Ecore_Window win); EAPI void e_comp_override_timed_pop(E_Comp *c); EAPI unsigned int e_comp_e_object_layer_get(const E_Object *obj); +EAPI void e_comp_layer_name_get(unsigned int layer, char *buff, int buff_size); EAPI Eina_Bool e_comp_grab_input(E_Comp *c, Eina_Bool mouse, Eina_Bool kbd); EAPI void e_comp_ungrab_input(E_Comp *c, Eina_Bool mouse, Eina_Bool kbd); EAPI void e_comp_gl_set(Eina_Bool set); diff --git a/src/bin/e_info_client.c b/src/bin/e_info_client.c index 17949bd..676d3f9 100644 --- a/src/bin/e_info_client.c +++ b/src/bin/e_info_client.c @@ -26,6 +26,7 @@ typedef struct _E_Win_Info int layer; // value of E_Layer int vis; // visibility int alpha; // alpha window + const char *layer_name; // layer name } E_Win_Info; static E_Info_Client e_info_client; @@ -34,7 +35,7 @@ static Eina_Bool _e_info_client_eldbus_message(const char *method, E_Info_Messag static Eina_Bool _e_info_client_eldbus_message_with_args(const char *method, E_Info_Message_Cb cb, const char *signature, ...); static E_Win_Info * -_e_win_info_new(Ecore_Window id, uint32_t res_id, int pid, Eina_Bool alpha, const char *name, int x, int y, int w, int h, int layer, int visible) +_e_win_info_new(Ecore_Window id, uint32_t res_id, int pid, Eina_Bool alpha, const char *name, int x, int y, int w, int h, int layer, int visible, const char *layer_name) { E_Win_Info *win = NULL; @@ -52,6 +53,7 @@ _e_win_info_new(Ecore_Window id, uint32_t res_id, int pid, Eina_Bool alpha, cons win->layer = layer; win->alpha = alpha; win->vis = visible; + win->layer_name = eina_stringshare_add(layer_name); return win; } @@ -64,6 +66,9 @@ _e_win_info_free(E_Win_Info *win) if (win->name) eina_stringshare_del(win->name); + if (win->layer_name) + eina_stringshare_del(win->layer_name); + E_FREE(win); } @@ -77,12 +82,13 @@ _cb_window_info_get(const Eldbus_Message *msg) res = eldbus_message_error_get(msg, &name, &text); EINA_SAFETY_ON_TRUE_GOTO(res, finish); - res = eldbus_message_arguments_get(msg, "a(uuisiiiiibb)", &array); + res = eldbus_message_arguments_get(msg, "a(uuisiiiiibbs)", &array); EINA_SAFETY_ON_FALSE_GOTO(res, finish); while (eldbus_message_iter_get_and_next(array, 'r', &ec)) { const char *win_name; + const char *layer_name; int x, y, w, h, layer; Eina_Bool visible, alpha; Ecore_Window id; @@ -90,7 +96,7 @@ _cb_window_info_get(const Eldbus_Message *msg) int pid; E_Win_Info *win = NULL; res = eldbus_message_iter_arguments_get(ec, - "uuisiiiiibb", + "uuisiiiiibbs", &id, &res_id, &pid, @@ -101,14 +107,15 @@ _cb_window_info_get(const Eldbus_Message *msg) &h, &layer, &visible, - &alpha); + &alpha, + &layer_name); if (!res) { printf("Failed to get win info\n"); continue; } - win = _e_win_info_new(id, res_id, pid, alpha, win_name, x, y, w, h, layer, visible); + win = _e_win_info_new(id, res_id, pid, alpha, win_name, x, y, w, h, layer, visible, layer_name); e_info_client.win_list = eina_list_append(e_info_client.win_list, win); } @@ -125,6 +132,8 @@ _e_info_client_proc_topvwins_info(int argc, char **argv) E_Win_Info *win; Eina_List *l; int i = 0; + int prev_layer = -1; + const char *prev_layer_name = NULL; if (!_e_info_client_eldbus_message("get_window_info", _cb_window_info_get)) return; @@ -144,10 +153,22 @@ _e_info_client_proc_topvwins_info(int argc, char **argv) { if (!win) return; i++; + if (win->layer != prev_layer) + { + if (prev_layer != -1) + printf("------------------------------------------------------------------------------------------------------------[%s]\n", + prev_layer_name ? prev_layer_name : " "); + prev_layer = win->layer; + prev_layer_name = win->layer_name; + } printf("%3d 0x%08x %5d %5d %5d %5d %5d %5d %5d ", i, win->id, win->res_id, win->pid, win->w, win->h, win->x, win->y, win->alpha? 32:24); printf("%30s %11s\n", win->name?:"No Name", win->vis? "Viewable":"NotViewable"); } + if (prev_layer_name) + printf("------------------------------------------------------------------------------------------------------------[%s]\n", + prev_layer_name ? prev_layer_name : " "); + E_FREE_LIST(e_info_client.win_list, _e_win_info_free); } diff --git a/src/bin/e_info_server.c b/src/bin/e_info_server.c index 788f04e..77836bd 100644 --- a/src/bin/e_info_server.c +++ b/src/bin/e_info_server.c @@ -34,7 +34,7 @@ _msg_clients_append(Eldbus_Message_Iter *iter) E_Client *ec; Evas_Object *o; - eldbus_message_iter_arguments_append(iter, "a(uuisiiiiibb)", &array_of_ec); + eldbus_message_iter_arguments_append(iter, "a(uuisiiiiibbs)", &array_of_ec); // append clients. for (o = evas_object_top_get(e_comp->evas); o; o = evas_object_below_get(o)) @@ -43,12 +43,14 @@ _msg_clients_append(Eldbus_Message_Iter *iter) Ecore_Window win; uint32_t res_id = 0; pid_t pid = -1; + char layer_name[32]; ec = evas_object_data_get(o, "E_Client"); if (!ec) continue; if (e_client_util_ignored_get(ec)) continue; win = e_client_util_win_get(ec); + e_comp_layer_name_get(ec->layer, layer_name, sizeof(layer_name)); if (ec->pixmap) res_id = e_pixmap_res_id_get(ec->pixmap); @@ -60,16 +62,16 @@ _msg_clients_append(Eldbus_Message_Iter *iter) wl_client_get_credentials(wl_resource_get_client(cdata->surface), &pid, NULL, NULL); } #endif - eldbus_message_iter_arguments_append(array_of_ec, "(uuisiiiiibb)", &struct_of_ec); + eldbus_message_iter_arguments_append(array_of_ec, "(uuisiiiiibbs)", &struct_of_ec); eldbus_message_iter_arguments_append - (struct_of_ec, "uuisiiiiibb", + (struct_of_ec, "uuisiiiiibbs", win, res_id, pid, e_client_util_name_get(ec) ?: "NO NAME", ec->x, ec->y, ec->w, ec->h, ec->layer, - ec->visible, ec->argb); + ec->visible, ec->argb, layer_name); eldbus_message_iter_container_close(array_of_ec, struct_of_ec); } @@ -259,7 +261,7 @@ _e_info_server_cb_eina_log_path(const Eldbus_Service_Interface *iface EINA_UNUSE } static const Eldbus_Method methods[] = { - { "get_window_info", NULL, ELDBUS_ARGS({"a(uuisiiiiibb)", "array of ec"}), _e_info_server_cb_window_info_get, 0 }, + { "get_window_info", NULL, ELDBUS_ARGS({"a(uuisiiiiibbs)", "array of ec"}), _e_info_server_cb_window_info_get, 0 }, { "dump_topvwins", ELDBUS_ARGS({"s", "directory"}), NULL, _e_info_server_cb_topvwins_dump, 0 }, { "eina_log_levels", ELDBUS_ARGS({"s", "eina log levels"}), NULL, _e_info_server_cb_eina_log_levels, 0 }, { "eina_log_path", ELDBUS_ARGS({"s", "eina log path"}), NULL, _e_info_server_cb_eina_log_path, 0 }, -- 2.7.4