e_comp_wl: check touches are pressed before send touch cancel 25/229925/1 accepted/tizen/5.5/unified/20200408.131549 submit/tizen_5.5/20200407.055907 submit/tizen_5.5/20200408.130314
authorjeon <jhyuni.kang@samsung.com>
Mon, 6 Apr 2020 11:46:57 +0000 (20:46 +0900)
committerJeongHyun Kang <jhyuni.kang@samsung.com>
Mon, 6 Apr 2020 11:56:00 +0000 (11:56 +0000)
  - 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

index 1e6ede9d78c53d4b6b963f918a906232b3ec787e..4f602521e7fceba100ee6733ebb58fcfa3d62507 100644 (file)
@@ -652,14 +652,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
@@ -1428,20 +1423,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);
@@ -1567,12 +1565,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)))
      {
@@ -2188,8 +2186,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;
 }
@@ -2197,15 +2194,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)