bu5hm4n pushed a commit to branch master.

http://git.enlightenment.org/tools/clouseau.git/commit/?id=1060bd4b235a9626fdd1aea4734d6d285bc799a8

commit 1060bd4b235a9626fdd1aea4734d6d285bc799a8
Author: Marcel Hollerbach <[email protected]>
Date:   Sun Apr 1 20:22:17 2018 +0200

    clouseau-focus: better displaying of the appearing focus managers
    
    now with name and pointer
---
 src/lib/Clouseau_Debug.h                  |  8 ++++++++
 src/lib/clouseau_debug.c                  | 22 ++++++++++++++++-----
 src/lib/clouseau_focus_serialization.x    | 33 ++++++++++++++++++++++++++++++-
 src/lib/extensions/focus_inspector/gui.c  | 16 +++++++++------
 src/lib/extensions/focus_inspector/gui.h  |  3 +--
 src/lib/extensions/focus_inspector/main.c | 10 +++++-----
 6 files changed, 73 insertions(+), 19 deletions(-)

diff --git a/src/lib/Clouseau_Debug.h b/src/lib/Clouseau_Debug.h
index 9a798d6..671ce51 100644
--- a/src/lib/Clouseau_Debug.h
+++ b/src/lib/Clouseau_Debug.h
@@ -121,6 +121,14 @@ typedef struct {
    Evas_Object *vis;
 } Clouseau_Focus_Relation;
 
+typedef struct {
+   uintptr_t ptr;
+   const char *helper_name;
+} Clouseau_Focus_List_Item;
+
+typedef struct {
+   Eina_List *managers;
+} Clouseau_Focus_Managers;
 
 EAPI void *eo_debug_eoids_request_prepare(int *size, ...);
 
diff --git a/src/lib/clouseau_debug.c b/src/lib/clouseau_debug.c
index 4d8bc16..7e94991 100644
--- a/src/lib/clouseau_debug.c
+++ b/src/lib/clouseau_debug.c
@@ -76,7 +76,7 @@ static int _focus_manager_detail_op = 
EINA_DEBUG_OPCODE_INVALID;
 
 static Eolian_State *eos = NULL;
 
-static Eet_Data_Descriptor *manager_details = NULL;
+static Eet_Data_Descriptor *manager_details = NULL, *manager_list = NULL;
 #include "clouseau_focus_serialization.x"
 
 enum {
@@ -1000,19 +1000,31 @@ static void
 _main_loop_focus_manager_list_cb(Eina_Debug_Session *session, int srcid, void 
*buffer EINA_UNUSED, int size EINA_UNUSED)
 {
    Eina_Iterator *obj_iterator, *manager_iterator;
-   Eina_Array *array;
+   Clouseau_Focus_Managers *managers;
    Eo *obj;
 
-   array = eina_array_new(10);
+   if (!manager_list) _init_data_descriptors();
+
+   managers = alloca(sizeof(Clouseau_Focus_Managers));
+   managers->managers = NULL;
    obj_iterator = eo_objects_iterator_new();
    manager_iterator = eina_iterator_filter_new(obj_iterator, _only_manager, 
NULL, NULL);
 
    EINA_ITERATOR_FOREACH(manager_iterator, obj)
      {
-        eina_array_push(array, obj);
+        Clouseau_Focus_List_Item *item = 
alloca(sizeof(Clouseau_Focus_List_Item));
+
+        item->ptr = (uintptr_t)(void*)obj;
+        item->helper_name = 
efl_class_name_get(efl_ui_focus_manager_root_get(obj));
+
+        managers->managers = eina_list_append(managers->managers, item);
      }
 
-   eina_debug_session_send(session, srcid, _focus_manager_list_op, 
array->data, array->count * sizeof(void*));
+   int blob_size;
+   void *blob = eet_data_descriptor_encode(manager_list, managers, &blob_size);
+   eina_debug_session_send(session, srcid, _focus_manager_list_op, blob, 
blob_size);
+
+   managers->managers = eina_list_free(managers->managers);
 }
 
 WRAPPER_TO_XFER_MAIN_LOOP(_focus_manager_list_cb)
diff --git a/src/lib/clouseau_focus_serialization.x 
b/src/lib/clouseau_focus_serialization.x
index 6933035..fbcf15a 100644
--- a/src/lib/clouseau_focus_serialization.x
+++ b/src/lib/clouseau_focus_serialization.x
@@ -1,6 +1,6 @@
 
 static void
-_init_data_descriptors(void)
+_init_manager_details_descriptors(void)
 {
    Eet_Data_Descriptor_Class klass;
    Eet_Data_Descriptor *relations_eed;
@@ -35,4 +35,35 @@ _init_data_descriptors(void)
    EET_DATA_DESCRIPTOR_ADD_BASIC(manager_details, Clouseau_Focus_Manager_Data, 
"focused", focused, EET_T_UINT);
    EET_DATA_DESCRIPTOR_ADD_BASIC(manager_details, Clouseau_Focus_Manager_Data, 
"class_name", class_name, EET_T_STRING);
    EET_DATA_DESCRIPTOR_ADD_LIST(manager_details, Clouseau_Focus_Manager_Data, 
"relations", relations, relations_eed);
+
+
+}
+
+static void
+_init_manager_list_descriptors(void)
+{
+   Eet_Data_Descriptor_Class klass;
+   Eet_Data_Descriptor *detail_eed;
+
+   EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&klass, Clouseau_Focus_List_Item);
+   detail_eed = eet_data_descriptor_file_new(&klass);
+   #define BASIC(field, type)    EET_DATA_DESCRIPTOR_ADD_BASIC(detail_eed, 
Clouseau_Focus_List_Item, #field , field, type)
+
+   BASIC(helper_name, EET_T_STRING);
+   BASIC(ptr, EET_T_LONG_LONG);
+
+   #undef BASIC
+
+
+   EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&klass, Clouseau_Focus_Managers);
+   manager_list = eet_data_descriptor_file_new(&klass);
+
+   EET_DATA_DESCRIPTOR_ADD_LIST(manager_list, Clouseau_Focus_Managers, 
"managers", managers, detail_eed);
+}
+
+static void
+_init_data_descriptors(void)
+{
+   _init_manager_list_descriptors();
+   _init_manager_details_descriptors();
 }
diff --git a/src/lib/extensions/focus_inspector/gui.c 
b/src/lib/extensions/focus_inspector/gui.c
index d96c76c..03f817f 100644
--- a/src/lib/extensions/focus_inspector/gui.c
+++ b/src/lib/extensions/focus_inspector/gui.c
@@ -8,10 +8,10 @@ static Elm_Genlist_Item_Class *itc;
 static char*
 _text_get(void *data, Elm_Genlist *list EINA_UNUSED, const char *part 
EINA_UNUSED)
 {
-   Efl_Ui_Focus_Manager *manager = data;
+   Clouseau_Focus_List_Item *it = data;
    Eina_Strbuf *res = eina_strbuf_new();
 
-   eina_strbuf_append_printf(res, "%p", manager);
+   eina_strbuf_append_printf(res, "%s - %p", it->helper_name, (void*)it->ptr);
    return eina_strbuf_release(res);
 }
 
@@ -97,17 +97,21 @@ ui_create(Instance *inst, Evas_Object *obj)
 static void
 _sel(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
 {
-   com_defailt_manager(data, elm_object_item_data_get(event_info));
+   Clouseau_Focus_List_Item *it = elm_object_item_data_get(event_info);
+   com_defailt_manager(data, (void*)it->ptr);
 }
 
 EAPI void
-ui_managers_add(Instance *inst, Efl_Ui_Focus_Manager **manager, int size)
+ui_managers_add(Instance *inst, Clouseau_Focus_Managers *clouseau_managers)
 {
+   Clouseau_Focus_List_Item *it;
+   Eina_List *n;
+
    elm_genlist_clear(managers);
 
-   for (int i = 0; i < size; ++i)
+   EINA_LIST_FOREACH(clouseau_managers->managers, n, it)
      {
-        elm_genlist_item_append(managers, itc, manager[i], NULL, 0, _sel, 
inst);
+        elm_genlist_item_append(managers, itc, it, NULL, 0, _sel, inst);
      }
 }
 
diff --git a/src/lib/extensions/focus_inspector/gui.h 
b/src/lib/extensions/focus_inspector/gui.h
index 82dfc9e..8e341c6 100644
--- a/src/lib/extensions/focus_inspector/gui.h
+++ b/src/lib/extensions/focus_inspector/gui.h
@@ -25,8 +25,7 @@ typedef enum {
 
 EAPI void tree_view_update(Instance *inst, Evas_Object *scroller);
 EAPI void tree_view_relation_display(Instance *inst, Relations rel);
-
-EAPI void ui_managers_add(Instance *inst, Efl_Ui_Focus_Manager **manager, int 
size);
+EAPI void ui_managers_add(Instance *inst, Clouseau_Focus_Managers 
*clouseau_managers);
 EAPI void ui_manager_data_arrived(Instance *inst, Clouseau_Focus_Manager_Data 
*data);
 EAPI Evas_Object* ui_create(Instance *inst, Evas_Object *obj);
 
diff --git a/src/lib/extensions/focus_inspector/main.c 
b/src/lib/extensions/focus_inspector/main.c
index db69acd..19545f6 100644
--- a/src/lib/extensions/focus_inspector/main.c
+++ b/src/lib/extensions/focus_inspector/main.c
@@ -9,19 +9,19 @@ static Instance inst;
 static int _focus_manager_list_op = EINA_DEBUG_OPCODE_INVALID;
 static int _focus_manager_detail_op = EINA_DEBUG_OPCODE_INVALID;
 
-static Eet_Data_Descriptor *manager_details = NULL;
+static Eet_Data_Descriptor *manager_details = NULL, *manager_list = NULL;
 #include "../../clouseau_focus_serialization.x"
 
 static Eina_Bool
 _main_loop_focus_manager_list_cb(Eina_Debug_Session *session, int src 
EINA_UNUSED, void *buffer, int size)
 {
-   int nb_managers = size / sizeof(Efl_Ui_Focus_Manager*);
-   Efl_Ui_Focus_Manager *manager_arr[nb_managers];
    Clouseau_Extension *ext = eina_debug_session_data_get(session);
+   Clouseau_Focus_Managers *managers;
+   if (!manager_list) _init_manager_list_descriptors();
 
-   memcpy(manager_arr, buffer, size);
+   managers = eet_data_descriptor_decode(manager_list, buffer, size);
 
-   ui_managers_add(ext->data, manager_arr, nb_managers);
+   ui_managers_add(ext->data, managers);
 
    return EINA_TRUE;
 }

-- 


Reply via email to