summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno Dilly <bdilly@profusion.mobi>2016-12-16 18:11:05 -0200
committerBruno Dilly <bdilly@profusion.mobi>2016-12-19 14:07:08 -0200
commit84a36eee7bf92efca7d4b754e2b2cdbc0e1f21d3 (patch)
treeda4df366dbdbb1bdc553a552cc209085621f7614
parenta7657e821f81eab59a719c81d3994194492476a6 (diff)
downloadefl-84a36eee7bf92efca7d4b754e2b2cdbc0e1f21d3.tar.gz
evas: remove focus when removed from filter whitelist
It doesn't make sense to remove it when a seat is added to the list. It should be removed only when this seat is blocked. But when the list receives its first item, then it also should be checked if the focused seat is the one just added, otherwise the previous one must be removed.
-rw-r--r--src/lib/evas/canvas/evas_object_main.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/lib/evas/canvas/evas_object_main.c b/src/lib/evas/canvas/evas_object_main.c
index a030505ffe..a705bd42b7 100644
--- a/src/lib/evas/canvas/evas_object_main.c
+++ b/src/lib/evas/canvas/evas_object_main.c
@@ -942,14 +942,28 @@ _efl_canvas_object_efl_input_interface_seat_event_filter_set(Eo *eo_obj,
if (add)
{
if (eina_list_data_find(obj->events_whitelist, seat)) return;
- if (efl_canvas_object_seat_focus_check(eo_obj, seat))
- efl_canvas_object_seat_focus_del(eo_obj, seat);
+ /* remove all previously focused seats, if any - it may happen
+ since there wasn't a whitelist in place (no restrictions) */
+ if ((!obj->events_whitelist) && (obj->layer) && (obj->layer->evas))
+ {
+ const Eina_List *devices, *l;
+ Efl_Input_Device *dev;
+
+ devices = obj->layer->evas->devices;
+ EINA_LIST_FOREACH(devices, l, dev)
+ {
+ if ((efl_input_device_type_get(dev) ==
+ EFL_INPUT_DEVICE_CLASS_SEAT) && (dev != seat))
+ efl_canvas_object_seat_focus_del(eo_obj, dev);
+ }
+ }
obj->events_whitelist = eina_list_append(obj->events_whitelist, seat);
efl_event_callback_add(seat, EFL_EVENT_DEL,
_whitelist_events_device_remove_cb, obj);
}
else
{
+ efl_canvas_object_seat_focus_del(eo_obj, seat);
obj->events_whitelist = eina_list_remove(obj->events_whitelist, seat);
efl_event_callback_del(seat, EFL_EVENT_DEL,
_whitelist_events_device_remove_cb, obj);