From 4e811bed17a33b78b13df2a479290caf49930ceb Mon Sep 17 00:00:00 2001 From: Jean-Philippe Andre Date: Wed, 5 Oct 2016 20:53:26 +0900 Subject: [PATCH] eio_model: Provide main loop even without parent An eio model (and I believe most other models as well, in fact) require a Efl.Loop.User as parent in order for efl future/promises to work. This adds a fallback code directly inside eio model. The alternative was to parent and efl_del all models in fileselector. See T4686 --- src/lib/eio/eio_model.c | 14 +++++++++++++- src/lib/eio/eio_model.eo | 1 + 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/lib/eio/eio_model.c b/src/lib/eio/eio_model.c index 56395b7..64a7213 100644 --- a/src/lib/eio/eio_model.c +++ b/src/lib/eio/eio_model.c @@ -703,7 +703,6 @@ _eio_model_efl_object_destructor(Eo *obj , Eio_Model_Data *priv) efl_destructor(efl_super(obj, MY_CLASS)); } - static Eo * _eio_model_efl_object_parent_get(Eo *obj , Eio_Model_Data *priv) { @@ -723,4 +722,17 @@ _eio_model_efl_object_parent_get(Eo *obj , Eio_Model_Data *priv) } return model; } + +EOLIAN static Eo * +_eio_model_efl_object_provider_find(Eo *obj, Eio_Model_Data *priv EINA_UNUSED, const Efl_Class *klass) +{ + Eo *provider = efl_provider_find(efl_super(obj, MY_CLASS), klass); + + // Provide main loop even if we don't have a loop user parent + if (!provider && (klass == EFL_LOOP_CLASS) && eina_main_loop_is()) + return ecore_main_loop_get(); + + return provider; +} + #include "eio_model.eo.c" diff --git a/src/lib/eio/eio_model.eo b/src/lib/eio/eio_model.eo index 5cbde59..bc4d4b6 100644 --- a/src/lib/eio/eio_model.eo +++ b/src/lib/eio/eio_model.eo @@ -37,6 +37,7 @@ class Eio.Model (Efl.Object, Efl.Model) Efl.Object.constructor; Efl.Object.destructor; Efl.Object.parent.get; + Efl.Object.provider_find; Efl.Model.properties.get; Efl.Model.property_set; Efl.Model.property_get; -- 2.7.4