From 1eb49b2e9bcb820dc8cf920979b414abe489b9a2 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Fri, 22 Mar 2019 10:31:52 -0700 Subject: [PATCH] elementary: prevent asynchronous properties change to believe target is ready when it is not in fileselector. In some case, the properties changed event would be triggered first on the object model instead of the target model. This now enforce that the target will be the first model to handle and react on the information. Reviewed-by: Marcel Hollerbach Differential Revision: https://phab.enlightenment.org/D8449 --- src/lib/elementary/elc_fileselector.c | 5 +++-- src/lib/elementary/elm_widget_fileselector.h | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/lib/elementary/elc_fileselector.c b/src/lib/elementary/elc_fileselector.c index 9509789988..970bf9cc13 100644 --- a/src/lib/elementary/elc_fileselector.c +++ b/src/lib/elementary/elc_fileselector.c @@ -900,7 +900,7 @@ _process_model(Elm_Fileselector_Data *sd, Efl_Model *child) efl_key_data_set(child, ".item.data", item); // Is this item selected - if (sd->target) + if (sd->target && sd->target_ready) { const char *target_path = efl_io_model_path_get(sd->target); @@ -2409,7 +2409,7 @@ _properties_ready(void *data, const Efl_Event *ev) efl_event_callback_del(ev->object, EFL_MODEL_EVENT_PROPERTIES_CHANGED, _properties_ready, obj); eina_value_bool_get(value, &is_dir); - + pd->target_ready = EINA_TRUE; if (!is_dir) { Efl_Model *parent; @@ -2453,6 +2453,7 @@ _elm_fileselector_selected_set_internal(Evas_Object *obj, const char *path) if (stat(path, &st)) return EINA_FALSE; + pd->target_ready = EINA_FALSE; pd->target = efl_add_ref(EFL_IO_MODEL_CLASS, obj, efl_io_model_path_set(efl_added, path), efl_event_callback_array_add(efl_added, noref_death(), NULL)); if (!pd->target) diff --git a/src/lib/elementary/elm_widget_fileselector.h b/src/lib/elementary/elm_widget_fileselector.h index d8c37f3dd8..eb669821b4 100644 --- a/src/lib/elementary/elm_widget_fileselector.h +++ b/src/lib/elementary/elm_widget_fileselector.h @@ -86,6 +86,7 @@ struct _Elm_Fileselector_Data Eina_Bool dir_selected : 1; Eina_Bool hidden_visible : 1; + Eina_Bool target_ready : 1; }; struct sel_data