e_comp_wl: update fake_ec for touch in all touch event's callback 54/234254/1
authorjeon <jhyuni.kang@samsung.com>
Mon, 25 May 2020 00:46:51 +0000 (09:46 +0900)
committerjeon <jhyuni.kang@samsung.com>
Mon, 25 May 2020 00:47:00 +0000 (09:47 +0900)
  - 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

src/bin/e_comp_wl.c

index 875d0ce1d4a6fecd9fd1a2672f82f2369cf7b285..0d61e665d45765215705940ed5786de3ba44c138 100644 (file)
@@ -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;