if (new_s2) free(new_s2);
}
+static void
+_cb_vec_info_get(const Eldbus_Message *msg)
+{
+ const char *name = NULL, *text = NULL;
+ Eldbus_Message_Iter *array;
+ char *engine;
+ Eina_Bool res;
+
+ res = eldbus_message_error_get(msg, &name, &text);
+ EINA_SAFETY_ON_TRUE_GOTO(res, finish);
+
+ res = eldbus_message_arguments_get(msg, "iiiiisiia("VALUE_TYPE_FOR_TOPVWINS")",
+ &e_info_client.use_gl, &e_info_client.use_hwc, &e_info_client.use_multi_layer,
+ &e_info_client.hwc, &e_info_client.hwc_windows, &engine,
+ &e_info_client.use_buffer_flush, &e_info_client.deiconify_approve,
+ &array);
+ EINA_SAFETY_ON_FALSE_GOTO(res, finish);
+ e_info_client.engine = eina_stringshare_add(engine);
+
+ _e_win_info_make_array(array);
+
+finish:
+ if ((name) || (text))
+ {
+ printf("errname:%s errmsg:%s\n", name, text);
+ }
+}
+
+static void
+_e_info_client_proc_ec_list_info(void)
+{
+ E_Win_Info *win;
+ Eina_List *l;
+ int i = 0;
+ int prev_layer = -1;
+ int hwc_off = 0;
+
+ const char *prev_layer_name = NULL;
+
+ if (!_e_info_client_eldbus_message("get_ec_info", _cb_vec_info_get))
+ return;
+
+ printf("\n\n%d Top level windows in EC list\n", eina_list_count(e_info_client.win_list));
+ printf("--------------------------------------[ topvwins ]----------------------------------------------------------------------------------\n");
+ printf(" No Win_ID RcsID PID w h x y Foc InReg Dep Opaq Vsbt Icon Vis Map Frame PL@ZPos Parent Title\n");
+ printf("------------------------------------------------------------------------------------------------------------------------------------\n");
+
+ if (!e_info_client.win_list)
+ {
+ printf("no ECs\n");
+ return;
+ }
+
+ EINA_LIST_FOREACH(e_info_client.win_list, l, win)
+ {
+ if (!win) return;
+ char tmp[20];
+ 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;
+ }
+
+ if (win->hwc >= 0)
+ {
+ if ((!win->iconic) && (win->frame_visible))
+ {
+ if (win->pl_zpos == -999)
+ snprintf(tmp, sizeof(tmp), " - ");
+ else
+ {
+ if (win->hwc) snprintf(tmp, sizeof(tmp), "hwc@%i", win->pl_zpos);
+ else snprintf(tmp, sizeof(tmp), "comp@%i", win->pl_zpos);
+ }
+ }
+ else
+ snprintf(tmp, sizeof(tmp), " - ");
+ }
+ else // hwc is not initialized or hwc_deactive 1
+ {
+ hwc_off = 1;
+ snprintf(tmp, sizeof(tmp), " - ");
+ }
+
+ printf("%3d 0x%08zx %5d %5d %5d %5d %6d %6d %c %c %3d %2d ", i, win->id, win->res_id, win->pid, win->w, win->h, win->x, win->y, win->focused ? 'O':' ', win->has_input_region?'C':' ', win->alpha? 32:24, win->opaque);
+ printf("%2d %d %d %s %3d %-8s %-8zx %s\n", win->visibility, win->iconic, win->vis, win->mapped? "V":"N", win->frame_visible, tmp, win->parent_id, win->name?:"No Name");
+ }
+
+ if (prev_layer_name)
+ printf("------------------------------------------------------------------------------------------------------------------------------------[%s]\n",
+ prev_layer_name ? prev_layer_name : " ");
+
+ if(hwc_off)
+ printf("\nHWC is disabled\n\n");
+
+ E_FREE_LIST(e_info_client.win_list, _e_win_info_free);
+ if (e_info_client.engine)
+ {
+ eina_stringshare_del(e_info_client.engine);
+ e_info_client.engine = NULL;
+ }
+}
+
static void
_e_info_client_proc_topvwins_info(int argc, char **argv)
{
const char *prev_layer_name = NULL;
if (!_e_info_client_eldbus_message("get_window_info", _cb_vwindow_info_get))
- return;
+ goto ec_info;
printf("GL : %s\n", e_info_client.use_gl ? "on":"off");
printf("ENG: %s\n", e_info_client.engine);
else
printf("Deiconify Approve: %s\n", e_info_client.deiconify_approve ? "on":"off");
- printf("\n%d Top level windows\n", eina_list_count(e_info_client.win_list));
+ printf("\n%d Top level windows in evas object list\n", eina_list_count(e_info_client.win_list));
printf("--------------------------------------[ topvwins ]----------------------------------------------------------------------------------\n");
printf(" No Win_ID RcsID PID w h x y Foc InReg Dep Opaq Vsbt Icon Vis Map Frame PL@ZPos Parent Title\n");
printf("------------------------------------------------------------------------------------------------------------------------------------\n");
if (!e_info_client.win_list)
{
printf("no window\n");
- return;
+ goto ec_info;
}
EINA_LIST_FOREACH(e_info_client.win_list, l, win)
{
- if (!win) return;
+ if (!win) goto ec_info;
char tmp[20];
i++;
if (win->layer != prev_layer)
eina_stringshare_del(e_info_client.engine);
e_info_client.engine = NULL;
}
+
+ec_info:
+ _e_info_client_proc_ec_list_info();
+
}
static void
}
}
+static void
+_msg_ecs_append(Eldbus_Message_Iter *iter, Eina_Bool is_visible)
+{
+ Eldbus_Message_Iter *array_of_ec;
+ E_Client *ec;
+
+ eldbus_message_iter_arguments_append(iter, "a("VALUE_TYPE_FOR_TOPVWINS")", &array_of_ec);
+
+ // append clients.
+ E_CLIENT_REVERSE_FOREACH(ec)
+ {
+ Eldbus_Message_Iter* struct_of_ec;
+ Ecore_Window win;
+ Ecore_Window pwin;
+ uint32_t res_id = 0;
+ pid_t pid = -1;
+ char layer_name[32];
+ int hwc = -1, pl_zpos = -999;
+ int iconified = 0;
+ Eina_Bool has_input_region = EINA_FALSE;
+ Eina_List *list_input_region = NULL;
+ Eina_Bool mapped = EINA_FALSE;
+
+ if (!ec) continue;
+ if (is_visible && 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));
+
+ pwin = e_client_util_win_get(ec->parent);
+
+ if (ec->pixmap)
+ res_id = e_pixmap_res_id_get(ec->pixmap);
+
+ pid = ec->netwm.pid;
+ if (pid <= 0)
+ {
+ if (ec->comp_data)
+ {
+ E_Comp_Wl_Client_Data *cdata = (E_Comp_Wl_Client_Data*)ec->comp_data;
+ if (cdata->surface)
+ wl_client_get_credentials(wl_resource_get_client(cdata->surface), &pid, NULL, NULL);
+ }
+ }
+
+ if (ec->iconic)
+ {
+ if (ec->exp_iconify.by_client)
+ iconified = 2;
+ else
+ iconified = 1;
+ }
+ else
+ iconified = 0;
+
+ if (ec->comp_data)
+ mapped = ec->comp_data->mapped;
+
+ _e_info_server_ec_hwc_info_get(ec, &hwc, &pl_zpos);
+
+ e_comp_object_input_rect_get(ec->frame, &list_input_region);
+ if (list_input_region && (eina_list_count(list_input_region) > 0))
+ has_input_region = EINA_TRUE;
+
+ eldbus_message_iter_arguments_append(array_of_ec, "("VALUE_TYPE_FOR_TOPVWINS")", &struct_of_ec);
+
+ eldbus_message_iter_arguments_append
+ (struct_of_ec, VALUE_TYPE_FOR_TOPVWINS,
+ win,
+ res_id,
+ pid,
+ e_client_util_name_get(ec) ?: "NO NAME",
+ ec->x, ec->y, ec->w, ec->h, ec->layer,
+ ec->visible, mapped, ec->argb, ec->visibility.opaque, ec->visibility.obscured, iconified,
+ evas_object_visible_get(ec->frame), ec->focused, hwc, pl_zpos, pwin, layer_name, has_input_region);
+
+ eldbus_message_iter_container_close(array_of_ec, struct_of_ec);
+ }
+
+ eldbus_message_iter_container_close(iter, array_of_ec);
+}
+
static void
_msg_clients_append(Eldbus_Message_Iter *iter, Eina_Bool is_visible)
{
return reply;
}
+/* Method Handlers */
+static Eldbus_Message *
+_e_info_server_cb_ec_info_get(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
+{
+ Eldbus_Message *reply = eldbus_message_method_return_new(msg);
+ Eldbus_Message_Iter *iter = eldbus_message_iter_get(reply);
+
+ eldbus_message_iter_basic_append(iter, 'i', e_comp_config_get()->engine);
+ eldbus_message_iter_basic_append(iter, 'i', e_comp_config_get()->hwc);
+ eldbus_message_iter_basic_append(iter, 'i', e_comp_config_get()->hwc_use_multi_plane);
+ eldbus_message_iter_basic_append(iter, 'i', e_comp->hwc);
+ eldbus_message_iter_basic_append(iter, 'i', _e_info_server_is_hwc_windows());
+ eldbus_message_iter_basic_append(iter, 's', ecore_evas_engine_name_get(e_comp->ee));
+ eldbus_message_iter_basic_append(iter, 'i', e_config->use_buffer_flush);
+ eldbus_message_iter_basic_append(iter, 'i', e_config->deiconify_approve);
+
+ _msg_ecs_append(iter, EINA_TRUE);
+
+ return reply;
+}
+
/* Method Handlers */
static Eldbus_Message *
_e_info_server_cb_all_window_info_get(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
//{ "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({"iiiiisa("VALUE_TYPE_FOR_TOPVWINS")", "array of ec"}), _e_info_server_cb_window_info_get, 0 },
+ { "get_ec_info", NULL, ELDBUS_ARGS({"iiiiisa("VALUE_TYPE_FOR_TOPVWINS")", "array of ec"}), _e_info_server_cb_ec_info_get, 0 },
{ "get_all_window_info", NULL, ELDBUS_ARGS({"a("VALUE_TYPE_FOR_TOPVWINS")", "array of ec"}), _e_info_server_cb_all_window_info_get, 0 },
{ "compobjs", NULL, ELDBUS_ARGS({"a("SIGNATURE_COMPOBJS_CLIENT")", "array of comp objs"}), _e_info_server_cb_compobjs, 0 },
{ "subsurface", NULL, ELDBUS_ARGS({"a("SIGNATURE_SUBSURFACE")", "array of ec"}), _e_info_server_cb_subsurface, 0 },