From 6329111385ba534737ac8d01d6ec083a018a175a Mon Sep 17 00:00:00 2001 From: Jean-Philippe Andre Date: Wed, 7 Jun 2017 14:53:08 +0900 Subject: [PATCH] evas: Set locks and modifiers for all input events See also eb27724eb9c32a954c2f75b45307a207d0 which didn't fix the reported issue. Not quite sure yet how to implement those lock & modifiers for fake events (i.e. artificially created by the app itself). Fixes T5510 --- src/lib/evas/canvas/efl_input_key.c | 9 +++++++++ src/lib/evas/canvas/efl_input_pointer.c | 11 ++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/lib/evas/canvas/efl_input_key.c b/src/lib/evas/canvas/efl_input_key.c index f9d2f15021..d4154ce963 100644 --- a/src/lib/evas/canvas/efl_input_key.c +++ b/src/lib/evas/canvas/efl_input_key.c @@ -41,6 +41,7 @@ _efl_input_key_efl_input_event_instance_get(Eo *klass EINA_UNUSED, void *_pd EIN { Efl_Input_Key_Data *ev; Efl_Input_Key *evt; + Evas *evas; if (s_cached_event) { @@ -58,6 +59,14 @@ _efl_input_key_efl_input_event_instance_get(Eo *klass EINA_UNUSED, void *_pd EIN ev->fake = EINA_FALSE; if (priv) *priv = ev; + evas = efl_provider_find(owner, EVAS_CANVAS_CLASS); + if (evas) + { + Evas_Public_Data *e = efl_data_scope_get(evas, EVAS_CANVAS_CLASS); + ev->modifiers = &e->modifiers; + ev->locks = &e->locks; + } + return evt; } diff --git a/src/lib/evas/canvas/efl_input_pointer.c b/src/lib/evas/canvas/efl_input_pointer.c index 6354ecd1b3..01a20c1841 100644 --- a/src/lib/evas/canvas/efl_input_pointer.c +++ b/src/lib/evas/canvas/efl_input_pointer.c @@ -48,10 +48,11 @@ _del_hook(Eo *evt) EOLIAN static Efl_Input_Pointer * _efl_input_pointer_efl_input_event_instance_get(Eo *klass EINA_UNUSED, void *_pd EINA_UNUSED, - Eo *owner, void **priv) + Eo *owner, void **priv) { Efl_Input_Pointer_Data *ev; Efl_Input_Pointer *evt; + Evas *evas; if (s_cached_event) { @@ -69,6 +70,14 @@ _efl_input_pointer_efl_input_event_instance_get(Eo *klass EINA_UNUSED, void *_pd ev->fake = EINA_FALSE; if (priv) *priv = ev; + evas = efl_provider_find(owner, EVAS_CANVAS_CLASS); + if (evas) + { + Evas_Public_Data *e = efl_data_scope_get(evas, EVAS_CANVAS_CLASS); + ev->modifiers = &e->modifiers; + ev->locks = &e->locks; + } + return evt; }