elementary: refactor filesector target cleanup to not leave function handler behind.

This commit is contained in:
Cedric BAIL 2018-05-23 20:24:21 -07:00
parent 85598a8a40
commit 40af4fe94b
1 changed files with 14 additions and 5 deletions

View File

@ -92,6 +92,7 @@ static Elm_Fileselector_Item_Data *_selected_item_data_get(Elm_Fileselector_Data
static void _resource_created(void *, const Efl_Event *);
static void _resource_deleted(void *, const Efl_Event *);
static void _listing_request_cleanup(Listing_Request *);
static void _properties_ready(void *data, const Efl_Event *ev);
EFL_CALLBACKS_ARRAY_DEFINE(monitoring_callbacks,
{ EFL_MODEL_EVENT_CHILD_ADDED, _resource_created },
@ -170,6 +171,13 @@ _invalidated(void *data EINA_UNUSED, const Efl_Event *event)
efl_event_callback_array_del(event->object, noref_death(), NULL);
}
static void
_reset_target(Elm_Fileselector_Data *pd)
{
efl_event_callback_del(pd->target, EFL_MODEL_EVENT_PROPERTIES_CHANGED, _properties_ready, pd->obj);
efl_replace(&pd->target, NULL);
}
static void
_elm_fileselector_replace_model(Elm_Fileselector *fs, Elm_Fileselector_Data *sd, Efl_Model *model, const char *path)
{
@ -898,7 +906,7 @@ _process_model(Elm_Fileselector_Data *sd, Efl_Model *child)
elm_genlist_item_selected_set(item, EINA_TRUE);
elm_object_text_set(sd->name_entry, it_data->filename);
efl_replace(&sd->target, NULL);
_reset_target(sd);
}
}
@ -2461,7 +2469,7 @@ _properties_ready(void *data, const Efl_Event *ev)
if (!parent)
{
ERR("Could not create model for '%s'.", dir);
efl_replace(&pd->target, NULL);
_reset_target(pd);
free(dir);
return ;
}
@ -2489,7 +2497,7 @@ _elm_fileselector_selected_set_internal(Evas_Object *obj, const char *path)
ELM_FILESELECTOR_INTERFACE_CHECK(obj, EINA_FALSE);
ELM_FILESELECTOR_DATA_GET(obj, pd);
efl_replace(&pd->target, NULL);
_reset_target(pd);
if (stat(path, &st)) return EINA_FALSE;
@ -2520,7 +2528,7 @@ _elm_fileselector_selected_set_internal(Evas_Object *obj, const char *path)
ERR("Unexpected value '%s' when setting path '%s'.", eina_value_to_string(value), path);
clean_up:
efl_replace(&pd->target, NULL);
_reset_target(pd);
return EINA_FALSE;
}
@ -2532,6 +2540,7 @@ _elm_fileselector_elm_interface_fileselector_selected_model_set(Eo *obj, Elm_Fil
if (!efl_isa(model, EIO_MODEL_CLASS)) return EINA_FALSE;
efl_event_callback_del(pd->target, EFL_MODEL_EVENT_PROPERTIES_CHANGED, _properties_ready, obj);
efl_replace(&pd->target, model);
if (!model) return EINA_TRUE;
@ -2591,7 +2600,7 @@ _elm_fileselector_elm_interface_fileselector_selected_model_set(Eo *obj, Elm_Fil
return EINA_TRUE;
clean_up:
efl_replace(&pd->target, NULL);
_reset_target(pd);
return EINA_FALSE;
}