summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>2020-05-09 14:02:04 +0100
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>2020-05-09 14:02:04 +0100
commitddcc7ab82514b73f9c3a8b1cc933761ca04ff5d0 (patch)
tree68e8221aab942f17792f4fd6130e751cd08462a7
parent27630114ef034ca15711d8565e4777a1519a7cd6 (diff)
evas + gl - fix callback-to-app-changes-state issue with pixel data
so if we call a callback that has e do something like set new pixel data in a pixel data provider and we do it from the is pixel inside call ebcause pixels were marked as dirty - pixels may no longer exist after that, so re-get to make sure and handle properly. this was found with tiling + e + shaped windows + moving them around in tiling. it's a valid efl bug though. @fix
-rw-r--r--src/lib/evas/canvas/evas_image_legacy.c3
-rw-r--r--src/lib/evas/canvas/evas_object_image.c3
2 files changed, 4 insertions, 2 deletions
diff --git a/src/lib/evas/canvas/evas_image_legacy.c b/src/lib/evas/canvas/evas_image_legacy.c
index d1dcf933ee..4901c3aeb5 100644
--- a/src/lib/evas/canvas/evas_image_legacy.c
+++ b/src/lib/evas/canvas/evas_image_legacy.c
@@ -673,6 +673,7 @@ evas_object_image_data_set(Eo *eo_obj, void *data)
673 if (o->engine_data) 673 if (o->engine_data)
674 { 674 {
675 ENFN->image_free(ENC, o->engine_data); 675 ENFN->image_free(ENC, o->engine_data);
676 o->engine_data = NULL;
676 o->changed = EINA_TRUE; 677 o->changed = EINA_TRUE;
677 evas_object_change(eo_obj, obj); 678 evas_object_change(eo_obj, obj);
678 } 679 }
@@ -687,8 +688,6 @@ evas_object_image_data_set(Eo *eo_obj, void *data)
687 state_write->image.stride = 0; 688 state_write->image.stride = 0;
688 } 689 }
689 EINA_COW_IMAGE_STATE_WRITE_END(o, state_write); 690 EINA_COW_IMAGE_STATE_WRITE_END(o, state_write);
690
691 o->engine_data = NULL;
692 } 691 }
693/* FIXME - in engine call above 692/* FIXME - in engine call above
694 if (o->engine_data) 693 if (o->engine_data)
diff --git a/src/lib/evas/canvas/evas_object_image.c b/src/lib/evas/canvas/evas_object_image.c
index 8d714035a6..cad6291286 100644
--- a/src/lib/evas/canvas/evas_object_image.c
+++ b/src/lib/evas/canvas/evas_object_image.c
@@ -3514,6 +3514,9 @@ evas_object_image_is_inside(Evas_Object *eo_obj,
3514 o->pixels->func.get_pixels(o->pixels->func.get_pixels_data, eo_obj); 3514 o->pixels->func.get_pixels(o->pixels->func.get_pixels_data, eo_obj);
3515 if (ENFN->gl_get_pixels_post) 3515 if (ENFN->gl_get_pixels_post)
3516 ENFN->gl_get_pixels_post(ENC, output); 3516 ENFN->gl_get_pixels_post(ENC, output);
3517 pixels = _evas_image_pixels_get(eo_obj, obj, ENC, output, NULL, NULL, 0, 0,
3518 &imagew, &imageh, &uvw, &uvh, EINA_TRUE, EINA_FALSE);
3519 if (!pixels) return is_inside;
3517 } 3520 }
3518 } 3521 }
3519 3522