elc_filselector: solve the mysterium of sometimes failing tests

so after a phone call, two days of debugging, tears, crying etc. etc. we
finally came to a point of enlightenment! *Someone* (bu5hm4n) moved
gengrid and genlist events from eo back to smart events, so we can work
arround legacy borks and event-name collisions, at this point he did not
knew that some widgets (fileselector) already relied on those *lovely*
events. Hence this broke theoretically the testsuite, however, the
fileselector testsuite is ultimatily buggy, and the wait function does
not return false when it timeouts, (i don't know why not). So this break
was never discovered.

Additionally there is a second issue. it appears, that when we
immidiatly quit the mainloop after we have got the selected callback,
that then genlist decides to forget about the sd->selected pointer, and
NULLs that one out. Which then results in the fact that
elm_fileselector_selected_get ends up returning invalid paths.

Reviewed-by: Cedric BAIL <cedric.bail@free.fr>
Differential Revision: https://phab.enlightenment.org/D8488
This commit is contained in:
Marcel Hollerbach 2019-03-27 21:15:53 +01:00 committed by Cedric BAIL
parent 8ab3f3319e
commit 197210cde2
2 changed files with 9 additions and 15 deletions

View File

@ -1164,10 +1164,10 @@ _clear_selections(Elm_Fileselector_Data *sd, Elm_Object_Item *last_selected)
}
static void
_on_item_selected(void *data, const Efl_Event *event)
_on_item_selected(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
{
//This event_info could be a list or gengrid item
Elm_Object_Item *it = event->info;
Elm_Object_Item *it = event_info;
Elm_Fileselector_Item_Data *it_data = NULL;
ELM_FILESELECTOR_DATA_GET(data, sd);
@ -1254,12 +1254,12 @@ _on_item_selected(void *data, const Efl_Event *event)
}
static void
_on_item_unselected(void *data, const Efl_Event *event)
_on_item_unselected(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
{
Eina_List *li, *l;
const Elm_Fileselector_Item_Data *it_data;
Eina_Strbuf *buf;
Elm_Object_Item *it = event->info;
Elm_Object_Item *it = event_info;
Elm_Object_Item *it2 = NULL;
Eina_Bool first = EINA_TRUE;
@ -1555,10 +1555,8 @@ _files_list_add(Evas_Object *obj)
evas_object_data_set(li, "parent", obj);
efl_ui_mirrored_automatic_set(li, EINA_FALSE);
efl_event_callback_add
(li, EFL_UI_EVENT_ITEM_SELECTED, _on_item_selected, obj);
efl_event_callback_add
(li, EFL_UI_EVENT_ITEM_UNSELECTED, _on_item_unselected, obj);
evas_object_smart_callback_add(li, "selected", _on_item_selected, obj);
evas_object_smart_callback_add(li, "unselected", _on_item_unselected, obj);
efl_event_callback_add
(li, ELM_GENLIST_EVENT_ACTIVATED, _on_item_activated, obj);
efl_event_callback_add
@ -1592,10 +1590,8 @@ _files_grid_add(Evas_Object *obj)
elm_gengrid_align_set(grid, 0.0, 0.0);
efl_event_callback_add
(grid, EFL_UI_EVENT_ITEM_SELECTED, _on_item_selected, obj);
efl_event_callback_add
(grid, EFL_UI_EVENT_ITEM_UNSELECTED, _on_item_unselected, obj);
evas_object_smart_callback_add(grid, "selected", _on_item_selected, obj);
evas_object_smart_callback_add(grid, "unselected", _on_item_unselected, obj);
efl_event_callback_add
(grid, ELM_GENGRID_EVENT_ACTIVATED, _on_item_activated, obj);
efl_event_callback_add

View File

@ -86,8 +86,6 @@ _ready_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED
{
Eina_Bool *ret = data;
*ret = EINA_TRUE;
ecore_main_loop_quit();
}
EFL_START_TEST(elm_fileselector_selected)
@ -131,7 +129,7 @@ EFL_START_TEST(elm_fileselector_selected)
selected = EINA_FALSE;
ck_assert(elm_fileselector_selected_set(fileselector, exist));
ck_assert(fileselector_test_helper_wait_flag(10, &selected));
ck_assert(selected == EINA_TRUE);
ck_assert_str_eq(elm_fileselector_selected_get(fileselector), exist);
eina_stringshare_del(exist);