From: jeon Date: Mon, 25 May 2020 00:46:51 +0000 (+0900) Subject: e_comp_wl: update fake_ec for touch in all touch event's callback X-Git-Tag: submit/tizen/20200528.224542~5 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=657625a87de7ea7748cf4992e73b29722db1f8d6;p=platform%2Fupstream%2Fenlightenment.git e_comp_wl: update fake_ec for touch in all touch event's callback - First touch is not gurantee index is 0 Multi touch events can generated before Mouse events. - Sometimes window stack is changed during touch, Evas_Move events are propagated to second window. Evas events are not gurantee first grabbed window got whole touch events Change-Id: Icde71853378022071d16871308958ae2948a7cc0 --- diff --git a/src/bin/e_comp_wl.c b/src/bin/e_comp_wl.c index 875d0ce1d4..0d61e665d4 100644 --- a/src/bin/e_comp_wl.c +++ b/src/bin/e_comp_wl.c @@ -1256,6 +1256,7 @@ _e_comp_wl_evas_cb_mouse_move(void *data, Evas *evas EINA_UNUSED, Evas_Object *o if (dev && (evas_device_class_get(dev) == EVAS_DEVICE_CLASS_TOUCH)) { + e_comp_wl->touch.faked_ec = ec; if (e_comp_wl->touch.pressed & (1 << 0)) { _e_comp_wl_device_send_event_device(ec, dev, ev->timestamp); @@ -1340,8 +1341,7 @@ _e_comp_wl_evas_cb_mouse_down(void *data, Evas *evas EINA_UNUSED, Evas_Object *o if (dev && (evas_device_class_get(dev) == EVAS_DEVICE_CLASS_TOUCH)) { - if (!e_comp_wl->touch.pressed) - e_comp_wl->touch.faked_ec = ec; + e_comp_wl->touch.faked_ec = ec; if (dev_name) _e_comp_wl_device_renew_axis(dev_name, evas_device_class_get(dev), @@ -1523,6 +1523,8 @@ _e_comp_wl_evas_cb_multi_down(void *data, Evas *evas EINA_UNUSED, Evas_Object *o ec, obj, ev->device, ev->timestamp, ev->output.x, ev->output.y, e_client_util_name_get(ec)); dev = ev->dev; + e_comp_wl->touch.faked_ec = ec; + if (dev && (dev_name = evas_device_description_get(dev))) { dev_class = evas_device_class_get(dev); @@ -1592,6 +1594,8 @@ _e_comp_wl_evas_cb_multi_move(void *data, Evas *evas EINA_UNUSED, Evas_Object *o /* Do not deliver emulated single touch events to client */ if (ev->device == 0) return; + e_comp_wl->touch.faked_ec = ec; + if (e_comp_wl->touch.pressed & (1 << ev->device)) { dev = ev->dev;