bdilly pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=e0af7384a2edf4d6ebb33bec88dc72c672b84150
commit e0af7384a2edf4d6ebb33bec88dc72c672b84150 Author: Guilherme Iscaro <[email protected]> Date: Thu Dec 1 16:14:11 2016 -0200 Efl.Input.Device: Do not ref/unref devices children devices. When a mouse/keyboard is removed from its seat under the Wayland backend, it was not immediately deleted from EFL, because its parent was keeping a reference to it. Since the mouse/keyboard is no longer present in the system there's no reason the keep them around. To prevent this delayed deletion do not ref/unref them when the parent is set. --- src/lib/efl/interfaces/efl_input_device.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/lib/efl/interfaces/efl_input_device.c b/src/lib/efl/interfaces/efl_input_device.c index bb59fc6..f20063f 100644 --- a/src/lib/efl/interfaces/efl_input_device.c +++ b/src/lib/efl/interfaces/efl_input_device.c @@ -28,7 +28,11 @@ _efl_input_device_efl_object_destructor(Eo *obj, Efl_Input_Device_Data *pd) { Efl_Input_Device_Data *child = efl_data_scope_get(eo_child, EFL_INPUT_DEVICE_CLASS); child->parent = NULL; - efl_unref(eo_child); + } + if (pd->parent) + { + Efl_Input_Device_Data *p = efl_data_scope_get(pd->parent, EFL_INPUT_DEVICE_CLASS); + p->children = eina_list_remove(p->children, obj); } efl_unref(pd->source); @@ -128,14 +132,12 @@ _efl_input_device_parent_set(Eo *obj, Efl_Input_Device_Data *pd, Efl_Input_Devic { Efl_Input_Device_Data *p = efl_data_scope_get(pd->parent, EFL_INPUT_DEVICE_CLASS); p->children = eina_list_remove(p->children, obj); - efl_unref(obj); } pd->parent = parent; if (parent) { Efl_Input_Device_Data *p = efl_data_scope_get(parent, EFL_INPUT_DEVICE_CLASS); p->children = eina_list_append(p->children, obj); - efl_ref(obj); } } --
