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);

-- 


Reply via email to