diff --git a/src/bin/clouseau_client.c b/src/bin/clouseau_client.c index 4a7b729..c993e33 100644 --- a/src/bin/clouseau_client.c +++ b/src/bin/clouseau_client.c @@ -47,6 +47,15 @@ static uint32_t _cid = 0; static int my_argc = 0; static char **my_argv = NULL; static int selected_app = -1; +static Elm_Genlist_Item_Class *_itc = NULL; +Eina_List *objs = NULL; + +static char * +_item_label_get(void *data, Evas_Object *obj, const char *part) +{ + Obj_Info *info = data; + return strdup(info->kl_name); +} static void _hoversel_selected_app(void *data, Evas_Object *obj, void *event_info) @@ -54,6 +63,19 @@ _hoversel_selected_app(void *data, Evas_Object *obj, void *event_info) Elm_Object_Item *hoversel_it = event_info; selected_app = (int)(long)elm_object_item_data_get(hoversel_it); printf("selected app %d\n", selected_app); + + if(objs) + { + Obj_Info *data; + EINA_LIST_FREE(objs, data) + free(data); + objs = NULL; + elm_genlist_clear(pub_widgets->elm_win1->elm_genlist1); + } + + Eina_Debug_Client *cl = eina_debug_client_new(_session, selected_app); + eina_debug_session_send(cl, _elm_list_opcode, NULL, 0); + eina_debug_client_free(cl); } static void @@ -159,12 +181,32 @@ static Eina_Bool _elm_objects_list_cb(Eina_Debug_Client *src EINA_UNUSED, void *buffer, int size) { printf("size=%d\n", size); - Eina_List *objs = eo_debug_list_response_decode(buffer, size), *itr; + Eina_List *itr; + objs = eo_debug_list_response_decode(buffer, size); Obj_Info *info; EINA_LIST_FOREACH(objs, itr, info) { printf("%p: %s\n", info->ptr, info->kl_name); + + elm_genlist_item_append(pub_widgets->elm_win1->elm_genlist1, _itc, + (void *)info, NULL, + ELM_GENLIST_ITEM_NONE, + NULL, NULL); } + + return EINA_TRUE; +} + +static void +_ecore_thread_dispatcher(void *data) +{ + eina_debug_dispatch(_session, data); +} + +Eina_Bool +_disp_cb(Eina_Debug_Session *session, void *buffer) +{ + ecore_main_loop_thread_safe_call_async(_ecore_thread_dispatcher, buffer); return EINA_TRUE; } @@ -173,6 +215,7 @@ _args_handle(Eina_Bool flag) { int i; if(!flag) return; + eina_debug_session_dispatch_override(_session, _disp_cb); Eina_Debug_Client *cl = eina_debug_client_new(_session, 0); eina_debug_session_send(cl, _cl_stat_reg_opcode, NULL, 0); @@ -234,11 +277,24 @@ elm_main(int argc, char **argv) elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); pub_widgets = gui_gui_get(); + if (!_itc) + { + _itc = elm_genlist_item_class_new(); + _itc->item_style = "default"; + _itc->func.text_get = _item_label_get; + _itc->func.content_get = NULL; + _itc->func.state_get = NULL; + _itc->func.del = NULL; + } + evas_object_size_hint_weight_set(pub_widgets->elm_win1->elm_genlist1, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + evas_object_show(pub_widgets->elm_win1->elm_genlist1); evas_object_show(pub_widgets->elm_win1->elm_win1); eina_init(); _session = eina_debug_session_new(); + if (!eina_debug_local_connect(_session)) { fprintf(stderr, "ERROR: Cannot connect to debug daemon.\n");