cedric pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=883d41f0062b947c1d8793b5c6f9c586e20f484b
commit 883d41f0062b947c1d8793b5c6f9c586e20f484b Author: Guilherme Iscaro <isc...@profusion.mobi> Date: Mon Nov 14 10:24:47 2016 -0800 evas focus: Do not allow two objects focused by the same seat. Summary: Before focusing an object, the intercept focus callback is called. This callback may ask Evas to focus another object instead, so it's necessary to check if the seat in question still have a focused object event after a efl_canvas_object_seat_focus_del() call. Reviewers: cedric, bdilly, barbieri, ProhtMeyhet, netstar Subscribers: cedric, jpeg Maniphest Tasks: T4864, T4886 Differential Revision: https://phab.enlightenment.org/D4396 Signed-off-by: Cedric BAIL <ced...@osg.samsung.com> --- src/lib/evas/canvas/evas_focus.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/lib/evas/canvas/evas_focus.c b/src/lib/evas/canvas/evas_focus.c index c09ba28..3245867 100644 --- a/src/lib/evas/canvas/evas_focus.c +++ b/src/lib/evas/canvas/evas_focus.c @@ -153,6 +153,9 @@ _efl_canvas_object_seat_focus_add(Eo *eo_obj, if (current_focus) efl_canvas_object_seat_focus_del(current_focus, seat); + //In case intercept focus callback focused object we should return. + if (_current_focus_get(eo_obj, seat)) goto end; + efl_event_callback_add(seat, EFL_EVENT_DEL, _evas_focus_device_del_cb, obj); obj->focused_by_seats = eina_list_append(obj->focused_by_seats, seat); --