diff --git a/src/lib/evas/canvas/evas_device.c b/src/lib/evas/canvas/evas_device.c index 112132574d..10e98fef44 100644 --- a/src/lib/evas/canvas/evas_device.c +++ b/src/lib/evas/canvas/evas_device.c @@ -108,7 +108,9 @@ _del_cb(void *data, const Efl_Event *ev) } if (devtype == EFL_INPUT_DEVICE_TYPE_MOUSE) - _evas_pointer_data_remove(e, ev->object); + { + _evas_pointer_data_remove(e, ev->object, EINA_TRUE); + } 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, @@ -363,7 +365,7 @@ evas_device_class_set(Evas_Device *dev, Evas_Device_Class clas) return; if (_is_pointer(klass)) - _evas_pointer_data_remove(edata, dev); + _evas_pointer_data_remove(edata, dev, EINA_FALSE); efl_input_device_type_set(dev, clas); diff --git a/src/lib/evas/canvas/evas_main.c b/src/lib/evas/canvas/evas_main.c index 86a7881473..b64f8724ae 100644 --- a/src/lib/evas/canvas/evas_main.c +++ b/src/lib/evas/canvas/evas_main.c @@ -1480,7 +1480,7 @@ _evas_pointer_data_add(Evas_Public_Data *edata, Evas_Device *pointer) } void -_evas_pointer_data_remove(Evas_Public_Data *edata, Evas_Device *pointer) +_evas_pointer_data_remove(Evas_Public_Data *edata, Evas_Device *pointer, Eina_Bool nofree) { Evas_Pointer_Data *pdata; Evas_Pointer_Seat *pseat; @@ -1492,7 +1492,7 @@ _evas_pointer_data_remove(Evas_Public_Data *edata, Evas_Device *pointer) if (pdata->pointer == pointer) { pseat->pointers = eina_inlist_remove(pseat->pointers, EINA_INLIST_GET(pdata)); - free(pdata); + if (!nofree) free(pdata); hit = pseat; break; } diff --git a/src/lib/evas/include/evas_private.h b/src/lib/evas/include/evas_private.h index e57910f930..51f4ce22bd 100644 --- a/src/lib/evas/include/evas_private.h +++ b/src/lib/evas/include/evas_private.h @@ -1935,7 +1935,7 @@ void _evas_focus_dispatch_event(Evas_Object_Protected_Data *obj, Efl_Input_Device *seat, Eina_Bool in); Evas_Pointer_Data *_evas_pointer_data_by_device_get(Evas_Public_Data *edata, Efl_Input_Device *pointer); Evas_Pointer_Data *_evas_pointer_data_add(Evas_Public_Data *edata, Efl_Input_Device *pointer); -void _evas_pointer_data_remove(Evas_Public_Data *edata, Efl_Input_Device *pointer); +void _evas_pointer_data_remove(Evas_Public_Data *edata, Efl_Input_Device *pointer, Eina_Bool nofree); Eina_List *_evas_pointer_list_in_rect_get(Evas_Public_Data *edata, Evas_Object *obj, Evas_Object_Protected_Data *obj_data,