e_comp_wl: update fake_ec for touch in all touch event's callback 55/234255/1
authorjeon <jhyuni.kang@samsung.com>
Mon, 25 May 2020 00:46:51 +0000 (09:46 +0900)
committerJeongHyun Kang <jhyuni.kang@samsung.com>
Mon, 25 May 2020 00:50:52 +0000 (00:50 +0000)
  - 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 a91e9d309722f2282b7ce0cd8ebbc6aac56a6b18..41f56ad024044d1d5bd995f5d4415ce547919f9a 100644 (file)
@@ -1262,6 +1262,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);
@@ -1346,8 +1347,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),
@@ -1529,6 +1529,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);
@@ -1598,6 +1600,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;