ecore-evas: block buffer canvas events during deletion
authorMike Blumenkrantz <zmike@osg.samsung.com>
Fri, 16 Jun 2017 19:03:09 +0000 (15:03 -0400)
committerMike Blumenkrantz <zmike@osg.samsung.com>
Fri, 16 Jun 2017 16:23:07 +0000 (12:23 -0400)
internal evas is destroyed before engine delete function is called,
so do not refeed events received during this time

@fix

src/lib/ecore_evas/ecore_evas_buffer.c

index 6d7f64b..dcb9fa1 100644 (file)
@@ -255,6 +255,7 @@ _ecore_evas_buffer_cb_mouse_in(void *data, Evas *e, Evas_Object *obj EINA_UNUSED
 
    ee = data;
    ev = event_info;
+   if (!ee->evas) return;
    _ecore_evas_buffer_transfer_modifiers_locks(e, ee->evas);
    evas_event_feed_mouse_in(ee->evas, ev->timestamp, NULL);
 }
@@ -267,6 +268,7 @@ _ecore_evas_buffer_cb_mouse_out(void *data, Evas *e, Evas_Object *obj EINA_UNUSE
 
    ee = data;
    ev = event_info;
+   if (!ee->evas) return;
    _ecore_evas_buffer_transfer_modifiers_locks(e, ee->evas);
    evas_event_feed_mouse_out(ee->evas, ev->timestamp, NULL);
 }
@@ -279,6 +281,7 @@ _ecore_evas_buffer_cb_mouse_down(void *data, Evas *e, Evas_Object *obj EINA_UNUS
 
    ee = data;
    ev = event_info;
+   if (!ee->evas) return;
    _ecore_evas_buffer_transfer_modifiers_locks(e, ee->evas);
    evas_event_feed_mouse_down(ee->evas, ev->button, ev->flags, ev->timestamp, NULL);
 }
@@ -291,6 +294,7 @@ _ecore_evas_buffer_cb_mouse_up(void *data, Evas *e, Evas_Object *obj EINA_UNUSED
 
    ee = data;
    ev = event_info;
+   if (!ee->evas) return;
    _ecore_evas_buffer_transfer_modifiers_locks(e, ee->evas);
    evas_event_feed_mouse_up(ee->evas, ev->button, ev->flags, ev->timestamp, NULL);
 }
@@ -306,6 +310,7 @@ _ecore_evas_buffer_cb_mouse_move(void *data, Evas *e, Evas_Object *obj EINA_UNUS
    ev = event_info;
    x = ev->cur.canvas.x;
    y = ev->cur.canvas.y;
+   if (!ee->evas) return;
    _ecore_evas_buffer_coord_translate(ee, &x, &y);
    _ecore_evas_buffer_transfer_modifiers_locks(e, ee->evas);
    _ecore_evas_mouse_move_process(ee, x, y, ev->timestamp);
@@ -319,6 +324,7 @@ _ecore_evas_buffer_cb_mouse_wheel(void *data, Evas *e, Evas_Object *obj EINA_UNU
 
    ee = data;
    ev = event_info;
+   if (!ee->evas) return;
    _ecore_evas_buffer_transfer_modifiers_locks(e, ee->evas);
    evas_event_feed_mouse_wheel(ee->evas, ev->direction, ev->z, ev->timestamp, NULL);
 }
@@ -337,6 +343,7 @@ _ecore_evas_buffer_cb_multi_down(void *data, Evas *e, Evas_Object *obj EINA_UNUS
    y = ev->canvas.y;
    xx = x;
    yy = y;
+   if (!ee->evas) return;
    _ecore_evas_buffer_coord_translate(ee, &x, &y);
    xf = (ev->canvas.xsub - (double)xx) + (double)x;
    yf = (ev->canvas.ysub - (double)yy) + (double)y;
@@ -358,6 +365,7 @@ _ecore_evas_buffer_cb_multi_up(void *data, Evas *e, Evas_Object *obj EINA_UNUSED
    y = ev->canvas.y;
    xx = x;
    yy = y;
+   if (!ee->evas) return;
    _ecore_evas_buffer_coord_translate(ee, &x, &y);
    xf = (ev->canvas.xsub - (double)xx) + (double)x;
    yf = (ev->canvas.ysub - (double)yy) + (double)y;
@@ -379,6 +387,7 @@ _ecore_evas_buffer_cb_multi_move(void *data, Evas *e, Evas_Object *obj EINA_UNUS
    y = ev->cur.canvas.y;
    xx = x;
    yy = y;
+   if (!ee->evas) return;
    _ecore_evas_buffer_coord_translate(ee, &x, &y);
    xf = (ev->cur.canvas.xsub - (double)xx) + (double)x;
    yf = (ev->cur.canvas.ysub - (double)yy) + (double)y;
@@ -403,6 +412,7 @@ _ecore_evas_buffer_cb_key_down(void *data, Evas *e, Evas_Object *obj EINA_UNUSED
 
    ee = data;
    ev = event_info;
+   if (!ee->evas) return;
    _ecore_evas_buffer_transfer_modifiers_locks(e, ee->evas);
    evas_event_feed_key_down(ee->evas, ev->keyname, ev->key, ev->string, ev->compose, ev->timestamp, NULL);
 }
@@ -415,6 +425,7 @@ _ecore_evas_buffer_cb_key_up(void *data, Evas *e, Evas_Object *obj EINA_UNUSED,
 
    ee = data;
    ev = event_info;
+   if (!ee->evas) return;
    _ecore_evas_buffer_transfer_modifiers_locks(e, ee->evas);
    evas_event_feed_key_up(ee->evas, ev->keyname, ev->key, ev->string, ev->compose, ev->timestamp, NULL);
 }
@@ -425,6 +436,7 @@ _ecore_evas_buffer_cb_focus_in(void *data, Evas *e EINA_UNUSED, Evas_Object *obj
    Ecore_Evas *ee;
 
    ee = data;
+   if (!ee->evas) return;
    _ecore_evas_focus_device_set(ee, NULL, EINA_TRUE);
 }
 
@@ -434,6 +446,7 @@ _ecore_evas_buffer_cb_focus_out(void *data, Evas *e EINA_UNUSED, Evas_Object *ob
    Ecore_Evas *ee;
 
    ee = data;
+   if (!ee->evas) return;
    _ecore_evas_focus_device_set(ee, NULL, EINA_FALSE);
 }