forked from enlightenment/efl
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:
parent
8ab3f3319e
commit
197210cde2
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue