discomfitor pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=250b69c239d8f631952ca35e459eaaedf387610f

commit 250b69c239d8f631952ca35e459eaaedf387610f
Author: Derek Foreman <der...@osg.samsung.com>
Date:   Fri May 18 13:46:31 2018 -0400

    evas_device: Only remove pointer data on deletion of pointer devices
    
    Summary:
    This delete callback is shared for mouse, pointer, touch, and seat.  We
    should only delete pointer data when we're called on a pointer.
    
    Note that (at least under wayland) this particular bug is irreproducible
    right now because, due to a ref leak, this deletion callback can never
    fire.
    Depends on D6180
    
    Reviewers: zmike
    
    Reviewed By: zmike
    
    Subscribers: cedric, zmike
    
    Tags: #efl
    
    Differential Revision: https://phab.enlightenment.org/D6181
---
 src/lib/evas/canvas/evas_device.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/lib/evas/canvas/evas_device.c 
b/src/lib/evas/canvas/evas_device.c
index a871116aee..3f52d59635 100644
--- a/src/lib/evas/canvas/evas_device.c
+++ b/src/lib/evas/canvas/evas_device.c
@@ -76,6 +76,7 @@ _new_default_device_find(Evas_Public_Data *e, Evas_Device 
*old_dev)
 static void
 _del_cb(void *data, const Efl_Event *ev)
 {
+   Efl_Input_Device_Type devtype;
    Evas_Public_Data *e = data;
 
    e->devices_modified = EINA_TRUE;
@@ -89,7 +90,8 @@ _del_cb(void *data, const Efl_Event *ev)
    else if (e->default_keyboard == ev->object)
      e->default_keyboard = _new_default_device_find(e, ev->object);
 
-   if ((efl_input_device_type_get(ev->object) == EFL_INPUT_DEVICE_TYPE_SEAT) 
&& (!e->default_seat))
+   devtype = efl_input_device_type_get(ev->object);
+   if ((devtype == EFL_INPUT_DEVICE_TYPE_SEAT) && (!e->default_seat))
      {
         Evas_Pointer_Data *pdata = _evas_pointer_data_by_device_get(e, 
ev->object);
         if (pdata)
@@ -108,7 +110,8 @@ _del_cb(void *data, const Efl_Event *ev)
           }
      }
 
-   _evas_pointer_data_remove(e, ev->object);
+   if (devtype == EFL_INPUT_DEVICE_TYPE_MOUSE)
+     _evas_pointer_data_remove(e, ev->object);
    eina_hash_del_by_key(e->locks.masks, &ev->object);
    eina_hash_del_by_key(e->modifiers.masks, &ev->object);
    efl_event_callback_call(e->evas, EFL_CANVAS_SCENE_EVENT_DEVICE_REMOVED,

-- 


Reply via email to