From 31454ad49641a5f1af44484d7e057c2f707b3deb Mon Sep 17 00:00:00 2001 From: jeon Date: Mon, 6 Apr 2020 20:46:57 +0900 Subject: [PATCH] e_comp_wl: check touches are pressed before send touch cancel - currently we only check need_send_released before send touch cancel, but that variable is only triggered single touch. - so we cannot check multi touch status, so change condition Change-Id: I303447c09f9f88871868498aef38783a77f13db1 --- src/bin/e_comp_wl.c | 36 ++++++++++++++---------------------- 1 file changed, 14 insertions(+), 22 deletions(-) diff --git a/src/bin/e_comp_wl.c b/src/bin/e_comp_wl.c index e075dba..875d0ce 100644 --- a/src/bin/e_comp_wl.c +++ b/src/bin/e_comp_wl.c @@ -646,14 +646,9 @@ _e_comp_wl_touch_cancel(void) ec = e_comp_wl->ptr.ec ? e_comp_wl->ptr.ec : e_comp_wl->touch.faked_ec; if (!ec) return; - - if (!need_send_released) - return; + if (!e_comp_wl->touch.pressed) return; _e_comp_wl_send_touch_cancel(ec); - - need_send_released = EINA_FALSE; - need_send_motion = EINA_FALSE; } static void @@ -1422,20 +1417,23 @@ _e_comp_wl_evas_cb_mouse_up(void *data, Evas *evas, Evas_Object *obj, void *even ELOGF("Touch", "Up (obj: %p, button: %d, flag: 0x%x, time: %d, x:%d, y:%d, name:%20s)", ec, obj, ev->button, flags, ev->timestamp, ev->output.x, ev->output.y, e_client_util_name_get(ec)); - if (flags & EVAS_EVENT_FLAG_ON_HOLD) goto finish; - dev = ev->dev; dev_name = evas_device_description_get(dev); - _e_comp_wl_device_send_event_device(ec, dev, ev->timestamp); - if (dev && (evas_device_class_get(dev) == EVAS_DEVICE_CLASS_TOUCH)) { e_comp_wl->touch.pressed &= ~(1 << 0); if (!e_comp_wl->touch.pressed && e_comp_wl->touch.faked_ec) e_comp_wl->touch.faked_ec = NULL; + } + + if (flags & EVAS_EVENT_FLAG_ON_HOLD) goto finish; + + _e_comp_wl_device_send_event_device(ec, dev, ev->timestamp); + if (dev && (evas_device_class_get(dev) == EVAS_DEVICE_CLASS_TOUCH)) + { if (dev_name) _e_comp_wl_device_handle_axes(dev_name, evas_device_class_get(dev), ec, 0, ev->radius_x, ev->radius_y, ev->pressure, ev->angle); @@ -1561,12 +1559,12 @@ _e_comp_wl_evas_cb_multi_up(void *data, Evas *evas, Evas_Object *obj EINA_UNUSED ELOGF("Touch", "Up (obj: %p, idx: %d, flag: 0x%x, time: %d, x:%d, y:%d, name:%20s)", ec, obj, ev->device, flags, ev->timestamp, ev->output.x, ev->output.y, e_client_util_name_get(ec)); - if (flags & EVAS_EVENT_FLAG_ON_HOLD) return; - e_comp_wl->touch.pressed &= ~(1 << ev->device); if (!e_comp_wl->touch.pressed && e_comp_wl->touch.faked_ec) e_comp_wl->touch.faked_ec = NULL; + if (flags & EVAS_EVENT_FLAG_ON_HOLD) return; + dev = ev->dev; if (dev && (dev_name = evas_device_description_get(dev))) { @@ -2193,8 +2191,7 @@ _e_comp_wl_cb_mouse_move(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_Event_Mou static Eina_Bool _e_comp_wl_cb_mouse_button_cancel(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_Event_Mouse_Button *ev) { - if (e_comp_wl->ptr.ec) - _e_comp_wl_send_touch_cancel(e_comp_wl->ptr.ec); + _e_comp_wl_touch_cancel(); return ECORE_CALLBACK_PASS_ON; } @@ -2202,15 +2199,10 @@ _e_comp_wl_cb_mouse_button_cancel(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_ static Eina_Bool _e_comp_wl_cb_zone_display_state_change(void *d EINA_UNUSED, int t EINA_UNUSED, E_Event_Zone_Display_State_Change *ev EINA_UNUSED) { - if (e_comp_wl->ptr.ec && need_send_released) - { - _e_comp_wl_send_touch_cancel(e_comp_wl->ptr.ec); - - need_send_released = EINA_FALSE; - } + _e_comp_wl_touch_cancel(); - return ECORE_CALLBACK_PASS_ON; - } + return ECORE_CALLBACK_PASS_ON; +} static Eina_Bool _e_comp_wl_cb_client_rot_change_begin(void *d EINA_UNUSED, int t EINA_UNUSED, E_Event_Client_Rotation_Change_Begin *ev) -- 2.7.4