From 5dad2c9cb5d578bfb69f830791e41ca4b14f5b30 Mon Sep 17 00:00:00 2001 From: nash Date: Sun, 13 Feb 2011 00:27:03 +0000 Subject: [PATCH] Fix the semicolon, and small optimisation. git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/evas@56975 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- ChangeLog | 9 +++++++++ src/lib/canvas/evas_object_image.c | 12 ++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index e3a3972..8496135 100644 --- a/ChangeLog +++ b/ChangeLog @@ -74,3 +74,12 @@ region which will always be sane, and even has insanity checks now. At worst you'll get an unrendered image if the values are silly and some slowness. No crashes. + +2011-02-13 Brett Nash (nash@nash.id.au) + + * Fix crash when deleting proxies. This _technically_ breaks + evas engines which realloc engine data when a border is set. + Practically no engines do this. There is a comment there (and + if the engine does that border set won't work), in which case + a more complex work-around is possible. + diff --git a/src/lib/canvas/evas_object_image.c b/src/lib/canvas/evas_object_image.c index 8a076fe..488ba3d 100644 --- a/src/lib/canvas/evas_object_image.c +++ b/src/lib/canvas/evas_object_image.c @@ -341,7 +341,8 @@ evas_object_image_source_set(Evas_Object *obj, Evas_Object *src) if (o->cur.source == src) return EINA_TRUE; /* Kill the image if any */ - evas_object_image_file_set(obj, NULL, NULL); + if (o->cur.file || o->cur.key) + evas_object_image_file_set(obj, NULL, NULL); if (o->cur.source) { @@ -2831,9 +2832,12 @@ evas_object_image_render(Evas_Object *obj, void *output, void *context, void *su obj->layer->evas->engine.func->image_scale_hint_set(output, pixels, o->scale_hint); - o->engine_data = obj->layer->evas->engine.func->image_border_set(output, pixels, - o->cur.border.l, o->cur.border.r, - o->cur.border.t, o->cur.border.b); + /* This is technically a bug here: If the value is recreated + * (which is returned)it may be a new object, however exactly 0 + * of all the evas engines do this. */ + obj->layer->evas->engine.func->image_border_set(output, pixels, + o->cur.border.l, o->cur.border.r, + o->cur.border.t, o->cur.border.b); idx = evas_object_image_figure_x_fill(obj, o->cur.fill.x, o->cur.fill.w, &idw); idy = evas_object_image_figure_y_fill(obj, o->cur.fill.y, o->cur.fill.h, &idh); if (idw < 1) idw = 1; -- 2.7.4