e_comp_wl: check touches are pressed before send touch cancel 24/229924/1 accepted/tizen/unified/20200408.131451 submit/tizen/20200408.130235
authorjeon <jhyuni.kang@samsung.com>
Mon, 6 Apr 2020 11:46:57 +0000 (20:46 +0900)
committerjeon <jhyuni.kang@samsung.com>
Mon, 6 Apr 2020 11:47:02 +0000 (20:47 +0900)
  - 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 e075dbafc319181f64776b1cc2e6c81b3b2c8b6e..875d0ce1d4a6fecd9fd1a2672f82f2369cf7b285 100644 (file)
@@ -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)