summaryrefslogtreecommitdiff
path: root/src/lib/evas/canvas
diff options
context:
space:
mode:
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>2015-02-10 20:44:38 +0900
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>2015-02-12 11:06:40 +0900
commit7c5f92d702e2534b7b664d2b20d060dcac5fa6e6 (patch)
tree79e7afb25d05574d63275dee05204f155eb38011 /src/lib/evas/canvas
parent9b24d378a39850f20bc84a0a533bb915897c3ef6 (diff)
evas - render - have lock point to allow for async obj walk + update add
this adds a lock for when walking all the objects to generate render commands for an async render. this allows even the object tree walk plus update area caluclation to be moved off into async if every oject that can change canvas state actually does so correctly. this change adds all those lock block calls to synchronise with an async object tree walk.
Diffstat (limited to '')
-rw-r--r--src/lib/evas/canvas/evas_3d_camera.c6
-rw-r--r--src/lib/evas/canvas/evas_3d_light.c14
-rw-r--r--src/lib/evas/canvas/evas_3d_material.c13
-rw-r--r--src/lib/evas/canvas/evas_3d_mesh.c29
-rw-r--r--src/lib/evas/canvas/evas_3d_node.c20
-rw-r--r--src/lib/evas/canvas/evas_3d_object.c5
-rw-r--r--src/lib/evas/canvas/evas_3d_scene.c17
-rw-r--r--src/lib/evas/canvas/evas_3d_texture.c16
-rw-r--r--src/lib/evas/canvas/evas_clip.c8
-rw-r--r--src/lib/evas/canvas/evas_font_dir.c6
-rw-r--r--src/lib/evas/canvas/evas_layer.c5
-rw-r--r--src/lib/evas/canvas/evas_main.c15
-rw-r--r--src/lib/evas/canvas/evas_map.c3
-rw-r--r--src/lib/evas/canvas/evas_object_image.c91
-rw-r--r--src/lib/evas/canvas/evas_object_line.c1
-rw-r--r--src/lib/evas/canvas/evas_object_main.c19
-rw-r--r--src/lib/evas/canvas/evas_object_polygon.c3
-rw-r--r--src/lib/evas/canvas/evas_object_smart.c24
-rw-r--r--src/lib/evas/canvas/evas_object_text.c40
-rw-r--r--src/lib/evas/canvas/evas_object_textblock.c155
-rw-r--r--src/lib/evas/canvas/evas_object_textgrid.c15
-rw-r--r--src/lib/evas/canvas/evas_out.c18
-rw-r--r--src/lib/evas/canvas/evas_render.c13
-rw-r--r--src/lib/evas/canvas/evas_stack.c4
24 files changed, 465 insertions, 75 deletions
diff --git a/src/lib/evas/canvas/evas_3d_camera.c b/src/lib/evas/canvas/evas_3d_camera.c
index c6da2d3..b72c173 100644
--- a/src/lib/evas/canvas/evas_3d_camera.c
+++ b/src/lib/evas/canvas/evas_3d_camera.c
@@ -15,6 +15,7 @@ _camera_node_change_notify(const Eina_Hash *hash EINA_UNUSED, const void *key,
15EOLIAN static void 15EOLIAN static void
16_evas_3d_camera_evas_3d_object_change_notify(Eo *obj,Evas_3D_Camera_Data *pd, Evas_3D_State state EINA_UNUSED, Evas_3D_Object *ref EINA_UNUSED) 16_evas_3d_camera_evas_3d_object_change_notify(Eo *obj,Evas_3D_Camera_Data *pd, Evas_3D_State state EINA_UNUSED, Evas_3D_Object *ref EINA_UNUSED)
17{ 17{
18 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
18 if (pd->nodes) eina_hash_foreach(pd->nodes, _camera_node_change_notify, obj); 19 if (pd->nodes) eina_hash_foreach(pd->nodes, _camera_node_change_notify, obj);
19} 20}
20 21
@@ -74,6 +75,7 @@ EOLIAN static void
74_evas_3d_camera_eo_base_destructor(Eo *obj, 75_evas_3d_camera_eo_base_destructor(Eo *obj,
75 Evas_3D_Camera_Data *pd) 76 Evas_3D_Camera_Data *pd)
76{ 77{
78 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
77 //evas_3d_object_unreference(&pd->base); 79 //evas_3d_object_unreference(&pd->base);
78 if (pd->nodes) eina_hash_free(pd->nodes); 80 if (pd->nodes) eina_hash_free(pd->nodes);
79 eo_do_super(obj, MY_CLASS, eo_destructor()); 81 eo_do_super(obj, MY_CLASS, eo_destructor());
@@ -93,6 +95,7 @@ EOLIAN static void
93_evas_3d_camera_projection_matrix_set(Eo *obj, Evas_3D_Camera_Data *pd, 95_evas_3d_camera_projection_matrix_set(Eo *obj, Evas_3D_Camera_Data *pd,
94 const Evas_Real *matrix) 96 const Evas_Real *matrix)
95{ 97{
98 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
96 evas_mat4_array_set(&pd->projection, matrix); 99 evas_mat4_array_set(&pd->projection, matrix);
97 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_CAMERA_PROJECTION, NULL)); 100 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_CAMERA_PROJECTION, NULL));
98} 101}
@@ -116,6 +119,7 @@ _evas_3d_camera_projection_perspective_set(Eo *obj, Evas_3D_Camera_Data *pd,
116 ymax = dnear * (Evas_Real)tan((double)fovy * M_PI / 360.0); 119 ymax = dnear * (Evas_Real)tan((double)fovy * M_PI / 360.0);
117 xmax = ymax * aspect; 120 xmax = ymax * aspect;
118 121
122 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
119 evas_mat4_frustum_set(&pd->projection, -xmax, xmax, -ymax, ymax, dnear, dfar); 123 evas_mat4_frustum_set(&pd->projection, -xmax, xmax, -ymax, ymax, dnear, dfar);
120 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_CAMERA_PROJECTION, NULL)); 124 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_CAMERA_PROJECTION, NULL));
121} 125}
@@ -126,6 +130,7 @@ _evas_3d_camera_projection_frustum_set(Eo *obj, Evas_3D_Camera_Data *pd,
126 Evas_Real bottom, Evas_Real top, 130 Evas_Real bottom, Evas_Real top,
127 Evas_Real dnear, Evas_Real dfar) 131 Evas_Real dnear, Evas_Real dfar)
128{ 132{
133 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
129 evas_mat4_frustum_set(&pd->projection, left, right, bottom, top, dnear, dfar); 134 evas_mat4_frustum_set(&pd->projection, left, right, bottom, top, dnear, dfar);
130 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_CAMERA_PROJECTION, NULL)); 135 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_CAMERA_PROJECTION, NULL));
131} 136}
@@ -136,6 +141,7 @@ _evas_3d_camera_projection_ortho_set(Eo *obj, Evas_3D_Camera_Data *pd,
136 Evas_Real bottom, Evas_Real top, 141 Evas_Real bottom, Evas_Real top,
137 Evas_Real dnear, Evas_Real dfar) 142 Evas_Real dnear, Evas_Real dfar)
138{ 143{
144 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
139 evas_mat4_ortho_set(&pd->projection, left, right, bottom, top, dnear, dfar); 145 evas_mat4_ortho_set(&pd->projection, left, right, bottom, top, dnear, dfar);
140 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_CAMERA_PROJECTION, NULL)); 146 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_CAMERA_PROJECTION, NULL));
141} 147}
diff --git a/src/lib/evas/canvas/evas_3d_light.c b/src/lib/evas/canvas/evas_3d_light.c
index f9ca75b..48abf0f 100644
--- a/src/lib/evas/canvas/evas_3d_light.c
+++ b/src/lib/evas/canvas/evas_3d_light.c
@@ -15,6 +15,7 @@ _light_node_change_notify(const Eina_Hash *hash EINA_UNUSED, const void *key,
15EOLIAN static void 15EOLIAN static void
16_evas_3d_light_evas_3d_object_change_notify(Eo *obj, Evas_3D_Light_Data *pd, Evas_3D_State state EINA_UNUSED, Evas_3D_Object *ref EINA_UNUSED) 16_evas_3d_light_evas_3d_object_change_notify(Eo *obj, Evas_3D_Light_Data *pd, Evas_3D_State state EINA_UNUSED, Evas_3D_Object *ref EINA_UNUSED)
17{ 17{
18 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
18 if (pd->nodes) 19 if (pd->nodes)
19 eina_hash_foreach(pd->nodes, _light_node_change_notify, obj); 20 eina_hash_foreach(pd->nodes, _light_node_change_notify, obj);
20} 21}
@@ -97,6 +98,7 @@ _evas_3d_light_eo_base_constructor(Eo *obj, Evas_3D_Light_Data *pd)
97EOLIAN static void 98EOLIAN static void
98_evas_3d_light_eo_base_destructor(Eo *obj, Evas_3D_Light_Data *pd) 99_evas_3d_light_eo_base_destructor(Eo *obj, Evas_3D_Light_Data *pd)
99{ 100{
101 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
100 if (pd->nodes) 102 if (pd->nodes)
101 eina_hash_free(pd->nodes); 103 eina_hash_free(pd->nodes);
102 eo_do_super(obj, MY_CLASS, eo_destructor()); 104 eo_do_super(obj, MY_CLASS, eo_destructor());
@@ -106,6 +108,7 @@ _evas_3d_light_eo_base_destructor(Eo *obj, Evas_3D_Light_Data *pd)
106EOLIAN static void 108EOLIAN static void
107_evas_3d_light_directional_set(Eo *obj, Evas_3D_Light_Data *pd, Eina_Bool directional) 109_evas_3d_light_directional_set(Eo *obj, Evas_3D_Light_Data *pd, Eina_Bool directional)
108{ 110{
111 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
109 if (pd->directional != directional) 112 if (pd->directional != directional)
110 { 113 {
111 pd->directional = directional; 114 pd->directional = directional;
@@ -122,6 +125,7 @@ _evas_3d_light_directional_get(Eo *obj EINA_UNUSED, Evas_3D_Light_Data *pd)
122EOLIAN static void 125EOLIAN static void
123_evas_3d_light_ambient_set(Eo *obj, Evas_3D_Light_Data *pd, Evas_Real r, Evas_Real g, Evas_Real b, Evas_Real a) 126_evas_3d_light_ambient_set(Eo *obj, Evas_3D_Light_Data *pd, Evas_Real r, Evas_Real g, Evas_Real b, Evas_Real a)
124{ 127{
128 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
125 pd->ambient.r = r; 129 pd->ambient.r = r;
126 pd->ambient.g = g; 130 pd->ambient.g = g;
127 pd->ambient.b = b; 131 pd->ambient.b = b;
@@ -142,6 +146,7 @@ _evas_3d_light_ambient_get(Eo *obj EINA_UNUSED, Evas_3D_Light_Data *pd, Evas_Rea
142EOLIAN static void 146EOLIAN static void
143_evas_3d_light_diffuse_set(Eo *obj, Evas_3D_Light_Data *pd, Evas_Real r, Evas_Real g, Evas_Real b, Evas_Real a) 147_evas_3d_light_diffuse_set(Eo *obj, Evas_3D_Light_Data *pd, Evas_Real r, Evas_Real g, Evas_Real b, Evas_Real a)
144{ 148{
149 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
145 pd->diffuse.r = r; 150 pd->diffuse.r = r;
146 pd->diffuse.g = g; 151 pd->diffuse.g = g;
147 pd->diffuse.b = b; 152 pd->diffuse.b = b;
@@ -162,6 +167,7 @@ _evas_3d_light_diffuse_get(Eo *obj EINA_UNUSED, Evas_3D_Light_Data *pd, Evas_Rea
162EOLIAN static void 167EOLIAN static void
163_evas_3d_light_specular_set(Eo *obj, Evas_3D_Light_Data *pd, Evas_Real r, Evas_Real g, Evas_Real b, Evas_Real a) 168_evas_3d_light_specular_set(Eo *obj, Evas_3D_Light_Data *pd, Evas_Real r, Evas_Real g, Evas_Real b, Evas_Real a)
164{ 169{
170 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
165 pd->specular.r = r; 171 pd->specular.r = r;
166 pd->specular.g = g; 172 pd->specular.g = g;
167 pd->specular.b = b; 173 pd->specular.b = b;
@@ -182,6 +188,7 @@ _evas_3d_light_specular_get(Eo *obj EINA_UNUSED, Evas_3D_Light_Data *pd, Evas_Re
182EOLIAN static void 188EOLIAN static void
183_evas_3d_light_spot_exponent_set(Eo *obj, Evas_3D_Light_Data *pd, Evas_Real exponent) 189_evas_3d_light_spot_exponent_set(Eo *obj, Evas_3D_Light_Data *pd, Evas_Real exponent)
184{ 190{
191 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
185 pd->spot_exp = exponent; 192 pd->spot_exp = exponent;
186 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_LIGHT_SPOT_EXP, NULL)); 193 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_LIGHT_SPOT_EXP, NULL));
187} 194}
@@ -195,6 +202,7 @@ _evas_3d_light_spot_exponent_get(Eo *obj EINA_UNUSED, Evas_3D_Light_Data *pd)
195EOLIAN static void 202EOLIAN static void
196_evas_3d_light_spot_cutoff_set(Eo *obj, Evas_3D_Light_Data *pd, Evas_Real cutoff) 203_evas_3d_light_spot_cutoff_set(Eo *obj, Evas_3D_Light_Data *pd, Evas_Real cutoff)
197{ 204{
205 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
198 pd->spot_cutoff = cutoff; 206 pd->spot_cutoff = cutoff;
199 pd->spot_cutoff_cos = cos(cutoff * M_PI / 180.0); 207 pd->spot_cutoff_cos = cos(cutoff * M_PI / 180.0);
200 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_LIGHT_SPOT_CUTOFF, NULL)); 208 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_LIGHT_SPOT_CUTOFF, NULL));
@@ -209,6 +217,7 @@ _evas_3d_light_spot_cutoff_get(Eo *obj EINA_UNUSED, Evas_3D_Light_Data *pd)
209EOLIAN static void 217EOLIAN static void
210_evas_3d_light_attenuation_set(Eo *obj, Evas_3D_Light_Data *pd, Evas_Real constant, Evas_Real linear, Evas_Real quadratic) 218_evas_3d_light_attenuation_set(Eo *obj, Evas_3D_Light_Data *pd, Evas_Real constant, Evas_Real linear, Evas_Real quadratic)
211{ 219{
220 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
212 pd->atten_const = constant; 221 pd->atten_const = constant;
213 pd->atten_linear = linear; 222 pd->atten_linear = linear;
214 pd->atten_quad = quadratic; 223 pd->atten_quad = quadratic;
@@ -226,6 +235,7 @@ _evas_3d_light_attenuation_get(Eo *obj EINA_UNUSED, Evas_3D_Light_Data *pd, Evas
226EOLIAN static void 235EOLIAN static void
227_evas_3d_light_attenuation_enable_set(Eo *obj, Evas_3D_Light_Data *pd, Eina_Bool enable) 236_evas_3d_light_attenuation_enable_set(Eo *obj, Evas_3D_Light_Data *pd, Eina_Bool enable)
228{ 237{
238 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
229 if (pd->enable_attenuation != enable) 239 if (pd->enable_attenuation != enable)
230 { 240 {
231 pd->enable_attenuation = enable; 241 pd->enable_attenuation = enable;
@@ -243,6 +253,7 @@ EOLIAN static void
243_evas_3d_light_projection_matrix_set(Eo *obj, Evas_3D_Light_Data *pd, 253_evas_3d_light_projection_matrix_set(Eo *obj, Evas_3D_Light_Data *pd,
244 const Evas_Real *matrix) 254 const Evas_Real *matrix)
245{ 255{
256 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
246 evas_mat4_array_set(&pd->projection, matrix); 257 evas_mat4_array_set(&pd->projection, matrix);
247 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_LIGHT_PROJECTION, NULL)); 258 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_LIGHT_PROJECTION, NULL));
248} 259}
@@ -266,6 +277,7 @@ _evas_3d_light_projection_perspective_set(Eo *obj, Evas_3D_Light_Data *pd,
266 ymax = dnear * (Evas_Real)tan((double)fovy * M_PI / 360.0); 277 ymax = dnear * (Evas_Real)tan((double)fovy * M_PI / 360.0);
267 xmax = ymax * aspect; 278 xmax = ymax * aspect;
268 279
280 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
269 evas_mat4_frustum_set(&pd->projection, -xmax, xmax, -ymax, ymax, dnear, dfar); 281 evas_mat4_frustum_set(&pd->projection, -xmax, xmax, -ymax, ymax, dnear, dfar);
270 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_LIGHT_PROJECTION, NULL)); 282 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_LIGHT_PROJECTION, NULL));
271} 283}
@@ -276,6 +288,7 @@ _evas_3d_light_projection_frustum_set(Eo *obj, Evas_3D_Light_Data *pd,
276 Evas_Real bottom, Evas_Real top, 288 Evas_Real bottom, Evas_Real top,
277 Evas_Real dnear, Evas_Real dfar) 289 Evas_Real dnear, Evas_Real dfar)
278{ 290{
291 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
279 evas_mat4_frustum_set(&pd->projection, left, right, bottom, top, dnear, dfar); 292 evas_mat4_frustum_set(&pd->projection, left, right, bottom, top, dnear, dfar);
280 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_LIGHT_PROJECTION, NULL)); 293 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_LIGHT_PROJECTION, NULL));
281} 294}
@@ -286,6 +299,7 @@ _evas_3d_light_projection_ortho_set(Eo *obj, Evas_3D_Light_Data *pd,
286 Evas_Real bottom, Evas_Real top, 299 Evas_Real bottom, Evas_Real top,
287 Evas_Real dnear, Evas_Real dfar) 300 Evas_Real dnear, Evas_Real dfar)
288{ 301{
302 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
289 evas_mat4_ortho_set(&pd->projection, left, right, bottom, top, dnear, dfar); 303 evas_mat4_ortho_set(&pd->projection, left, right, bottom, top, dnear, dfar);
290 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_LIGHT_PROJECTION, NULL)); 304 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_LIGHT_PROJECTION, NULL));
291} 305}
diff --git a/src/lib/evas/canvas/evas_3d_material.c b/src/lib/evas/canvas/evas_3d_material.c
index 8cd325d..ca0b403 100644
--- a/src/lib/evas/canvas/evas_3d_material.c
+++ b/src/lib/evas/canvas/evas_3d_material.c
@@ -15,14 +15,16 @@ _material_mesh_change_notify(const Eina_Hash *hash EINA_UNUSED, const void *key,
15EOLIAN static void 15EOLIAN static void
16_evas_3d_material_evas_3d_object_change_notify(Eo *obj, Evas_3D_Material_Data *pd, Evas_3D_State state EINA_UNUSED, Evas_3D_Object *ref EINA_UNUSED) 16_evas_3d_material_evas_3d_object_change_notify(Eo *obj, Evas_3D_Material_Data *pd, Evas_3D_State state EINA_UNUSED, Evas_3D_Object *ref EINA_UNUSED)
17{ 17{
18 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
18 if (pd->meshes) 19 if (pd->meshes)
19 eina_hash_foreach(pd->meshes, _material_mesh_change_notify, obj); 20 eina_hash_foreach(pd->meshes, _material_mesh_change_notify, obj);
20} 21}
21 22
22EOLIAN static void 23EOLIAN static void
23_evas_3d_material_evas_3d_object_update_notify(Eo *obj EINA_UNUSED, Evas_3D_Material_Data *pd) 24_evas_3d_material_evas_3d_object_update_notify(Eo *obj, Evas_3D_Material_Data *pd)
24{ 25{
25 int i; 26 int i;
27 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
26 for (i = 0; i < EVAS_3D_MATERIAL_ATTRIB_COUNT; i++) 28 for (i = 0; i < EVAS_3D_MATERIAL_ATTRIB_COUNT; i++)
27 { 29 {
28 if (pd->attribs[i].enable) 30 if (pd->attribs[i].enable)
@@ -106,6 +108,7 @@ _evas_3d_material_eo_base_destructor(Eo *obj, Evas_3D_Material_Data *pd)
106{ 108{
107 int i; 109 int i;
108 110
111 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
109 if (pd->meshes) 112 if (pd->meshes)
110 eina_hash_free(pd->meshes); 113 eina_hash_free(pd->meshes);
111 114
@@ -121,8 +124,9 @@ _evas_3d_material_eo_base_destructor(Eo *obj, Evas_3D_Material_Data *pd)
121} 124}
122 125
123EOLIAN static void 126EOLIAN static void
124_evas_3d_material_enable_set(Eo *obj EINA_UNUSED, Evas_3D_Material_Data *pd, Evas_3D_Material_Attrib attrib, Eina_Bool enable) 127_evas_3d_material_enable_set(Eo *obj, Evas_3D_Material_Data *pd, Evas_3D_Material_Attrib attrib, Eina_Bool enable)
125{ 128{
129 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
126 pd->attribs[attrib].enable = enable; 130 pd->attribs[attrib].enable = enable;
127} 131}
128 132
@@ -135,6 +139,7 @@ _evas_3d_material_enable_get(Eo *obj EINA_UNUSED, Evas_3D_Material_Data *pd, Eva
135EOLIAN static void 139EOLIAN static void
136_evas_3d_material_color_set(Eo *obj, Evas_3D_Material_Data *pd, Evas_3D_Material_Attrib attrib, Evas_Real r, Evas_Real g, Evas_Real b, Evas_Real a) 140_evas_3d_material_color_set(Eo *obj, Evas_3D_Material_Data *pd, Evas_3D_Material_Attrib attrib, Evas_Real r, Evas_Real g, Evas_Real b, Evas_Real a)
137{ 141{
142 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
138 evas_color_set(&pd->attribs[attrib].color, r, g, b, a); 143 evas_color_set(&pd->attribs[attrib].color, r, g, b, a);
139 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_MATERIAL_COLOR, NULL)); 144 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_MATERIAL_COLOR, NULL));
140} 145}
@@ -149,8 +154,9 @@ _evas_3d_material_color_get(Eo *obj EINA_UNUSED, Evas_3D_Material_Data *pd, Evas
149} 154}
150 155
151EOLIAN static void 156EOLIAN static void
152_evas_3d_material_shininess_set(Eo *obj EINA_UNUSED, Evas_3D_Material_Data *pd, Evas_Real shininess) 157_evas_3d_material_shininess_set(Eo *obj, Evas_3D_Material_Data *pd, Evas_Real shininess)
153{ 158{
159 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
154 pd->shininess = shininess; 160 pd->shininess = shininess;
155} 161}
156 162
@@ -163,6 +169,7 @@ _evas_3d_material_shininess_get(Eo *obj EINA_UNUSED, Evas_3D_Material_Data *pd)
163EOLIAN static void 169EOLIAN static void
164_evas_3d_material_texture_set(Eo *obj, Evas_3D_Material_Data *pd, Evas_3D_Material_Attrib attrib, Evas_3D_Texture *texture) 170_evas_3d_material_texture_set(Eo *obj, Evas_3D_Material_Data *pd, Evas_3D_Material_Attrib attrib, Evas_3D_Texture *texture)
165{ 171{
172 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
166 if (pd->attribs[attrib].texture != texture) 173 if (pd->attribs[attrib].texture != texture)
167 { 174 {
168 if (pd->attribs[attrib].texture) 175 if (pd->attribs[attrib].texture)
diff --git a/src/lib/evas/canvas/evas_3d_mesh.c b/src/lib/evas/canvas/evas_3d_mesh.c
index 4430438..55b1d47 100644
--- a/src/lib/evas/canvas/evas_3d_mesh.c
+++ b/src/lib/evas/canvas/evas_3d_mesh.c
@@ -182,11 +182,12 @@ _evas_3d_mesh_evas_3d_object_change_notify(Eo *obj, Evas_3D_Mesh_Data *pd, Evas_
182} 182}
183 183
184EOLIAN static void 184EOLIAN static void
185_evas_3d_mesh_evas_3d_object_update_notify(Eo *obj EINA_UNUSED, Evas_3D_Mesh_Data *pd) 185_evas_3d_mesh_evas_3d_object_update_notify(Eo *obj, Evas_3D_Mesh_Data *pd)
186{ 186{
187 Eina_List *l; 187 Eina_List *l;
188 Evas_3D_Mesh_Frame *f; 188 Evas_3D_Mesh_Frame *f;
189 189
190 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
190 EINA_LIST_FOREACH(pd->frames, l, f) 191 EINA_LIST_FOREACH(pd->frames, l, f)
191 { 192 {
192 if (f->material) 193 if (f->material)
@@ -259,14 +260,16 @@ _evas_3d_mesh_eo_base_constructor(Eo *obj, Evas_3D_Mesh_Data *pd)
259EOLIAN static void 260EOLIAN static void
260_evas_3d_mesh_eo_base_destructor(Eo *obj, Evas_3D_Mesh_Data *pd) 261_evas_3d_mesh_eo_base_destructor(Eo *obj, Evas_3D_Mesh_Data *pd)
261{ 262{
263 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
262 //evas_3d_object_unreference(&pd->base); 264 //evas_3d_object_unreference(&pd->base);
263 _mesh_fini(pd); 265 _mesh_fini(pd);
264 eo_do_super(obj, MY_CLASS, eo_destructor()); 266 eo_do_super(obj, MY_CLASS, eo_destructor());
265} 267}
266 268
267EOLIAN static void 269EOLIAN static void
268_evas_3d_mesh_shade_mode_set(Eo *obj EINA_UNUSED, Evas_3D_Mesh_Data *pd, Evas_3D_Shade_Mode mode) 270_evas_3d_mesh_shade_mode_set(Eo *obj, Evas_3D_Mesh_Data *pd, Evas_3D_Shade_Mode mode)
269{ 271{
272 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
270 if (pd->shade_mode != mode) 273 if (pd->shade_mode != mode)
271 { 274 {
272 pd->shade_mode = mode; 275 pd->shade_mode = mode;
@@ -283,6 +286,7 @@ _evas_3d_mesh_shade_mode_get(Eo *obj EINA_UNUSED, Evas_3D_Mesh_Data *pd)
283EOLIAN static void 286EOLIAN static void
284_evas_3d_mesh_vertex_count_set(Eo *obj, Evas_3D_Mesh_Data *pd, unsigned int count) 287_evas_3d_mesh_vertex_count_set(Eo *obj, Evas_3D_Mesh_Data *pd, unsigned int count)
285{ 288{
289 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
286 pd->vertex_count = count; 290 pd->vertex_count = count;
287 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_MESH_VERTEX_COUNT, NULL)); 291 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_MESH_VERTEX_COUNT, NULL));
288} 292}
@@ -304,6 +308,7 @@ _evas_3d_mesh_frame_add(Eo *obj, Evas_3D_Mesh_Data *pd, int frame)
304 return; 308 return;
305 } 309 }
306 310
311 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
307 f = evas_3d_mesh_frame_new(obj); 312 f = evas_3d_mesh_frame_new(obj);
308 313
309 if (f == NULL) 314 if (f == NULL)
@@ -325,6 +330,7 @@ _evas_3d_mesh_frame_del(Eo *obj, Evas_3D_Mesh_Data *pd, int frame)
325 return; 330 return;
326 } 331 }
327 332
333 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
328 pd->frames = eina_list_remove(pd->frames, f); 334 pd->frames = eina_list_remove(pd->frames, f);
329 evas_3d_mesh_frame_free(f); 335 evas_3d_mesh_frame_free(f);
330 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_MESH_FRAME, NULL)); 336 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_MESH_FRAME, NULL));
@@ -344,6 +350,7 @@ _evas_3d_mesh_frame_material_set(Eo *obj, Evas_3D_Mesh_Data *pd, int frame, Evas
344 if (f->material == material) 350 if (f->material == material)
345 return; 351 return;
346 352
353 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
347 if (f->material) 354 if (f->material)
348 { 355 {
349 evas_3d_material_mesh_del(f->material, obj); 356 evas_3d_material_mesh_del(f->material, obj);
@@ -388,6 +395,7 @@ _evas_3d_mesh_frame_vertex_data_set(Eo *obj, Evas_3D_Mesh_Data *pd, int frame, E
388 return; 395 return;
389 } 396 }
390 397
398 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
391 if (attrib == EVAS_3D_VERTEX_POSITION) 399 if (attrib == EVAS_3D_VERTEX_POSITION)
392 { 400 {
393 int i = 0, j = 0, size = stride/sizeof(float); 401 int i = 0, j = 0, size = stride/sizeof(float);
@@ -471,6 +479,7 @@ _evas_3d_mesh_frame_vertex_data_copy_set(Eo *obj, Evas_3D_Mesh_Data *pd, int fra
471 return; 479 return;
472 } 480 }
473 481
482 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
474 if (attrib == EVAS_3D_VERTEX_POSITION) 483 if (attrib == EVAS_3D_VERTEX_POSITION)
475 { 484 {
476 element_count = 3; 485 element_count = 3;
@@ -599,6 +608,7 @@ _evas_3d_mesh_frame_vertex_data_map(Eo *obj EINA_UNUSED, Evas_3D_Mesh_Data *pd,
599 return NULL; 608 return NULL;
600 } 609 }
601 610
611 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
602 f->vertices[attrib].mapped = EINA_TRUE; 612 f->vertices[attrib].mapped = EINA_TRUE;
603 return f->vertices[attrib].data; 613 return f->vertices[attrib].data;
604} 614}
@@ -620,6 +630,7 @@ _evas_3d_mesh_frame_vertex_data_unmap(Eo *obj EINA_UNUSED, Evas_3D_Mesh_Data *pd
620 return; 630 return;
621 } 631 }
622 632
633 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
623 f->vertices[attrib].mapped = EINA_FALSE; 634 f->vertices[attrib].mapped = EINA_FALSE;
624} 635}
625 636
@@ -640,6 +651,7 @@ _evas_3d_mesh_frame_vertex_stride_get(Eo *obj EINA_UNUSED, Evas_3D_Mesh_Data *pd
640EOLIAN static void 651EOLIAN static void
641_evas_3d_mesh_index_data_set(Eo *obj, Evas_3D_Mesh_Data *pd, Evas_3D_Index_Format format, int count, const void *indices) 652_evas_3d_mesh_index_data_set(Eo *obj, Evas_3D_Mesh_Data *pd, Evas_3D_Index_Format format, int count, const void *indices)
642{ 653{
654 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
643 if (pd->owns_indices && pd->indices) 655 if (pd->owns_indices && pd->indices)
644 free(pd->indices); 656 free(pd->indices);
645 657
@@ -671,6 +683,7 @@ _evas_3d_mesh_index_data_copy_set(Eo *obj EINA_UNUSED, Evas_3D_Mesh_Data *pd, Ev
671 return; 683 return;
672 } 684 }
673 685
686 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
674 if (!pd->owns_indices || pd->index_size < size) 687 if (!pd->owns_indices || pd->index_size < size)
675 { 688 {
676 if (pd->owns_indices && pd->indices) 689 if (pd->owns_indices && pd->indices)
@@ -716,6 +729,7 @@ _evas_3d_mesh_index_data_map(Eo *obj EINA_UNUSED, Evas_3D_Mesh_Data *pd)
716 return NULL; 729 return NULL;
717 } 730 }
718 731
732 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
719 pd->index_mapped = EINA_TRUE; 733 pd->index_mapped = EINA_TRUE;
720 return pd->indices; 734 return pd->indices;
721} 735}
@@ -729,12 +743,14 @@ _evas_3d_mesh_index_data_unmap(Eo *obj EINA_UNUSED, Evas_3D_Mesh_Data *pd)
729 return; 743 return;
730 } 744 }
731 745
746 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
732 pd->index_mapped = EINA_FALSE; 747 pd->index_mapped = EINA_FALSE;
733} 748}
734 749
735EOLIAN static void 750EOLIAN static void
736_evas_3d_mesh_vertex_assembly_set(Eo *obj, Evas_3D_Mesh_Data *pd, Evas_3D_Vertex_Assembly assembly) 751_evas_3d_mesh_vertex_assembly_set(Eo *obj, Evas_3D_Mesh_Data *pd, Evas_3D_Vertex_Assembly assembly)
737{ 752{
753 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
738 pd->assembly = assembly; 754 pd->assembly = assembly;
739 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_MESH_VERTEX_ASSEMBLY, NULL)); 755 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_MESH_VERTEX_ASSEMBLY, NULL));
740} 756}
@@ -742,12 +758,14 @@ _evas_3d_mesh_vertex_assembly_set(Eo *obj, Evas_3D_Mesh_Data *pd, Evas_3D_Vertex
742EOLIAN static Evas_3D_Vertex_Assembly 758EOLIAN static Evas_3D_Vertex_Assembly
743_evas_3d_mesh_vertex_assembly_get(Eo *obj EINA_UNUSED, Evas_3D_Mesh_Data *pd) 759_evas_3d_mesh_vertex_assembly_get(Eo *obj EINA_UNUSED, Evas_3D_Mesh_Data *pd)
744{ 760{
761 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
745 return pd->assembly; 762 return pd->assembly;
746} 763}
747 764
748EOLIAN static void 765EOLIAN static void
749_evas_3d_mesh_fog_color_set(Eo *obj, Evas_3D_Mesh_Data *pd, Evas_Real r, Evas_Real g, Evas_Real b, Evas_Real a) 766_evas_3d_mesh_fog_color_set(Eo *obj, Evas_3D_Mesh_Data *pd, Evas_Real r, Evas_Real g, Evas_Real b, Evas_Real a)
750{ 767{
768 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
751 evas_color_set(&pd->fog_color, r, g, b, a); 769 evas_color_set(&pd->fog_color, r, g, b, a);
752 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_MESH_FOG, NULL)); 770 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_MESH_FOG, NULL));
753} 771}
@@ -765,6 +783,7 @@ _evas_3d_mesh_fog_color_get(Eo *obj EINA_UNUSED, Evas_3D_Mesh_Data *pd,
765EOLIAN static void 783EOLIAN static void
766_evas_3d_mesh_fog_enable_set(Eo *obj, Evas_3D_Mesh_Data *pd, Eina_Bool enabled) 784_evas_3d_mesh_fog_enable_set(Eo *obj, Evas_3D_Mesh_Data *pd, Eina_Bool enabled)
767{ 785{
786 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
768 pd->fog_enabled = enabled; 787 pd->fog_enabled = enabled;
769 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_MESH_FOG, NULL)); 788 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_MESH_FOG, NULL));
770} 789}
@@ -778,6 +797,7 @@ _evas_3d_mesh_fog_enable_get(Eo *obj EINA_UNUSED, Evas_3D_Mesh_Data *pd)
778EOLIAN static void 797EOLIAN static void
779_evas_3d_mesh_blending_enable_set(Eo *obj, Evas_3D_Mesh_Data *pd, Eina_Bool blending) 798_evas_3d_mesh_blending_enable_set(Eo *obj, Evas_3D_Mesh_Data *pd, Eina_Bool blending)
780{ 799{
800 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
781 pd->blending = blending; 801 pd->blending = blending;
782 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_MESH_BLENDING, NULL)); 802 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_MESH_BLENDING, NULL));
783} 803}
@@ -791,6 +811,7 @@ _evas_3d_mesh_blending_enable_get(Eo *obj EINA_UNUSED, Evas_3D_Mesh_Data *pd)
791EOLIAN static void 811EOLIAN static void
792_evas_3d_mesh_blending_func_set(Eo *obj, Evas_3D_Mesh_Data *pd, Evas_3D_Blend_Func sfactor, Evas_3D_Blend_Func dfactor) 812_evas_3d_mesh_blending_func_set(Eo *obj, Evas_3D_Mesh_Data *pd, Evas_3D_Blend_Func sfactor, Evas_3D_Blend_Func dfactor)
793{ 813{
814 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
794 pd->blend_sfactor = sfactor; 815 pd->blend_sfactor = sfactor;
795 pd->blend_dfactor = dfactor; 816 pd->blend_dfactor = dfactor;
796 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_MESH_BLENDING, NULL)); 817 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_MESH_BLENDING, NULL));
@@ -808,6 +829,7 @@ EOLIAN static void
808_evas_3d_mesh_mmap_set(Eo *obj, Evas_3D_Mesh_Data *pd, 829_evas_3d_mesh_mmap_set(Eo *obj, Evas_3D_Mesh_Data *pd,
809 Eina_File *file, const char *key EINA_UNUSED) 830 Eina_File *file, const char *key EINA_UNUSED)
810{ 831{
832 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
811 _mesh_fini(pd); 833 _mesh_fini(pd);
812 _mesh_init(pd); 834 _mesh_init(pd);
813 835
@@ -821,6 +843,7 @@ _evas_3d_mesh_efl_file_file_set(Eo *obj, Evas_3D_Mesh_Data *pd,
821 const char *file, 843 const char *file,
822 const char *key EINA_UNUSED) 844 const char *key EINA_UNUSED)
823{ 845{
846 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
824 _mesh_fini(pd); 847 _mesh_fini(pd);
825 _mesh_init(pd); 848 _mesh_init(pd);
826 849
@@ -838,6 +861,7 @@ _evas_3d_mesh_efl_file_save(Eo *obj, Evas_3D_Mesh_Data *pd,
838{ 861{
839 if ((file == NULL) || (obj == NULL) || (pd == NULL)) return EINA_FALSE; 862 if ((file == NULL) || (obj == NULL) || (pd == NULL)) return EINA_FALSE;
840 863
864 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
841 Evas_3D_Mesh_Frame *f = evas_3d_mesh_frame_find(pd, 0); 865 Evas_3D_Mesh_Frame *f = evas_3d_mesh_frame_find(pd, 0);
842 866
843 if (f == NULL) 867 if (f == NULL)
@@ -974,6 +998,7 @@ _evas_3d_mesh_color_pick_enable_get(Eo *obj EINA_UNUSED, Evas_3D_Mesh_Data *pd)
974EOLIAN static Eina_Bool 998EOLIAN static Eina_Bool
975_evas_3d_mesh_color_pick_enable_set(Eo *obj, Evas_3D_Mesh_Data *pd, Eina_Bool _enabled) 999_evas_3d_mesh_color_pick_enable_set(Eo *obj, Evas_3D_Mesh_Data *pd, Eina_Bool _enabled)
976{ 1000{
1001 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
977 if (pd->color_pick_enabled != _enabled) 1002 if (pd->color_pick_enabled != _enabled)
978 pd->color_pick_enabled = _enabled; 1003 pd->color_pick_enabled = _enabled;
979 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_MESH_COLOR_PICK, NULL)); 1004 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_MESH_COLOR_PICK, NULL));
diff --git a/src/lib/evas/canvas/evas_3d_node.c b/src/lib/evas/canvas/evas_3d_node.c
index 62e2c1c..ead5694 100644
--- a/src/lib/evas/canvas/evas_3d_node.c
+++ b/src/lib/evas/canvas/evas_3d_node.c
@@ -85,6 +85,7 @@ _evas_3d_node_evas_3d_object_change_notify(Eo *obj, Evas_3D_Node_Data *pd, Evas_
85 Eina_Bool scale; 85 Eina_Bool scale;
86 Eina_Bool parent_change; 86 Eina_Bool parent_change;
87 87
88 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
88 /* Notify all scenes using this node that it has changed. */ 89 /* Notify all scenes using this node that it has changed. */
89 if (pd->scenes_root) 90 if (pd->scenes_root)
90 eina_hash_foreach(pd->scenes_root, _node_scene_root_change_notify, obj); 91 eina_hash_foreach(pd->scenes_root, _node_scene_root_change_notify, obj);
@@ -457,6 +458,7 @@ _node_update_done(Evas_3D_Node *obj, void *data EINA_UNUSED)
457EOLIAN static void 458EOLIAN static void
458_evas_3d_node_evas_3d_object_update_notify(Eo *obj, Evas_3D_Node_Data *pd EINA_UNUSED) 459_evas_3d_node_evas_3d_object_update_notify(Eo *obj, Evas_3D_Node_Data *pd EINA_UNUSED)
459{ 460{
461 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
460 /* Update transform. */ 462 /* Update transform. */
461 evas_3d_node_tree_traverse(obj, EVAS_3D_TREE_TRAVERSE_LEVEL_ORDER, EINA_FALSE, 463 evas_3d_node_tree_traverse(obj, EVAS_3D_TREE_TRAVERSE_LEVEL_ORDER, EINA_FALSE,
462 _node_transform_update, NULL); 464 _node_transform_update, NULL);
@@ -933,6 +935,7 @@ _evas_3d_node_member_add(Eo *obj, Evas_3D_Node_Data *pd, Evas_3D_Node *member)
933 ERR("Failed to add a member node (adding to itself)."); 935 ERR("Failed to add a member node (adding to itself).");
934 return; 936 return;
935 } 937 }
938 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
936 Evas_3D_Node_Data *pdmember = eo_data_scope_get(member, MY_CLASS); 939 Evas_3D_Node_Data *pdmember = eo_data_scope_get(member, MY_CLASS);
937 if (pdmember->parent == obj) 940 if (pdmember->parent == obj)
938 return; 941 return;
@@ -973,6 +976,7 @@ _evas_3d_node_member_del(Eo *obj, Evas_3D_Node_Data *pd, Evas_3D_Node *member)
973 return; 976 return;
974 } 977 }
975 978
979 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
976 /* Delete the member node. */ 980 /* Delete the member node. */
977 pd->members = eina_list_remove(pd->members, member); 981 pd->members = eina_list_remove(pd->members, member);
978 pdmember->parent = NULL; 982 pdmember->parent = NULL;
@@ -996,12 +1000,14 @@ _evas_3d_node_parent_get(Eo *obj EINA_UNUSED, Evas_3D_Node_Data *pd)
996EOLIAN static const Eina_List * 1000EOLIAN static const Eina_List *
997_evas_3d_node_member_list_get(Eo *obj EINA_UNUSED, Evas_3D_Node_Data *pd) 1001_evas_3d_node_member_list_get(Eo *obj EINA_UNUSED, Evas_3D_Node_Data *pd)
998{ 1002{
1003 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
999 return pd->members; 1004 return pd->members;
1000} 1005}
1001 1006
1002EOLIAN static void 1007EOLIAN static void
1003_evas_3d_node_position_set(Eo *obj, Evas_3D_Node_Data *pd, Evas_Real x, Evas_Real y, Evas_Real z) 1008_evas_3d_node_position_set(Eo *obj, Evas_3D_Node_Data *pd, Evas_Real x, Evas_Real y, Evas_Real z)
1004{ 1009{
1010 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
1005 pd->position.x = x; 1011 pd->position.x = x;
1006 pd->position.y = y; 1012 pd->position.y = y;
1007 pd->position.z = z; 1013 pd->position.z = z;
@@ -1012,6 +1018,7 @@ _evas_3d_node_position_set(Eo *obj, Evas_3D_Node_Data *pd, Evas_Real x, Evas_Rea
1012EOLIAN static void 1018EOLIAN static void
1013_evas_3d_node_orientation_set(Eo *obj, Evas_3D_Node_Data *pd, Evas_Real x, Evas_Real y, Evas_Real z, Evas_Real w) 1019_evas_3d_node_orientation_set(Eo *obj, Evas_3D_Node_Data *pd, Evas_Real x, Evas_Real y, Evas_Real z, Evas_Real w)
1014{ 1020{
1021 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
1015 pd->orientation.x = x; 1022 pd->orientation.x = x;
1016 pd->orientation.y = y; 1023 pd->orientation.y = y;
1017 pd->orientation.z = z; 1024 pd->orientation.z = z;
@@ -1028,6 +1035,7 @@ _evas_3d_node_orientation_angle_axis_set(Eo *obj, Evas_3D_Node_Data *pd,
1028 Evas_Real s = sin(half_angle); 1035 Evas_Real s = sin(half_angle);
1029 Evas_Vec3 axis; 1036 Evas_Vec3 axis;
1030 1037
1038 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
1031 evas_vec3_set(&axis, x, y, z); 1039 evas_vec3_set(&axis, x, y, z);
1032 evas_vec3_normalize(&axis, &axis); 1040 evas_vec3_normalize(&axis, &axis);
1033 1041
@@ -1042,6 +1050,7 @@ _evas_3d_node_orientation_angle_axis_set(Eo *obj, Evas_3D_Node_Data *pd,
1042EOLIAN static void 1050EOLIAN static void
1043_evas_3d_node_scale_set(Eo *obj, Evas_3D_Node_Data *pd, Evas_Real x, Evas_Real y, Evas_Real z) 1051_evas_3d_node_scale_set(Eo *obj, Evas_3D_Node_Data *pd, Evas_Real x, Evas_Real y, Evas_Real z)
1044{ 1052{
1053 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
1045 pd->scale.x = x; 1054 pd->scale.x = x;
1046 pd->scale.y = y; 1055 pd->scale.y = y;
1047 pd->scale.z = z; 1056 pd->scale.z = z;
@@ -1134,6 +1143,7 @@ _evas_3d_node_scale_get(Eo *obj, Evas_3D_Node_Data *pd, Evas_3D_Space space,
1134EOLIAN static void 1143EOLIAN static void
1135_evas_3d_node_position_inherit_set(Eo *obj, Evas_3D_Node_Data *pd, Eina_Bool inherit) 1144_evas_3d_node_position_inherit_set(Eo *obj, Evas_3D_Node_Data *pd, Eina_Bool inherit)
1136{ 1145{
1146 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
1137 pd->position_inherit = inherit; 1147 pd->position_inherit = inherit;
1138 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_NODE_TRANSFORM_POSITION, NULL)); 1148 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_NODE_TRANSFORM_POSITION, NULL));
1139} 1149}
@@ -1141,6 +1151,7 @@ _evas_3d_node_position_inherit_set(Eo *obj, Evas_3D_Node_Data *pd, Eina_Bool inh
1141EOLIAN static void 1151EOLIAN static void
1142_evas_3d_node_orientation_inherit_set(Eo *obj, Evas_3D_Node_Data *pd, Eina_Bool inherit) 1152_evas_3d_node_orientation_inherit_set(Eo *obj, Evas_3D_Node_Data *pd, Eina_Bool inherit)
1143{ 1153{
1154 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
1144 pd->orientation_inherit = inherit; 1155 pd->orientation_inherit = inherit;
1145 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_NODE_TRANSFORM_ORIENTATION, NULL)); 1156 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_NODE_TRANSFORM_ORIENTATION, NULL));
1146} 1157}
@@ -1148,6 +1159,7 @@ _evas_3d_node_orientation_inherit_set(Eo *obj, Evas_3D_Node_Data *pd, Eina_Bool
1148EOLIAN static void 1159EOLIAN static void
1149_evas_3d_node_scale_inherit_set(Eo *obj, Evas_3D_Node_Data *pd, Eina_Bool inherit) 1160_evas_3d_node_scale_inherit_set(Eo *obj, Evas_3D_Node_Data *pd, Eina_Bool inherit)
1150{ 1161{
1162 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
1151 pd->scale_inherit = inherit; 1163 pd->scale_inherit = inherit;
1152 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_NODE_TRANSFORM_SCALE, NULL)); 1164 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_NODE_TRANSFORM_SCALE, NULL));
1153} 1165}
@@ -1179,6 +1191,7 @@ _evas_3d_node_look_at_set(Eo *obj, Evas_3D_Node_Data *pd,
1179 Evas_Vec3 up; 1191 Evas_Vec3 up;
1180 Evas_Vec3 x, y, z; 1192 Evas_Vec3 x, y, z;
1181 1193
1194 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
1182 /* Target position in parent space. */ 1195 /* Target position in parent space. */
1183 if (target_space == EVAS_3D_SPACE_LOCAL) 1196 if (target_space == EVAS_3D_SPACE_LOCAL)
1184 { 1197 {
@@ -1292,6 +1305,7 @@ _evas_3d_node_camera_set(Eo *obj, Evas_3D_Node_Data *pd, Evas_3D_Camera *camera)
1292 if (pd->data.camera.camera == camera) 1305 if (pd->data.camera.camera == camera)
1293 return; 1306 return;
1294 1307
1308 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
1295 if (pd->data.camera.camera) 1309 if (pd->data.camera.camera)
1296 { 1310 {
1297 /* Detach previous camera object. */ 1311 /* Detach previous camera object. */
@@ -1327,6 +1341,7 @@ _evas_3d_node_light_set(Eo *obj, Evas_3D_Node_Data *pd, Evas_3D_Light *light)
1327 if (pd->data.light.light == light) 1341 if (pd->data.light.light == light)
1328 return; 1342 return;
1329 1343
1344 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
1330 if (pd->data.light.light) 1345 if (pd->data.light.light)
1331 { 1346 {
1332 /* Detach previous light object. */ 1347 /* Detach previous light object. */
@@ -1367,6 +1382,7 @@ _evas_3d_node_mesh_add(Eo *obj, Evas_3D_Node_Data *pd, Evas_3D_Mesh *mesh)
1367 return; 1382 return;
1368 } 1383 }
1369 1384
1385 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
1370 if ((nm = _node_mesh_new(obj, mesh)) == NULL) 1386 if ((nm = _node_mesh_new(obj, mesh)) == NULL)
1371 { 1387 {
1372 ERR("Failed to create node mesh."); 1388 ERR("Failed to create node mesh.");
@@ -1401,6 +1417,7 @@ _evas_3d_node_mesh_del(Eo *obj, Evas_3D_Node_Data *pd, Evas_3D_Mesh *mesh)
1401 return; 1417 return;
1402 } 1418 }
1403 1419
1420 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
1404 if (!eina_hash_del(pd->data.mesh.node_meshes, &mesh, NULL)) 1421 if (!eina_hash_del(pd->data.mesh.node_meshes, &mesh, NULL))
1405 { 1422 {
1406 ERR("The given mesh doesn't belong to this node."); 1423 ERR("The given mesh doesn't belong to this node.");
@@ -1418,6 +1435,7 @@ _evas_3d_node_mesh_del(Eo *obj, Evas_3D_Node_Data *pd, Evas_3D_Mesh *mesh)
1418EOLIAN static const Eina_List * 1435EOLIAN static const Eina_List *
1419_evas_3d_node_mesh_list_get(Eo *obj EINA_UNUSED, Evas_3D_Node_Data *pd) 1436_evas_3d_node_mesh_list_get(Eo *obj EINA_UNUSED, Evas_3D_Node_Data *pd)
1420{ 1437{
1438 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
1421 return pd->data.mesh.meshes; 1439 return pd->data.mesh.meshes;
1422} 1440}
1423 1441
@@ -1432,6 +1450,7 @@ _evas_3d_node_mesh_frame_set(Eo *obj, Evas_3D_Node_Data *pd, Evas_3D_Mesh *mesh,
1432 return; 1450 return;
1433 } 1451 }
1434 1452
1453 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
1435 if ((nm = eina_hash_find(pd->data.mesh.node_meshes, &mesh)) == NULL) 1454 if ((nm = eina_hash_find(pd->data.mesh.node_meshes, &mesh)) == NULL)
1436 { 1455 {
1437 ERR("The given mesh doesn't belongs to this node."); 1456 ERR("The given mesh doesn't belongs to this node.");
@@ -1453,6 +1472,7 @@ _evas_3d_node_mesh_frame_get(Eo *obj EINA_UNUSED, Evas_3D_Node_Data *pd, Evas_3D
1453 return 0; 1472 return 0;
1454 } 1473 }
1455 1474
1475 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
1456 if ((nm = eina_hash_find(pd->data.mesh.node_meshes, &mesh)) == NULL) 1476 if ((nm = eina_hash_find(pd->data.mesh.node_meshes, &mesh)) == NULL)
1457 { 1477 {
1458 ERR("The given mesh doesn't belongs to this node."); 1478 ERR("The given mesh doesn't belongs to this node.");
diff --git a/src/lib/evas/canvas/evas_3d_object.c b/src/lib/evas/canvas/evas_3d_object.c
index 8116d09..ba1ecdc 100644
--- a/src/lib/evas/canvas/evas_3d_object.c
+++ b/src/lib/evas/canvas/evas_3d_object.c
@@ -22,8 +22,9 @@ EOLIAN static Evas *
22} 22}
23 23
24EOLIAN static void 24EOLIAN static void
25_evas_3d_object_type_set(Eo *obj EINA_UNUSED, Evas_3D_Object_Data *pd, Evas_3D_Object_Type type) 25_evas_3d_object_type_set(Eo *obj, Evas_3D_Object_Data *pd, Evas_3D_Object_Type type)
26{ 26{
27 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
27 pd->type = type; 28 pd->type = type;
28} 29}
29 30
@@ -46,6 +47,7 @@ _evas_3d_object_change(Eo *obj, Evas_3D_Object_Data *pd, Evas_3D_State state, Ev
46 if (pd->dirty[state]) 47 if (pd->dirty[state])
47 return; 48 return;
48 49
50 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
49 pd->dirty[state] = EINA_TRUE; 51 pd->dirty[state] = EINA_TRUE;
50 pd->dirty[EVAS_3D_STATE_ANY] = EINA_TRUE; 52 pd->dirty[EVAS_3D_STATE_ANY] = EINA_TRUE;
51 53
@@ -58,6 +60,7 @@ _evas_3d_object_update(Eo *obj, Evas_3D_Object_Data *pd)
58 if (!pd->dirty[EVAS_3D_STATE_ANY]) 60 if (!pd->dirty[EVAS_3D_STATE_ANY])
59 return; 61 return;
60 62
63 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
61 eo_do(obj, evas_3d_object_update_notify()); 64 eo_do(obj, evas_3d_object_update_notify());
62 65
63 memset(&pd->dirty[0], 0x00, sizeof(Eina_Bool) * EVAS_3D_STATE_MAX); 66 memset(&pd->dirty[0], 0x00, sizeof(Eina_Bool) * EVAS_3D_STATE_MAX);
diff --git a/src/lib/evas/canvas/evas_3d_scene.c b/src/lib/evas/canvas/evas_3d_scene.c
index a26b6c8..edab292 100644
--- a/src/lib/evas/canvas/evas_3d_scene.c
+++ b/src/lib/evas/canvas/evas_3d_scene.c
@@ -24,11 +24,12 @@ evas_3d_scene_data_fini(Evas_3D_Scene_Public_Data *data)
24} 24}
25 25
26EOLIAN static void 26EOLIAN static void
27_evas_3d_scene_evas_3d_object_change_notify(Eo *eo_obj EINA_UNUSED, Evas_3D_Scene_Data *pd, Evas_3D_State state EINA_UNUSED, Evas_3D_Object *ref EINA_UNUSED) 27_evas_3d_scene_evas_3d_object_change_notify(Eo *eo_obj, Evas_3D_Scene_Data *pd, Evas_3D_State state EINA_UNUSED, Evas_3D_Object *ref EINA_UNUSED)
28{ 28{
29 Eina_List *l; 29 Eina_List *l;
30 Evas_Object *eo; 30 Evas_Object *eo;
31 31
32 evas_object_async_block(eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS));
32 EINA_LIST_FOREACH(pd->images, l, eo) 33 EINA_LIST_FOREACH(pd->images, l, eo)
33 { 34 {
34 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo, EVAS_OBJECT_CLASS); 35 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo, EVAS_OBJECT_CLASS);
@@ -37,8 +38,9 @@ _evas_3d_scene_evas_3d_object_change_notify(Eo *eo_obj EINA_UNUSED, Evas_3D_Scen
37} 38}
38 39
39EOLIAN static void 40EOLIAN static void
40_evas_3d_scene_evas_3d_object_update_notify(Eo *obj EINA_UNUSED, Evas_3D_Scene_Data *pd) 41_evas_3d_scene_evas_3d_object_update_notify(Eo *obj, Evas_3D_Scene_Data *pd)
41{ 42{
43 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
42 if (pd->root_node) 44 if (pd->root_node)
43 { 45 {
44 eo_do(pd->root_node, evas_3d_object_update()); 46 eo_do(pd->root_node, evas_3d_object_update());
@@ -80,6 +82,7 @@ _evas_3d_scene_root_node_set(Eo *obj, Evas_3D_Scene_Data *pd, Evas_3D_Node *node
80 if (pd->root_node == node) 82 if (pd->root_node == node)
81 return; 83 return;
82 84
85 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
83 if (pd->root_node) 86 if (pd->root_node)
84 { 87 {
85 evas_3d_node_scene_root_del(pd->root_node, obj); 88 evas_3d_node_scene_root_del(pd->root_node, obj);
@@ -109,6 +112,7 @@ _evas_3d_scene_camera_node_set(Eo *obj, Evas_3D_Scene_Data *pd, Evas_3D_Node *no
109 if (pd->camera_node == node) 112 if (pd->camera_node == node)
110 return; 113 return;
111 114
115 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
112 if (pd->camera_node) 116 if (pd->camera_node)
113 { 117 {
114 evas_3d_node_scene_camera_del(pd->camera_node, obj); 118 evas_3d_node_scene_camera_del(pd->camera_node, obj);
@@ -135,6 +139,7 @@ _evas_3d_scene_camera_node_get(Eo *obj EINA_UNUSED, Evas_3D_Scene_Data *pd)
135EOLIAN static void 139EOLIAN static void
136_evas_3d_scene_size_set(Eo *obj EINA_UNUSED, Evas_3D_Scene_Data *pd, int w, int h) 140_evas_3d_scene_size_set(Eo *obj EINA_UNUSED, Evas_3D_Scene_Data *pd, int w, int h)
137{ 141{
142 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
138 pd->w = w; 143 pd->w = w;
139 pd->h = h; 144 pd->h = h;
140 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_SCENE_SIZE, NULL)); 145 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_SCENE_SIZE, NULL));
@@ -151,6 +156,7 @@ EOLIAN static void
151_evas_3d_scene_background_color_set(Eo *obj EINA_UNUSED, Evas_3D_Scene_Data *pd, 156_evas_3d_scene_background_color_set(Eo *obj EINA_UNUSED, Evas_3D_Scene_Data *pd,
152 Evas_Real r, Evas_Real g, Evas_Real b, Evas_Real a) 157 Evas_Real r, Evas_Real g, Evas_Real b, Evas_Real a)
153{ 158{
159 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
154 evas_color_set(&pd->bg_color, r, g, b, a); 160 evas_color_set(&pd->bg_color, r, g, b, a);
155 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_SCENE_BACKGROUND_COLOR, NULL)); 161 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_SCENE_BACKGROUND_COLOR, NULL));
156} 162}
@@ -630,12 +636,13 @@ _evas_3d_scene_pick(Eo *obj, Evas_3D_Scene_Data *pd, Evas_Real x, Evas_Real y,
630 Evas_3D_Camera_Data *pd_camera; 636 Evas_3D_Camera_Data *pd_camera;
631 Evas_3D_Object_Data *pd_parent; 637 Evas_3D_Object_Data *pd_parent;
632 Evas_Public_Data *e; 638 Evas_Public_Data *e;
633 int tex, px, py;; 639 int tex = 0, px, py;;
634 double redcomponent; 640 double redcomponent;
635 Eina_Stringshare *tmp; 641 Eina_Stringshare *tmp;
636 Eina_Array *arr = NULL; 642 Eina_Array *arr = NULL;
637 Eina_Bool update_scene = EINA_FALSE; 643 Eina_Bool update_scene = EINA_FALSE;
638 644
645 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
639 pd_parent = eo_data_scope_get(obj, EVAS_3D_OBJECT_CLASS); 646 pd_parent = eo_data_scope_get(obj, EVAS_3D_OBJECT_CLASS);
640 e = eo_data_scope_get(pd_parent->evas, EVAS_CANVAS_CLASS); 647 e = eo_data_scope_get(pd_parent->evas, EVAS_CANVAS_CLASS);
641 648
@@ -752,6 +759,7 @@ _evas_3d_scene_exist(Eo *obj, Evas_3D_Scene_Data *pd, Evas_Real x, Evas_Real y,
752 data.s = 0.0; 759 data.s = 0.0;
753 data.t = 0.0; 760 data.t = 0.0;
754 761
762 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
755 /* Update the scene graph. */ 763 /* Update the scene graph. */
756 eo_do(obj, evas_3d_object_update()); 764 eo_do(obj, evas_3d_object_update());
757 pd_camera_node = eo_data_scope_get(pd->camera_node, EVAS_3D_NODE_CLASS); 765 pd_camera_node = eo_data_scope_get(pd->camera_node, EVAS_3D_NODE_CLASS);
@@ -778,6 +786,7 @@ _evas_3d_scene_pick_member_list_get(Eo *obj, Evas_3D_Scene_Data *pd, Evas_Real x
778 void *node; 786 void *node;
779 Eina_Bool pick = EINA_FALSE; 787 Eina_Bool pick = EINA_FALSE;
780 788
789 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
781 /* Check pick for given scene. */ 790 /* Check pick for given scene. */
782 pick = eo_do(obj, evas_3d_scene_pick(x, y, NULL, NULL, NULL, NULL)); 791 pick = eo_do(obj, evas_3d_scene_pick(x, y, NULL, NULL, NULL, NULL));
783 792
@@ -805,6 +814,7 @@ _evas_3d_scene_shadows_enable_get(Eo *obj EINA_UNUSED, Evas_3D_Scene_Data *pd)
805EOLIAN static void 814EOLIAN static void
806_evas_3d_scene_shadows_enable_set(Eo *obj EINA_UNUSED, Evas_3D_Scene_Data *pd, Eina_Bool _shadows_enabled) 815_evas_3d_scene_shadows_enable_set(Eo *obj EINA_UNUSED, Evas_3D_Scene_Data *pd, Eina_Bool _shadows_enabled)
807{ 816{
817 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
808 pd->shadows_enabled = _shadows_enabled; 818 pd->shadows_enabled = _shadows_enabled;
809 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_SCENE_SHADOWS_ENABLED, NULL)); 819 eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_SCENE_SHADOWS_ENABLED, NULL));
810} 820}
@@ -818,6 +828,7 @@ _evas_3d_scene_color_pick_enable_get(Eo *obj EINA_UNUSED, Evas_3D_Scene_Data *pd
818EOLIAN static Eina_Bool 828EOLIAN static Eina_Bool
819_evas_3d_scene_color_pick_enable_set(Eo *obj EINA_UNUSED, Evas_3D_Scene_Data *pd, Eina_Bool _enabled) 829_evas_3d_scene_color_pick_enable_set(Eo *obj EINA_UNUSED, Evas_3D_Scene_Data *pd, Eina_Bool _enabled)
820{ 830{
831 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
821 if (pd->color_pick_enabled != _enabled) 832 if (pd->color_pick_enabled != _enabled)
822 pd->color_pick_enabled = _enabled; 833 pd->color_pick_enabled = _enabled;
823 834
diff --git a/src/lib/evas/canvas/evas_3d_texture.c b/src/lib/evas/canvas/evas_3d_texture.c
index 8945fad..a324eb6 100644
--- a/src/lib/evas/canvas/evas_3d_texture.c
+++ b/src/lib/evas/canvas/evas_3d_texture.c
@@ -196,6 +196,7 @@ EOLIAN static void
196_evas_3d_texture_evas_3d_object_change_notify(Eo *obj, Evas_3D_Texture_Data *pd, Evas_3D_State state EINA_UNUSED, Evas_3D_Object *ref EINA_UNUSED) 196_evas_3d_texture_evas_3d_object_change_notify(Eo *obj, Evas_3D_Texture_Data *pd, Evas_3D_State state EINA_UNUSED, Evas_3D_Object *ref EINA_UNUSED)
197{ 197{
198 198
199 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
199 if (pd->materials) 200 if (pd->materials)
200 eina_hash_foreach(pd->materials, _texture_material_change_notify, obj); 201 eina_hash_foreach(pd->materials, _texture_material_change_notify, obj);
201} 202}
@@ -203,6 +204,7 @@ _evas_3d_texture_evas_3d_object_change_notify(Eo *obj, Evas_3D_Texture_Data *pd,
203EOLIAN static void 204EOLIAN static void
204_evas_3d_texture_evas_3d_object_update_notify(Eo *obj, Evas_3D_Texture_Data *pd) 205_evas_3d_texture_evas_3d_object_update_notify(Eo *obj, Evas_3D_Texture_Data *pd)
205{ 206{
207 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
206 if (pd->source) 208 if (pd->source)
207 { 209 {
208 Eo *evas = NULL; 210 Eo *evas = NULL;
@@ -311,19 +313,21 @@ _evas_3d_texture_eo_base_constructor(Eo *obj, Evas_3D_Texture_Data *pd EINA_UNUS
311EOLIAN static void 313EOLIAN static void
312_evas_3d_texture_eo_base_destructor(Eo *obj, Evas_3D_Texture_Data *pd EINA_UNUSED) 314_evas_3d_texture_eo_base_destructor(Eo *obj, Evas_3D_Texture_Data *pd EINA_UNUSED)
313{ 315{
316 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
314 //evas_3d_object_unreference(&pd->base); 317 //evas_3d_object_unreference(&pd->base);
315 _texture_fini(obj); 318 _texture_fini(obj);
316 eo_do_super(obj, MY_CLASS, eo_destructor()); 319 eo_do_super(obj, MY_CLASS, eo_destructor());
317} 320}
318 321
319EOLIAN static void 322EOLIAN static void
320_evas_3d_texture_data_set(Eo *obj EINA_UNUSED, Evas_3D_Texture_Data *pd, Evas_3D_Color_Format color_format, 323_evas_3d_texture_data_set(Eo *obj, Evas_3D_Texture_Data *pd, Evas_3D_Color_Format color_format,
321 Evas_3D_Pixel_Format pixel_format, int w, int h, const void *data) 324 Evas_3D_Pixel_Format pixel_format, int w, int h, const void *data)
322{ 325{
323 Eo *evas = NULL; 326 Eo *evas = NULL;
324 eo_do(obj, evas = evas_common_evas_get()); 327 eo_do(obj, evas = evas_common_evas_get());
325 Evas_Public_Data *e = eo_data_scope_get(evas, EVAS_CANVAS_CLASS); 328 Evas_Public_Data *e = eo_data_scope_get(evas, EVAS_CANVAS_CLASS);
326 329
330 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
327 if (!pd->engine_data && e->engine.func->texture_new) 331 if (!pd->engine_data && e->engine.func->texture_new)
328 pd->engine_data = e->engine.func->texture_new(e->engine.data.output); 332 pd->engine_data = e->engine.func->texture_new(e->engine.data.output);
329 333
@@ -341,6 +345,7 @@ _evas_3d_texture_file_set(Eo *obj, Evas_3D_Texture_Data *pd, const char *file, c
341 eo_do(obj, evas = evas_common_evas_get()); 345 eo_do(obj, evas = evas_common_evas_get());
342 Evas_Public_Data *e = eo_data_scope_get(evas, EVAS_CANVAS_CLASS); 346 Evas_Public_Data *e = eo_data_scope_get(evas, EVAS_CANVAS_CLASS);
343 347
348 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
344 if (!pd->engine_data && e->engine.func->texture_new) 349 if (!pd->engine_data && e->engine.func->texture_new)
345 pd->engine_data = e->engine.func->texture_new(e->engine.data.output); 350 pd->engine_data = e->engine.func->texture_new(e->engine.data.output);
346 351
@@ -361,6 +366,7 @@ _evas_3d_texture_source_set(Eo *obj , Evas_3D_Texture_Data *pd, Evas_Object *sou
361 if (source == pd->source) 366 if (source == pd->source)
362 return; 367 return;
363 368
369 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
364 _texture_fini(obj); 370 _texture_fini(obj);
365 371
366 if (source == NULL) 372 if (source == NULL)
@@ -391,7 +397,7 @@ _evas_3d_texture_source_set(Eo *obj , Evas_3D_Texture_Data *pd, Evas_Object *sou
391} 397}
392 398
393EOLIAN static void 399EOLIAN static void
394_evas_3d_texture_source_visible_set(Eo *obj EINA_UNUSED, Evas_3D_Texture_Data *pd, Eina_Bool visible) 400_evas_3d_texture_source_visible_set(Eo *obj, Evas_3D_Texture_Data *pd, Eina_Bool visible)
395{ 401{
396 Evas_Object_Protected_Data *src_obj; 402 Evas_Object_Protected_Data *src_obj;
397 403
@@ -403,6 +409,7 @@ _evas_3d_texture_source_visible_set(Eo *obj EINA_UNUSED, Evas_3D_Texture_Data *p
403 if (src_obj->proxy->src_invisible == !visible) 409 if (src_obj->proxy->src_invisible == !visible)
404 return; 410 return;
405 411
412 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
406 EINA_COW_WRITE_BEGIN(evas_object_proxy_cow, src_obj->proxy, Evas_Object_Proxy_Data, proxy_write) 413 EINA_COW_WRITE_BEGIN(evas_object_proxy_cow, src_obj->proxy, Evas_Object_Proxy_Data, proxy_write)
407 proxy_write->src_invisible = !visible; 414 proxy_write->src_invisible = !visible;
408 EINA_COW_WRITE_END(evas_object_proxy_cow, src_obj->proxy, proxy_write); 415 EINA_COW_WRITE_END(evas_object_proxy_cow, src_obj->proxy, proxy_write);
@@ -448,6 +455,7 @@ _evas_3d_texture_size_get(Eo *obj, Evas_3D_Texture_Data *pd, int *w, int *h)
448 Eo *evas = NULL; 455 Eo *evas = NULL;
449 eo_do(obj, evas = evas_common_evas_get()); 456 eo_do(obj, evas = evas_common_evas_get());
450 Evas_Public_Data *e = eo_data_scope_get(evas, EVAS_CANVAS_CLASS); 457 Evas_Public_Data *e = eo_data_scope_get(evas, EVAS_CANVAS_CLASS);
458 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
451 if (e->engine.func->texture_size_get) 459 if (e->engine.func->texture_size_get)
452 { 460 {
453 e->engine.func->texture_size_get(e->engine.data.output, 461 e->engine.func->texture_size_get(e->engine.data.output,
@@ -461,6 +469,7 @@ _evas_3d_texture_wrap_set(Eo *obj, Evas_3D_Texture_Data *pd, Evas_3D_Wrap_Mode s
461 Eo *evas = NULL; 469 Eo *evas = NULL;
462 eo_do(obj, evas = evas_common_evas_get()); 470 eo_do(obj, evas = evas_common_evas_get());
463 Evas_Public_Data *e = eo_data_scope_get(evas, EVAS_CANVAS_CLASS); 471 Evas_Public_Data *e = eo_data_scope_get(evas, EVAS_CANVAS_CLASS);
472 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
464 if (e->engine.func->texture_wrap_set) 473 if (e->engine.func->texture_wrap_set)
465 { 474 {
466 e->engine.func->texture_wrap_set(e->engine.data.output, 475 e->engine.func->texture_wrap_set(e->engine.data.output,
@@ -475,6 +484,7 @@ _evas_3d_texture_wrap_get(Eo *obj, Evas_3D_Texture_Data *pd, Evas_3D_Wrap_Mode *
475 Eo *evas = NULL; 484 Eo *evas = NULL;
476 eo_do(obj, evas = evas_common_evas_get()); 485 eo_do(obj, evas = evas_common_evas_get());
477 Evas_Public_Data *e = eo_data_scope_get(evas, EVAS_CANVAS_CLASS); 486 Evas_Public_Data *e = eo_data_scope_get(evas, EVAS_CANVAS_CLASS);
487 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
478 if (e->engine.func->texture_wrap_set) 488 if (e->engine.func->texture_wrap_set)
479 { 489 {
480 e->engine.func->texture_wrap_get(e->engine.data.output, 490 e->engine.func->texture_wrap_get(e->engine.data.output,
@@ -488,6 +498,7 @@ _evas_3d_texture_filter_set(Eo *obj, Evas_3D_Texture_Data *pd, Evas_3D_Texture_F
488 Eo *evas = NULL; 498 Eo *evas = NULL;
489 eo_do(obj, evas = evas_common_evas_get()); 499 eo_do(obj, evas = evas_common_evas_get());
490 Evas_Public_Data *e = eo_data_scope_get(evas, EVAS_CANVAS_CLASS); 500 Evas_Public_Data *e = eo_data_scope_get(evas, EVAS_CANVAS_CLASS);
501 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
491 if (e->engine.func->texture_filter_set) 502 if (e->engine.func->texture_filter_set)
492 { 503 {
493 e->engine.func->texture_filter_set(e->engine.data.output, 504 e->engine.func->texture_filter_set(e->engine.data.output,
@@ -502,6 +513,7 @@ _evas_3d_texture_filter_get(Eo *obj EINA_UNUSED, Evas_3D_Texture_Data *pd, Evas_
502 Eo *evas = NULL; 513 Eo *evas = NULL;
503 eo_do(obj, evas = evas_common_evas_get()); 514 eo_do(obj, evas = evas_common_evas_get());
504 Evas_Public_Data *e = eo_data_scope_get(evas, EVAS_CANVAS_CLASS); 515 Evas_Public_Data *e = eo_data_scope_get(evas, EVAS_CANVAS_CLASS);
516 evas_object_async_block(eo_data_scope_get(obj, EVAS_OBJECT_CLASS));
505 if (e->engine.func->texture_filter_get) 517 if (e->engine.func->texture_filter_get)
506 { 518 {
507 e->engine.func->texture_filter_get(e->engine.data.output, 519 e->engine.func->texture_filter_get(e->engine.data.output,
diff --git a/src/lib/evas/canvas/evas_clip.c b/src/lib/evas/canvas/evas_clip.c
index 0e1d43a..833a7e4 100644
--- a/src/lib/evas/canvas/evas_clip.c
+++ b/src/lib/evas/canvas/evas_clip.c
@@ -230,6 +230,8 @@ _evas_object_clip_set(Eo *eo_obj, Evas_Object_Protected_Data *obj, Evas_Object *
230 return; 230 return;
231 MAGIC_CHECK_END(); 231 MAGIC_CHECK_END();
232 232
233 evas_object_async_block(obj);
234
233 clip = eo_data_scope_get(eo_clip, EVAS_OBJECT_CLASS); 235 clip = eo_data_scope_get(eo_clip, EVAS_OBJECT_CLASS);
234 if (obj->cur->clipper && obj->cur->clipper->object == eo_clip) return; 236 if (obj->cur->clipper && obj->cur->clipper->object == eo_clip) return;
235 if (eo_obj == eo_clip) 237 if (eo_obj == eo_clip)
@@ -264,7 +266,10 @@ _evas_object_clip_set(Eo *eo_obj, Evas_Object_Protected_Data *obj, Evas_Object *
264 return; 266 return;
265 } 267 }
266 268
267 if (evas_object_intercept_call_clip_set(eo_obj, obj, eo_clip)) return; 269 if (evas_object_intercept_call_clip_set(eo_obj, obj, eo_clip))
270 {
271 return;
272 }
268 // illegal to set anything but a rect or an image as a clip 273 // illegal to set anything but a rect or an image as a clip
269 if (clip->type != o_rect_type && clip->type != o_image_type) 274 if (clip->type != o_rect_type && clip->type != o_image_type)
270 { 275 {
@@ -391,6 +396,7 @@ _evas_object_clip_unset(Eo *eo_obj, Evas_Object_Protected_Data *obj)
391{ 396{
392 if (!obj->cur->clipper) return; 397 if (!obj->cur->clipper) return;
393 398
399 evas_object_async_block(obj);
394 obj->clip.cache_clipees_answer = eina_list_free(obj->clip.cache_clipees_answer); 400 obj->clip.cache_clipees_answer = eina_list_free(obj->clip.cache_clipees_answer);
395 401
396 /* unclip */ 402 /* unclip */
diff --git a/src/lib/evas/canvas/evas_font_dir.c b/src/lib/evas/canvas/evas_font_dir.c
index d540709..31debb4 100644
--- a/src/lib/evas/canvas/evas_font_dir.c
+++ b/src/lib/evas/canvas/evas_font_dir.c
@@ -1326,6 +1326,7 @@ evas_object_text_font_string_parse(char *buffer, char dest[14][256])
1326EOLIAN void 1326EOLIAN void
1327_evas_canvas_font_path_clear(Eo *eo_e EINA_UNUSED, Evas_Public_Data *evas) 1327_evas_canvas_font_path_clear(Eo *eo_e EINA_UNUSED, Evas_Public_Data *evas)
1328{ 1328{
1329 evas_canvas_async_block(evas);
1329 while (evas->font_path) 1330 while (evas->font_path)
1330 { 1331 {
1331 eina_stringshare_del(evas->font_path->data); 1332 eina_stringshare_del(evas->font_path->data);
@@ -1337,6 +1338,7 @@ EOLIAN void
1337_evas_canvas_font_path_append(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e, const char *path) 1338_evas_canvas_font_path_append(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e, const char *path)
1338{ 1339{
1339 if (!path) return; 1340 if (!path) return;
1341 evas_canvas_async_block(e);
1340 e->font_path = eina_list_append(e->font_path, eina_stringshare_add(path)); 1342 e->font_path = eina_list_append(e->font_path, eina_stringshare_add(path));
1341 1343
1342 evas_font_init(); 1344 evas_font_init();
@@ -1346,6 +1348,7 @@ EOLIAN void
1346_evas_canvas_font_path_prepend(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e, const char *path) 1348_evas_canvas_font_path_prepend(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e, const char *path)
1347{ 1349{
1348 if (!path) return; 1350 if (!path) return;
1351 evas_canvas_async_block(e);
1349 e->font_path = eina_list_prepend(e->font_path, eina_stringshare_add(path)); 1352 e->font_path = eina_list_prepend(e->font_path, eina_stringshare_add(path));
1350 1353
1351 evas_font_init(); 1354 evas_font_init();
@@ -1422,6 +1425,7 @@ _evas_canvas_font_hinting_set(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e, Evas_Fo
1422{ 1425{
1423 Evas_Layer *lay; 1426 Evas_Layer *lay;
1424 1427
1428 evas_canvas_async_block(e);
1425 if (e->hinting == hinting) return; 1429 if (e->hinting == hinting) return;
1426 e->hinting = hinting; 1430 e->hinting = hinting;
1427 1431
@@ -1452,6 +1456,7 @@ _evas_canvas_font_hinting_can_hint(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e, Ev
1452EOLIAN void 1456EOLIAN void
1453_evas_canvas_font_cache_flush(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e) 1457_evas_canvas_font_cache_flush(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e)
1454{ 1458{
1459 evas_canvas_async_block(e);
1455 evas_render_rendering_wait(e); 1460 evas_render_rendering_wait(e);
1456 e->engine.func->font_cache_flush(e->engine.data.output); 1461 e->engine.func->font_cache_flush(e->engine.data.output);
1457} 1462}
@@ -1460,6 +1465,7 @@ EOLIAN void
1460_evas_canvas_font_cache_set(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e, int size) 1465_evas_canvas_font_cache_set(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e, int size)
1461{ 1466{
1462 if (size < 0) size = 0; 1467 if (size < 0) size = 0;
1468 evas_canvas_async_block(e);
1463 evas_render_rendering_wait(e); 1469 evas_render_rendering_wait(e);
1464 e->engine.func->font_cache_set(e->engine.data.output, size); 1470 e->engine.func->font_cache_set(e->engine.data.output, size);
1465} 1471}
diff --git a/src/lib/evas/canvas/evas_layer.c b/src/lib/evas/canvas/evas_layer.c
index 62b1c54..e1baf63 100644
--- a/src/lib/evas/canvas/evas_layer.c
+++ b/src/lib/evas/canvas/evas_layer.c
@@ -7,10 +7,14 @@ void
7evas_object_inject(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj, Evas *e) 7evas_object_inject(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj, Evas *e)
8{ 8{
9 Evas_Layer *lay; 9 Evas_Layer *lay;
10 Evas_Public_Data *evas;
10 11
11 if (!obj) return; 12 if (!obj) return;
12 if (!e) return; 13 if (!e) return;
13 if (obj->in_layer) return; 14 if (obj->in_layer) return;
15 evas = eo_data_scope_get(e, EVAS_CANVAS_CLASS);
16 if (!evas) return;
17 evas_canvas_async_block(evas);
14 lay = evas_layer_find(e, obj->cur->layer); 18 lay = evas_layer_find(e, obj->cur->layer);
15 if (!lay) 19 if (!lay)
16 { 20 {
@@ -180,6 +184,7 @@ _evas_object_layer_set(Eo *eo_obj, Evas_Object_Protected_Data *obj EINA_UNUSED,
180 Evas *eo_e; 184 Evas *eo_e;
181 185
182 if (obj->delete_me) return; 186 if (obj->delete_me) return;
187 evas_object_async_block(obj);
183 if (evas_object_intercept_call_layer_set(eo_obj, obj, l)) return; 188 if (evas_object_intercept_call_layer_set(eo_obj, obj, l)) return;
184 if (obj->smart.parent) return; 189 if (obj->smart.parent) return;
185 if (obj->cur->layer == l) 190 if (obj->cur->layer == l)
diff --git a/src/lib/evas/canvas/evas_main.c b/src/lib/evas/canvas/evas_main.c
index 00d1f24..7e281a4 100644
--- a/src/lib/evas/canvas/evas_main.c
+++ b/src/lib/evas/canvas/evas_main.c
@@ -184,6 +184,7 @@ _evas_canvas_eo_base_constructor(Eo *eo_obj, Evas_Public_Data *e)
184 EVAS_ARRAY_SET(e, texts_unref_queue); 184 EVAS_ARRAY_SET(e, texts_unref_queue);
185 185
186#undef EVAS_ARRAY_SET 186#undef EVAS_ARRAY_SET
187 eina_lock_new(&(e->lock_objects));
187} 188}
188 189
189EAPI void 190EAPI void
@@ -206,9 +207,11 @@ _evas_canvas_eo_base_destructor(Eo *eo_e, Evas_Public_Data *e)
206 int i; 207 int i;
207 Eina_Bool del; 208 Eina_Bool del;
208 209
210 evas_canvas_async_block(e);
209 if (e->walking_list == 0) evas_render_idle_flush(eo_e); 211 if (e->walking_list == 0) evas_render_idle_flush(eo_e);
210 212
211 if (e->walking_list > 0) return; 213 if (e->walking_list > 0) return;
214
212 evas_render_idle_flush(eo_e); 215 evas_render_idle_flush(eo_e);
213 216
214 _evas_post_event_callback_free(eo_e); 217 _evas_post_event_callback_free(eo_e);
@@ -299,6 +302,8 @@ _evas_canvas_eo_base_destructor(Eo *eo_e, Evas_Public_Data *e)
299 302
300 _evas_device_cleanup(eo_e); 303 _evas_device_cleanup(eo_e);
301 304
305 eina_lock_free(&(e->lock_objects));
306
302 e->magic = 0; 307 e->magic = 0;
303 eo_do_super(eo_e, MY_CLASS, eo_destructor()); 308 eo_do_super(eo_e, MY_CLASS, eo_destructor());
304} 309}
@@ -318,6 +323,7 @@ _evas_canvas_output_method_set(Eo *eo_e, Evas_Public_Data *e, int render_method)
318 if (em->id_engine != render_method) return; 323 if (em->id_engine != render_method) return;
319 if (!evas_module_load(em)) return; 324 if (!evas_module_load(em)) return;
320 325
326 evas_canvas_async_block(e);
321 /* set the correct render */ 327 /* set the correct render */
322 e->output.render_method = render_method; 328 e->output.render_method = render_method;
323 e->engine.func = (em->functions); 329 e->engine.func = (em->functions);
@@ -352,11 +358,15 @@ _evas_canvas_engine_info_get(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e)
352EOLIAN static Eina_Bool 358EOLIAN static Eina_Bool
353_evas_canvas_engine_info_set(Eo *eo_e, Evas_Public_Data *e, Evas_Engine_Info *info) 359_evas_canvas_engine_info_set(Eo *eo_e, Evas_Public_Data *e, Evas_Engine_Info *info)
354{ 360{
361 Eina_Bool res;
362
355 if (!info) return EINA_FALSE; 363 if (!info) return EINA_FALSE;
356 if (info != e->engine.info) return EINA_FALSE; 364 if (info != e->engine.info) return EINA_FALSE;
357 if (info->magic != e->engine.info_magic) return EINA_FALSE; 365 if (info->magic != e->engine.info_magic) return EINA_FALSE;
358 366
359 return (Eina_Bool)e->engine.func->setup(eo_e, info); 367 evas_canvas_async_block(e);
368 res = e->engine.func->setup(eo_e, info);
369 return res;
360} 370}
361 371
362EOLIAN static void 372EOLIAN static void
@@ -366,6 +376,7 @@ _evas_canvas_output_size_set(Eo *eo_e, Evas_Public_Data *e, int w, int h)
366 if (w < 1) w = 1; 376 if (w < 1) w = 1;
367 if (h < 1) h = 1; 377 if (h < 1) h = 1;
368 378
379 evas_canvas_async_block(e);
369 e->output.w = w; 380 e->output.w = w;
370 e->output.h = h; 381 e->output.h = h;
371 e->output.changed = 1; 382 e->output.changed = 1;
@@ -394,6 +405,7 @@ _evas_canvas_output_viewport_set(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e, Evas
394 x = 0; 405 x = 0;
395 y = 0; 406 y = 0;
396 } 407 }
408 evas_canvas_async_block(e);
397 e->viewport.x = x; 409 e->viewport.x = x;
398 e->viewport.y = y; 410 e->viewport.y = y;
399 e->viewport.w = w; 411 e->viewport.w = w;
@@ -417,6 +429,7 @@ _evas_canvas_output_framespace_set(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e, Ev
417{ 429{
418 if ((x == e->framespace.x) && (y == e->framespace.y) && 430 if ((x == e->framespace.x) && (y == e->framespace.y) &&
419 (w == e->framespace.w) && (h == e->framespace.h)) return; 431 (w == e->framespace.w) && (h == e->framespace.h)) return;
432 evas_canvas_async_block(e);
420 e->framespace.x = x; 433 e->framespace.x = x;
421 e->framespace.y = y; 434 e->framespace.y = y;
422 e->framespace.w = w; 435 e->framespace.w = w;
diff --git a/src/lib/evas/canvas/evas_map.c b/src/lib/evas/canvas/evas_map.c
index 453caba..86ceebe 100644
--- a/src/lib/evas/canvas/evas_map.c
+++ b/src/lib/evas/canvas/evas_map.c
@@ -472,6 +472,7 @@ _evas_object_map_enable_set(Eo *eo_obj, Evas_Object_Protected_Data *obj, Eina_Bo
472 if (obj->map->cur.usemap == enabled) return; 472 if (obj->map->cur.usemap == enabled) return;
473 pchange = obj->changed; 473 pchange = obj->changed;
474 474
475 evas_object_async_block(obj);
475 EINA_COW_WRITE_BEGIN(evas_object_map_cow, obj->map, Evas_Object_Map_Data, map_write) 476 EINA_COW_WRITE_BEGIN(evas_object_map_cow, obj->map, Evas_Object_Map_Data, map_write)
476 map_write->cur.usemap = enabled; 477 map_write->cur.usemap = enabled;
477 EINA_COW_WRITE_END(evas_object_map_cow, obj->map, map_write); 478 EINA_COW_WRITE_END(evas_object_map_cow, obj->map, map_write);
@@ -540,6 +541,7 @@ _evas_object_map_enable_get(Eo *eo_obj EINA_UNUSED, Evas_Object_Protected_Data *
540EOLIAN void 541EOLIAN void
541_evas_object_map_set(Eo *eo_obj, Evas_Object_Protected_Data *obj, const Evas_Map *map) 542_evas_object_map_set(Eo *eo_obj, Evas_Object_Protected_Data *obj, const Evas_Map *map)
542{ 543{
544 evas_object_async_block(obj);
543 if ((!map) || (map->count < 4)) 545 if ((!map) || (map->count < 4))
544 { 546 {
545 if (obj->map->surface) 547 if (obj->map->surface)
@@ -631,6 +633,7 @@ _evas_object_map_set(Eo *eo_obj, Evas_Object_Protected_Data *obj, const Evas_Map
631EOLIAN Evas_Map * 633EOLIAN Evas_Map *
632_evas_object_map_get(Eo *eo_obj EINA_UNUSED, Evas_Object_Protected_Data *obj) 634_evas_object_map_get(Eo *eo_obj EINA_UNUSED, Evas_Object_Protected_Data *obj)
633{ 635{
636 evas_object_async_block(obj);
634 return obj->map->cur.map; 637 return obj->map->cur.map;
635} 638}
636 639
diff --git a/src/lib/evas/canvas/evas_object_image.c b/src/lib/evas/canvas/evas_object_image.c
index cf43097..cbeb116 100644
--- a/src/lib/evas/canvas/evas_object_image.c
+++ b/src/lib/evas/canvas/evas_object_image.c
@@ -557,7 +557,7 @@ _evas_image_mmap_set(Eo *eo_obj, Evas_Image_Data *o, const Eina_File *f, const c
557 if ((o->cur->key) && (key) && (!strcmp(o->cur->key, key))) 557 if ((o->cur->key) && (key) && (!strcmp(o->cur->key, key)))
558 return; 558 return;
559 } 559 }
560 560 evas_object_async_block(obj);
561 _image_init_set(f, NULL, key, eo_obj, obj, o, &lo); 561 _image_init_set(f, NULL, key, eo_obj, obj, o, &lo);
562 o->engine_data = ENFN->image_mmap(ENDT, o->cur->u.f, o->cur->key, &o->load_error, &lo); 562 o->engine_data = ENFN->image_mmap(ENDT, o->cur->u.f, o->cur->key, &o->load_error, &lo);
563 _image_done_set(eo_obj, obj, o); 563 _image_done_set(eo_obj, obj, o);
@@ -590,6 +590,7 @@ _evas_image_efl_file_file_set(Eo *eo_obj, Evas_Image_Data *o, const char *file,
590 if (!o->engine_data) 590 if (!o->engine_data)
591 ENFN->image_data_preload_cancel(ENDT, o->engine_data, eo_obj); 591 ENFN->image_data_preload_cancel(ENDT, o->engine_data, eo_obj);
592 */ 592 */
593 evas_object_async_block(obj);
593 _image_init_set(NULL, file, key, eo_obj, obj, o, &lo); 594 _image_init_set(NULL, file, key, eo_obj, obj, o, &lo);
594 o->engine_data = ENFN->image_load(ENDT, o->cur->u.file, o->cur->key, &o->load_error, &lo); 595 o->engine_data = ENFN->image_load(ENDT, o->cur->u.file, o->cur->key, &o->load_error, &lo);
595 _image_done_set(eo_obj, obj, o); 596 _image_done_set(eo_obj, obj, o);
@@ -645,7 +646,7 @@ _evas_image_source_set(Eo *eo_obj, Evas_Image_Data *o, Evas_Object *eo_src)
645 } 646 }
646 } 647 }
647 if (o->cur->source == eo_src) return EINA_TRUE; 648 if (o->cur->source == eo_src) return EINA_TRUE;
648 649 evas_object_async_block(obj);
649 _evas_object_image_cleanup(eo_obj, obj, o); 650 _evas_object_image_cleanup(eo_obj, obj, o);
650 /* Kill the image if any */ 651 /* Kill the image if any */
651 if (o->cur->u.file || o->cur->key) 652 if (o->cur->u.file || o->cur->key)
@@ -730,9 +731,11 @@ EOLIAN static void
730_evas_image_source_clip_set(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o, Eina_Bool source_clip) 731_evas_image_source_clip_set(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o, Eina_Bool source_clip)
731{ 732{
732 Evas_Object_Protected_Data *src_obj; 733 Evas_Object_Protected_Data *src_obj;
734 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
733 735
734 source_clip = !!source_clip; 736 source_clip = !!source_clip;
735 if (o->proxy_src_clip == source_clip) return; 737 if (o->proxy_src_clip == source_clip) return;
738 evas_object_async_block(obj);
736 o->proxy_src_clip = source_clip; 739 o->proxy_src_clip = source_clip;
737 740
738 if (!o->cur->source) return; 741 if (!o->cur->source) return;
@@ -802,6 +805,7 @@ EOLIAN static void
802_evas_image_source_visible_set(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o, Eina_Bool visible) 805_evas_image_source_visible_set(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o, Eina_Bool visible)
803{ 806{
804 Evas_Object_Protected_Data *src_obj; 807 Evas_Object_Protected_Data *src_obj;
808 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
805 809
806 if (!o->cur->source) return; 810 if (!o->cur->source) return;
807 811
@@ -809,6 +813,7 @@ _evas_image_source_visible_set(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o, Eina_
809 src_obj = eo_data_scope_get(o->cur->source, EVAS_OBJECT_CLASS); 813 src_obj = eo_data_scope_get(o->cur->source, EVAS_OBJECT_CLASS);
810 if (src_obj->proxy->src_invisible == !visible) return; 814 if (src_obj->proxy->src_invisible == !visible) return;
811 815
816 evas_object_async_block(obj);
812 EINA_COW_WRITE_BEGIN(evas_object_proxy_cow, src_obj->proxy, Evas_Object_Proxy_Data, proxy_write) 817 EINA_COW_WRITE_BEGIN(evas_object_proxy_cow, src_obj->proxy, Evas_Object_Proxy_Data, proxy_write)
813 proxy_write->src_invisible = !visible; 818 proxy_write->src_invisible = !visible;
814 EINA_COW_WRITE_END(evas_object_proxy_cow, src_obj->proxy, proxy_write); 819 EINA_COW_WRITE_END(evas_object_proxy_cow, src_obj->proxy, proxy_write);
@@ -844,6 +849,7 @@ _evas_image_scene_set(Eo *eo_obj, Evas_Image_Data *o, Evas_3D_Scene *scene)
844 849
845 if (o->cur->scene == scene) return; 850 if (o->cur->scene == scene) return;
846 851
852 evas_object_async_block(obj);
847 _image_init_set(NULL, NULL, NULL, eo_obj, obj, o, &lo); 853 _image_init_set(NULL, NULL, NULL, eo_obj, obj, o, &lo);
848 o->engine_data = ENFN->image_load(ENDT, o->cur->u.file, o->cur->key, &o->load_error, &lo); 854 o->engine_data = ENFN->image_load(ENDT, o->cur->u.file, o->cur->key, &o->load_error, &lo);
849 _image_done_set(eo_obj, obj, o); 855 _image_done_set(eo_obj, obj, o);
@@ -872,6 +878,7 @@ _evas_image_border_set(Eo *eo_obj, Evas_Image_Data *o, int l, int r, int t, int
872 (o->cur->border.t == t) && 878 (o->cur->border.t == t) &&
873 (o->cur->border.b == b)) return; 879 (o->cur->border.b == b)) return;
874 880
881 evas_object_async_block(obj);
875 EINA_COW_IMAGE_STATE_WRITE_BEGIN(o, state_write) 882 EINA_COW_IMAGE_STATE_WRITE_BEGIN(o, state_write)
876 { 883 {
877 state_write->border.l = l; 884 state_write->border.l = l;
@@ -896,13 +903,14 @@ _evas_image_border_get(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o, int *l, int *
896EOLIAN static void 903EOLIAN static void
897_evas_image_border_center_fill_set(Eo *eo_obj, Evas_Image_Data *o, Evas_Border_Fill_Mode fill) 904_evas_image_border_center_fill_set(Eo *eo_obj, Evas_Image_Data *o, Evas_Border_Fill_Mode fill)
898{ 905{
906 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
899 if (fill == o->cur->border.fill) return; 907 if (fill == o->cur->border.fill) return;
908 evas_object_async_block(obj);
900 EINA_COW_IMAGE_STATE_WRITE_BEGIN(o, state_write) 909 EINA_COW_IMAGE_STATE_WRITE_BEGIN(o, state_write)
901 state_write->border.fill = fill; 910 state_write->border.fill = fill;
902 EINA_COW_IMAGE_STATE_WRITE_END(o, state_write); 911 EINA_COW_IMAGE_STATE_WRITE_END(o, state_write);
903 912
904 o->changed = EINA_TRUE; 913 o->changed = EINA_TRUE;
905 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
906 evas_object_change(eo_obj, obj); 914 evas_object_change(eo_obj, obj);
907} 915}
908 916
@@ -915,9 +923,11 @@ _evas_image_border_center_fill_get(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o)
915static void 923static void
916_evas_image_filled_set(Eo *eo_obj, Evas_Image_Data* o, Eina_Bool setting) 924_evas_image_filled_set(Eo *eo_obj, Evas_Image_Data* o, Eina_Bool setting)
917{ 925{
926 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
918 setting = !!setting; 927 setting = !!setting;
919 if (o->filled == setting) return; 928 if (o->filled == setting) return;
920 929
930 evas_object_async_block(obj);
921 o->filled = setting; 931 o->filled = setting;
922 if (!o->filled) 932 if (!o->filled)
923 evas_object_event_callback_del(eo_obj, EVAS_CALLBACK_RESIZE, 933 evas_object_event_callback_del(eo_obj, EVAS_CALLBACK_RESIZE,
@@ -944,15 +954,15 @@ _evas_image_filled_get(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o)
944EOLIAN static void 954EOLIAN static void
945_evas_image_border_scale_set(Eo *eo_obj, Evas_Image_Data *o, double scale) 955_evas_image_border_scale_set(Eo *eo_obj, Evas_Image_Data *o, double scale)
946{ 956{
947 Evas_Object_Protected_Data *obj; 957 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
948 958
949 if (scale == o->cur->border.scale) return; 959 if (scale == o->cur->border.scale) return;
960 evas_object_async_block(obj);
950 EINA_COW_IMAGE_STATE_WRITE_BEGIN(o, state_write) 961 EINA_COW_IMAGE_STATE_WRITE_BEGIN(o, state_write)
951 state_write->border.scale = scale; 962 state_write->border.scale = scale;
952 EINA_COW_IMAGE_STATE_WRITE_END(o, state_write); 963 EINA_COW_IMAGE_STATE_WRITE_END(o, state_write);
953 964
954 o->changed = EINA_TRUE; 965 o->changed = EINA_TRUE;
955 obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
956 evas_object_change(eo_obj, obj); 966 evas_object_change(eo_obj, obj);
957} 967}
958 968
@@ -965,7 +975,7 @@ _evas_image_border_scale_get(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o)
965EOLIAN static void 975EOLIAN static void
966_evas_image_fill_set(Eo *eo_obj, Evas_Image_Data *o, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h) 976_evas_image_fill_set(Eo *eo_obj, Evas_Image_Data *o, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h)
967{ 977{
968 Evas_Object_Protected_Data *obj; 978 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
969 979
970 if (w == 0) return; 980 if (w == 0) return;
971 if (h == 0) return; 981 if (h == 0) return;
@@ -977,6 +987,7 @@ _evas_image_fill_set(Eo *eo_obj, Evas_Image_Data *o, Evas_Coord x, Evas_Coord y,
977 (o->cur->fill.w == w) && 987 (o->cur->fill.w == w) &&
978 (o->cur->fill.h == h)) return; 988 (o->cur->fill.h == h)) return;
979 989
990 evas_object_async_block(obj);
980 EINA_COW_IMAGE_STATE_WRITE_BEGIN(o, state_write) 991 EINA_COW_IMAGE_STATE_WRITE_BEGIN(o, state_write)
981 { 992 {
982 state_write->fill.x = x; 993 state_write->fill.x = x;
@@ -988,7 +999,6 @@ _evas_image_fill_set(Eo *eo_obj, Evas_Image_Data *o, Evas_Coord x, Evas_Coord y,
988 EINA_COW_IMAGE_STATE_WRITE_END(o, state_write); 999 EINA_COW_IMAGE_STATE_WRITE_END(o, state_write);
989 1000
990 o->changed = EINA_TRUE; 1001 o->changed = EINA_TRUE;
991 obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
992 evas_object_change(eo_obj, obj); 1002 evas_object_change(eo_obj, obj);
993} 1003}
994 1004
@@ -1004,16 +1014,16 @@ _evas_image_fill_get(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o, Evas_Coord *x,
1004EOLIAN static void 1014EOLIAN static void
1005_evas_image_fill_spread_set(Eo *eo_obj, Evas_Image_Data *o, Evas_Fill_Spread spread) 1015_evas_image_fill_spread_set(Eo *eo_obj, Evas_Image_Data *o, Evas_Fill_Spread spread)
1006{ 1016{
1007 Evas_Object_Protected_Data *obj; 1017 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1008 1018
1009 if (spread == (Evas_Fill_Spread)o->cur->spread) return; 1019 if (spread == (Evas_Fill_Spread)o->cur->spread) return;
1010 1020
1021 evas_object_async_block(obj);
1011 EINA_COW_IMAGE_STATE_WRITE_BEGIN(o, state_write) 1022 EINA_COW_IMAGE_STATE_WRITE_BEGIN(o, state_write)
1012 state_write->spread = spread; 1023 state_write->spread = spread;
1013 EINA_COW_IMAGE_STATE_WRITE_END(o, state_write); 1024 EINA_COW_IMAGE_STATE_WRITE_END(o, state_write);
1014 1025
1015 o->changed = EINA_TRUE; 1026 o->changed = EINA_TRUE;
1016 obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1017 evas_object_change(eo_obj, obj); 1027 evas_object_change(eo_obj, obj);
1018} 1028}
1019 1029
@@ -1032,6 +1042,7 @@ _evas_image_size_set(Eo *eo_obj, Evas_Image_Data *o, int w, int h)
1032 1042
1033 if (o->cur->scene) return; 1043 if (o->cur->scene) return;
1034 1044
1045 evas_object_async_block(obj);
1035 _evas_object_image_cleanup(eo_obj, obj, o); 1046 _evas_object_image_cleanup(eo_obj, obj, o);
1036 if (w < 1) w = 1; 1047 if (w < 1) w = 1;
1037 if (h < 1) h = 1; 1048 if (h < 1) h = 1;
@@ -1112,6 +1123,7 @@ _evas_image_data_convert(Eo *eo_obj, Evas_Image_Data *o, Evas_Colorspace to_cspa
1112 DATA32 *data; 1123 DATA32 *data;
1113 void* result = NULL; 1124 void* result = NULL;
1114 1125
1126 evas_object_async_block(obj);
1115 if ((o->preloading) && (o->engine_data)) 1127 if ((o->preloading) && (o->engine_data))
1116 { 1128 {
1117 o->preloading = EINA_FALSE; 1129 o->preloading = EINA_FALSE;
@@ -1140,6 +1152,7 @@ _evas_image_data_set(Eo *eo_obj, Evas_Image_Data *o, void *data)
1140 Eina_Bool resize_call = EINA_FALSE; 1152 Eina_Bool resize_call = EINA_FALSE;
1141 1153
1142 1154
1155 evas_object_async_block(obj);
1143 evas_render_rendering_wait(obj->layer->evas); 1156 evas_render_rendering_wait(obj->layer->evas);
1144 1157
1145 _evas_object_image_cleanup(eo_obj, obj, o); 1158 _evas_object_image_cleanup(eo_obj, obj, o);
@@ -1224,6 +1237,7 @@ _evas_image_data_get(Eo *eo_obj, Evas_Image_Data *_pd EINA_UNUSED, Eina_Bool for
1224 1237
1225 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS); 1238 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1226 1239
1240 if (for_writing) evas_object_async_block(obj);
1227 if (for_writing) evas_render_rendering_wait(obj->layer->evas); 1241 if (for_writing) evas_render_rendering_wait(obj->layer->evas);
1228 1242
1229 data = NULL; 1243 data = NULL;
@@ -1309,12 +1323,16 @@ _image_preload_internal(Eo *eo_obj, void *_pd, Eina_Bool cancel)
1309EOLIAN static void 1323EOLIAN static void
1310_evas_image_preload_begin(Eo *eo_obj, Evas_Image_Data *_pd EINA_UNUSED) 1324_evas_image_preload_begin(Eo *eo_obj, Evas_Image_Data *_pd EINA_UNUSED)
1311{ 1325{
1326 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1327 evas_object_async_block(obj);
1312 _image_preload_internal(eo_obj, _pd, EINA_FALSE); 1328 _image_preload_internal(eo_obj, _pd, EINA_FALSE);
1313} 1329}
1314 1330
1315EOLIAN static void 1331EOLIAN static void
1316_evas_image_preload_cancel(Eo *eo_obj, Evas_Image_Data *_pd EINA_UNUSED) 1332_evas_image_preload_cancel(Eo *eo_obj, Evas_Image_Data *_pd EINA_UNUSED)
1317{ 1333{
1334 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1335 evas_object_async_block(obj);
1318 _image_preload_internal(eo_obj, _pd, EINA_TRUE); 1336 _image_preload_internal(eo_obj, _pd, EINA_TRUE);
1319} 1337}
1320 1338
@@ -1324,6 +1342,7 @@ _evas_image_data_copy_set(Eo *eo_obj, Evas_Image_Data *o, void *data)
1324 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS); 1342 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1325 1343
1326 if (!data) return; 1344 if (!data) return;
1345 evas_object_async_block(obj);
1327 _evas_object_image_cleanup(eo_obj, obj, o); 1346 _evas_object_image_cleanup(eo_obj, obj, o);
1328 if ((o->cur->image.w <= 0) || 1347 if ((o->cur->image.w <= 0) ||
1329 (o->cur->image.h <= 0)) return; 1348 (o->cur->image.h <= 0)) return;
@@ -1365,12 +1384,14 @@ _evas_image_data_copy_set(Eo *eo_obj, Evas_Image_Data *o, void *data)
1365EOLIAN static void 1384EOLIAN static void
1366_evas_image_data_update_add(Eo *eo_obj, Evas_Image_Data *o, int x, int y, int w, int h) 1385_evas_image_data_update_add(Eo *eo_obj, Evas_Image_Data *o, int x, int y, int w, int h)
1367{ 1386{
1387 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1368 Eina_Rectangle *r; 1388 Eina_Rectangle *r;
1369 int cnt; 1389 int cnt;
1370 1390
1371 RECTS_CLIP_TO_RECT(x, y, w, h, 0, 0, o->cur->image.w, o->cur->image.h); 1391 RECTS_CLIP_TO_RECT(x, y, w, h, 0, 0, o->cur->image.w, o->cur->image.h);
1372 if ((w <= 0) || (h <= 0)) return; 1392 if ((w <= 0) || (h <= 0)) return;
1373 if (!o->written) return; 1393 if (!o->written) return;
1394 evas_object_async_block(obj);
1374 cnt = eina_list_count(o->pixels->pixel_updates); 1395 cnt = eina_list_count(o->pixels->pixel_updates);
1375 if (cnt == 1) 1396 if (cnt == 1)
1376 { // detect single blob case already there to do a nop 1397 { // detect single blob case already there to do a nop
@@ -1399,7 +1420,6 @@ _evas_image_data_update_add(Eo *eo_obj, Evas_Image_Data *o, int x, int y, int w,
1399 } 1420 }
1400 1421
1401 o->changed = EINA_TRUE; 1422 o->changed = EINA_TRUE;
1402 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1403 evas_object_change(eo_obj, obj); 1423 evas_object_change(eo_obj, obj);
1404} 1424}
1405 1425
@@ -1408,6 +1428,7 @@ _evas_image_alpha_set(Eo *eo_obj, Evas_Image_Data *o, Eina_Bool has_alpha)
1408{ 1428{
1409 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS); 1429 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1410 1430
1431 evas_object_async_block(obj);
1411 if ((o->preloading) && (o->engine_data)) 1432 if ((o->preloading) && (o->engine_data))
1412 { 1433 {
1413 o->preloading = EINA_FALSE; 1434 o->preloading = EINA_FALSE;
@@ -1457,8 +1478,9 @@ _evas_image_alpha_get(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o)
1457EOLIAN static void 1478EOLIAN static void
1458_evas_image_efl_image_smooth_scale_set(Eo *eo_obj, Evas_Image_Data *o, Eina_Bool smooth_scale) 1479_evas_image_efl_image_smooth_scale_set(Eo *eo_obj, Evas_Image_Data *o, Eina_Bool smooth_scale)
1459{ 1480{
1460 Evas_Object_Protected_Data *obj; 1481 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1461 1482
1483 evas_object_async_block(obj);
1462 if (((smooth_scale) && (o->cur->smooth_scale)) || 1484 if (((smooth_scale) && (o->cur->smooth_scale)) ||
1463 ((!smooth_scale) && (!o->cur->smooth_scale))) 1485 ((!smooth_scale) && (!o->cur->smooth_scale)))
1464 return; 1486 return;
@@ -1467,7 +1489,6 @@ _evas_image_efl_image_smooth_scale_set(Eo *eo_obj, Evas_Image_Data *o, Eina_Bool
1467 EINA_COW_IMAGE_STATE_WRITE_END(o, state_write); 1489 EINA_COW_IMAGE_STATE_WRITE_END(o, state_write);
1468 1490
1469 o->changed = EINA_TRUE; 1491 o->changed = EINA_TRUE;
1470 obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1471 evas_object_change(eo_obj, obj); 1492 evas_object_change(eo_obj, obj);
1472} 1493}
1473 1494
@@ -1482,6 +1503,7 @@ _evas_image_reload(Eo *eo_obj, Evas_Image_Data *o)
1482{ 1503{
1483 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS); 1504 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1484 1505
1506 evas_object_async_block(obj);
1485 if ((o->preloading) && (o->engine_data)) 1507 if ((o->preloading) && (o->engine_data))
1486 { 1508 {
1487 o->preloading = EINA_FALSE; 1509 o->preloading = EINA_FALSE;
@@ -1516,6 +1538,7 @@ _evas_image_efl_file_save(Eo *eo_obj, Evas_Image_Data *o, const char *file, cons
1516 RGBA_Image *im; 1538 RGBA_Image *im;
1517 if (!o->engine_data) return 0; 1539 if (!o->engine_data) return 0;
1518 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS); 1540 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1541 evas_object_async_block(obj);
1519 o->engine_data = ENFN->image_data_get(ENDT, o->engine_data, 0, &data, &o->load_error); 1542 o->engine_data = ENFN->image_data_get(ENDT, o->engine_data, 0, &data, &o->load_error);
1520 if (flags) 1543 if (flags)
1521 { 1544 {
@@ -1571,6 +1594,7 @@ _evas_image_pixels_import(Eo *eo_obj, Evas_Image_Data *o, Evas_Pixel_Import_Sour
1571{ 1594{
1572 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS); 1595 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1573 1596
1597 evas_object_async_block(obj);
1574 _evas_object_image_cleanup(eo_obj, obj, o); 1598 _evas_object_image_cleanup(eo_obj, obj, o);
1575 if ((pixels->w != o->cur->image.w) || (pixels->h != o->cur->image.h)) return EINA_FALSE; 1599 if ((pixels->w != o->cur->image.w) || (pixels->h != o->cur->image.h)) return EINA_FALSE;
1576 1600
@@ -1631,6 +1655,8 @@ _evas_image_pixels_import(Eo *eo_obj, Evas_Image_Data *o, Evas_Pixel_Import_Sour
1631EOLIAN static void 1655EOLIAN static void
1632_evas_image_pixels_get_callback_set(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o, Evas_Object_Image_Pixels_Get_Cb func, void *data) 1656_evas_image_pixels_get_callback_set(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o, Evas_Object_Image_Pixels_Get_Cb func, void *data)
1633{ 1657{
1658 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1659 evas_object_async_block(obj);
1634 EINA_COW_PIXEL_WRITE_BEGIN(o, pixi_write) 1660 EINA_COW_PIXEL_WRITE_BEGIN(o, pixi_write)
1635 { 1661 {
1636 pixi_write->func.get_pixels = func; 1662 pixi_write->func.get_pixels = func;
@@ -1643,7 +1669,7 @@ EOLIAN static void
1643_evas_image_pixels_dirty_set(Eo *eo_obj, Evas_Image_Data *o, Eina_Bool dirty) 1669_evas_image_pixels_dirty_set(Eo *eo_obj, Evas_Image_Data *o, Eina_Bool dirty)
1644{ 1670{
1645 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS); 1671 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1646 1672 evas_object_async_block(obj);
1647 if (dirty) o->dirty_pixels = EINA_TRUE; 1673 if (dirty) o->dirty_pixels = EINA_TRUE;
1648 else o->dirty_pixels = EINA_FALSE; 1674 else o->dirty_pixels = EINA_FALSE;
1649 o->changed = EINA_TRUE; 1675 o->changed = EINA_TRUE;
@@ -1659,15 +1685,15 @@ _evas_image_pixels_dirty_get(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o)
1659EOLIAN static void 1685EOLIAN static void
1660_evas_image_load_dpi_set(Eo *eo_obj, Evas_Image_Data *o, double dpi) 1686_evas_image_load_dpi_set(Eo *eo_obj, Evas_Image_Data *o, double dpi)
1661{ 1687{
1688 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1662 if (dpi == o->load_opts->dpi) return; 1689 if (dpi == o->load_opts->dpi) return;
1663 1690 evas_object_async_block(obj);
1664 EINA_COW_LOAD_OPTS_WRITE_BEGIN(o, low) 1691 EINA_COW_LOAD_OPTS_WRITE_BEGIN(o, low)
1665 low->dpi = dpi; 1692 low->dpi = dpi;
1666 EINA_COW_LOAD_OPTS_WRITE_END(o, low); 1693 EINA_COW_LOAD_OPTS_WRITE_END(o, low);
1667 1694
1668 if (o->cur->u.file) 1695 if (o->cur->u.file)
1669 { 1696 {
1670 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1671 evas_object_image_unload(eo_obj, 0); 1697 evas_object_image_unload(eo_obj, 0);
1672 evas_object_inform_call_image_unloaded(eo_obj); 1698 evas_object_inform_call_image_unloaded(eo_obj);
1673 evas_object_image_load(eo_obj, obj, o); 1699 evas_object_image_load(eo_obj, obj, o);
@@ -1685,8 +1711,9 @@ _evas_image_load_dpi_get(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o)
1685EOLIAN static void 1711EOLIAN static void
1686_evas_image_efl_image_load_size_set(Eo *eo_obj, Evas_Image_Data *o, int w, int h) 1712_evas_image_efl_image_load_size_set(Eo *eo_obj, Evas_Image_Data *o, int w, int h)
1687{ 1713{
1714 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1688 if ((o->load_opts->w == w) && (o->load_opts->h == h)) return; 1715 if ((o->load_opts->w == w) && (o->load_opts->h == h)) return;
1689 1716 evas_object_async_block(obj);
1690 EINA_COW_LOAD_OPTS_WRITE_BEGIN(o, low) 1717 EINA_COW_LOAD_OPTS_WRITE_BEGIN(o, low)
1691 { 1718 {
1692 low->w = w; 1719 low->w = w;
@@ -1696,7 +1723,6 @@ _evas_image_efl_image_load_size_set(Eo *eo_obj, Evas_Image_Data *o, int w, int h
1696 1723
1697 if (o->cur->u.file) 1724 if (o->cur->u.file)
1698 { 1725 {
1699 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1700 evas_object_image_unload(eo_obj, 0); 1726 evas_object_image_unload(eo_obj, 0);
1701 evas_object_inform_call_image_unloaded(eo_obj); 1727 evas_object_inform_call_image_unloaded(eo_obj);
1702 evas_object_image_load(eo_obj, obj, o); 1728 evas_object_image_load(eo_obj, obj, o);
@@ -1716,14 +1742,15 @@ _evas_image_efl_image_load_size_get(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o,
1716EOLIAN static void 1742EOLIAN static void
1717_evas_image_load_scale_down_set(Eo *eo_obj, Evas_Image_Data *o, int scale_down) 1743_evas_image_load_scale_down_set(Eo *eo_obj, Evas_Image_Data *o, int scale_down)
1718{ 1744{
1745 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1719 if (o->load_opts->scale_down_by == scale_down) return; 1746 if (o->load_opts->scale_down_by == scale_down) return;
1747 evas_object_async_block(obj);
1720 EINA_COW_LOAD_OPTS_WRITE_BEGIN(o, low) 1748 EINA_COW_LOAD_OPTS_WRITE_BEGIN(o, low)
1721 low->scale_down_by = scale_down; 1749 low->scale_down_by = scale_down;
1722 EINA_COW_LOAD_OPTS_WRITE_END(o, low); 1750 EINA_COW_LOAD_OPTS_WRITE_END(o, low);
1723 1751
1724 if (o->cur->u.file) 1752 if (o->cur->u.file)
1725 { 1753 {
1726 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1727 evas_object_image_unload(eo_obj, 0); 1754 evas_object_image_unload(eo_obj, 0);
1728 evas_object_inform_call_image_unloaded(eo_obj); 1755 evas_object_inform_call_image_unloaded(eo_obj);
1729 evas_object_image_load(eo_obj, obj, o); 1756 evas_object_image_load(eo_obj, obj, o);
@@ -1741,9 +1768,10 @@ _evas_image_load_scale_down_get(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o)
1741EOLIAN static void 1768EOLIAN static void
1742_evas_image_load_region_set(Eo *eo_obj, Evas_Image_Data *o, int x, int y, int w, int h) 1769_evas_image_load_region_set(Eo *eo_obj, Evas_Image_Data *o, int x, int y, int w, int h)
1743{ 1770{
1771 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1744 if ((o->load_opts->region.x == x) && (o->load_opts->region.y == y) && 1772 if ((o->load_opts->region.x == x) && (o->load_opts->region.y == y) &&
1745 (o->load_opts->region.w == w) && (o->load_opts->region.h == h)) return; 1773 (o->load_opts->region.w == w) && (o->load_opts->region.h == h)) return;
1746 1774 evas_object_async_block(obj);
1747 EINA_COW_LOAD_OPTS_WRITE_BEGIN(o, low) 1775 EINA_COW_LOAD_OPTS_WRITE_BEGIN(o, low)
1748 { 1776 {
1749 low->region.x = x; 1777 low->region.x = x;
@@ -1755,7 +1783,6 @@ _evas_image_load_region_set(Eo *eo_obj, Evas_Image_Data *o, int x, int y, int w,
1755 1783
1756 if (o->cur->u.file) 1784 if (o->cur->u.file)
1757 { 1785 {
1758 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1759 evas_object_image_unload(eo_obj, 0); 1786 evas_object_image_unload(eo_obj, 0);
1760 evas_object_inform_call_image_unloaded(eo_obj); 1787 evas_object_inform_call_image_unloaded(eo_obj);
1761 evas_object_image_load(eo_obj, obj, o); 1788 evas_object_image_load(eo_obj, obj, o);
@@ -1776,7 +1803,9 @@ _evas_image_load_region_get(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o, int *x,
1776EOLIAN static void 1803EOLIAN static void
1777_evas_image_load_orientation_set(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o, Eina_Bool enable) 1804_evas_image_load_orientation_set(Eo *eo_obj EINA_UNUSED, Evas_Image_Data *o, Eina_Bool enable)
1778{ 1805{
1806 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1779 if (o->load_opts->orientation == !!enable) return; 1807 if (o->load_opts->orientation == !!enable) return;
1808 evas_object_async_block(obj);
1780 1809
1781 EINA_COW_LOAD_OPTS_WRITE_BEGIN(o, low) 1810 EINA_COW_LOAD_OPTS_WRITE_BEGIN(o, low)
1782 low->orientation = !!enable; 1811 low->orientation = !!enable;
@@ -1793,6 +1822,7 @@ EOLIAN static void
1793_evas_image_colorspace_set(Eo *eo_obj, Evas_Image_Data *o, Evas_Colorspace cspace) 1822_evas_image_colorspace_set(Eo *eo_obj, Evas_Image_Data *o, Evas_Colorspace cspace)
1794{ 1823{
1795 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS); 1824 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1825 evas_object_async_block(obj);
1796 1826
1797 _evas_object_image_cleanup(eo_obj, obj, o); 1827 _evas_object_image_cleanup(eo_obj, obj, o);
1798 1828
@@ -1814,6 +1844,7 @@ EOLIAN static void
1814_evas_image_video_surface_set(Eo *eo_obj, Evas_Image_Data *o, Evas_Video_Surface *surf) 1844_evas_image_video_surface_set(Eo *eo_obj, Evas_Image_Data *o, Evas_Video_Surface *surf)
1815{ 1845{
1816 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS); 1846 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1847 evas_object_async_block(obj);
1817 1848
1818 _evas_object_image_cleanup(eo_obj, obj, o); 1849 _evas_object_image_cleanup(eo_obj, obj, o);
1819 if (o->video_surface) 1850 if (o->video_surface)
@@ -1877,6 +1908,7 @@ EOLIAN static void
1877_evas_image_video_surface_caps_set(Eo *eo_obj, Evas_Image_Data *o, unsigned int caps) 1908_evas_image_video_surface_caps_set(Eo *eo_obj, Evas_Image_Data *o, unsigned int caps)
1878{ 1909{
1879 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS); 1910 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1911 evas_object_async_block(obj);
1880 1912
1881 _evas_object_image_cleanup(eo_obj, obj, o); 1913 _evas_object_image_cleanup(eo_obj, obj, o);
1882 1914
@@ -1906,6 +1938,8 @@ evas_object_image_native_surface_set(Evas_Object *eo_obj, Evas_Native_Surface *s
1906 MAGIC_CHECK(eo_obj, Evas_Object, MAGIC_OBJ); 1938 MAGIC_CHECK(eo_obj, Evas_Object, MAGIC_OBJ);
1907 return; 1939 return;
1908 MAGIC_CHECK_END(); 1940 MAGIC_CHECK_END();
1941 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1942 evas_object_async_block(obj);
1909 evas_object_event_callback_del_full 1943 evas_object_event_callback_del_full
1910 (eo_obj, EVAS_CALLBACK_DEL, _on_image_native_surface_del, NULL); 1944 (eo_obj, EVAS_CALLBACK_DEL, _on_image_native_surface_del, NULL);
1911 if (surf) // We need to unset native surf on del to remove shared hash refs 1945 if (surf) // We need to unset native surf on del to remove shared hash refs
@@ -1918,7 +1952,7 @@ EOLIAN static void
1918_evas_image_native_surface_set(Eo *eo_obj, Evas_Image_Data *o, Evas_Native_Surface *surf) 1952_evas_image_native_surface_set(Eo *eo_obj, Evas_Image_Data *o, Evas_Native_Surface *surf)
1919{ 1953{
1920 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS); 1954 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1921 1955 evas_object_async_block(obj);
1922 evas_render_rendering_wait(obj->layer->evas); 1956 evas_render_rendering_wait(obj->layer->evas);
1923 1957
1924 _evas_object_image_cleanup(eo_obj, obj, o); 1958 _evas_object_image_cleanup(eo_obj, obj, o);
@@ -1945,6 +1979,7 @@ EOLIAN static void
1945_evas_image_scale_hint_set(Eo *eo_obj, Evas_Image_Data *o, Evas_Image_Scale_Hint hint) 1979_evas_image_scale_hint_set(Eo *eo_obj, Evas_Image_Data *o, Evas_Image_Scale_Hint hint)
1946{ 1980{
1947 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS); 1981 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1982 evas_object_async_block(obj);
1948 if (o->scale_hint == hint) return; 1983 if (o->scale_hint == hint) return;
1949 o->scale_hint = hint; 1984 o->scale_hint = hint;
1950 if (o->engine_data) 1985 if (o->engine_data)
@@ -1977,6 +2012,7 @@ EOLIAN static void
1977_evas_image_content_hint_set(Eo *eo_obj, Evas_Image_Data *o, Evas_Image_Content_Hint hint) 2012_evas_image_content_hint_set(Eo *eo_obj, Evas_Image_Data *o, Evas_Image_Content_Hint hint)
1978{ 2013{
1979 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS); 2014 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
2015 evas_object_async_block(obj);
1980 if (o->content_hint == hint) return; 2016 if (o->content_hint == hint) return;
1981 o->content_hint = hint; 2017 o->content_hint = hint;
1982 if (o->engine_data) 2018 if (o->engine_data)
@@ -2005,6 +2041,8 @@ evas_object_image_alpha_mask_set(Evas_Object *eo_obj, Eina_Bool ismask)
2005 MAGIC_CHECK(eo_obj, Evas_Object, MAGIC_OBJ); 2041 MAGIC_CHECK(eo_obj, Evas_Object, MAGIC_OBJ);
2006 return; 2042 return;
2007 MAGIC_CHECK_END(); 2043 MAGIC_CHECK_END();
2044 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
2045 evas_object_async_block(obj);
2008 if (!ismask) return; 2046 if (!ismask) return;
2009 /* Convert to A8 if not already */ 2047 /* Convert to A8 if not already */
2010 2048
@@ -2122,7 +2160,7 @@ _evas_image_animated_frame_set(Eo *eo_obj, Evas_Image_Data *o, int frame_index)
2122 if (o->cur->frame == frame_index) return; 2160 if (o->cur->frame == frame_index) return;
2123 2161
2124 if (!evas_object_image_animated_get(eo_obj)) return; 2162 if (!evas_object_image_animated_get(eo_obj)) return;
2125 2163 evas_object_async_block(obj);
2126 frame_count = evas_object_image_animated_frame_count_get(eo_obj); 2164 frame_count = evas_object_image_animated_frame_count_get(eo_obj);
2127 2165
2128 /* limit the size of frame to FRAME_MAX */ 2166 /* limit the size of frame to FRAME_MAX */
@@ -2149,6 +2187,7 @@ _evas_image_animated_frame_set(Eo *eo_obj, Evas_Image_Data *o, int frame_index)
2149EOLIAN void 2187EOLIAN void
2150_evas_canvas_image_cache_flush(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e) 2188_evas_canvas_image_cache_flush(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e)
2151{ 2189{
2190 evas_canvas_async_block(e);
2152 evas_render_rendering_wait(e); 2191 evas_render_rendering_wait(e);
2153 e->engine.func->image_cache_flush(e->engine.data.output); 2192 e->engine.func->image_cache_flush(e->engine.data.output);
2154} 2193}
@@ -2158,6 +2197,7 @@ _evas_canvas_image_cache_reload(Eo *eo_e, Evas_Public_Data *e)
2158{ 2197{
2159 Evas_Layer *layer; 2198 Evas_Layer *layer;
2160 2199
2200 evas_canvas_async_block(e);
2161 evas_image_cache_flush(eo_e); 2201 evas_image_cache_flush(eo_e);
2162 EINA_INLIST_FOREACH(e->layers, layer) 2202 EINA_INLIST_FOREACH(e->layers, layer)
2163 { 2203 {
@@ -2195,6 +2235,7 @@ EOLIAN void
2195_evas_canvas_image_cache_set(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e, int size) 2235_evas_canvas_image_cache_set(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e, int size)
2196{ 2236{
2197 if (size < 0) size = 0; 2237 if (size < 0) size = 0;
2238 evas_canvas_async_block(e);
2198 evas_render_rendering_wait(e); 2239 evas_render_rendering_wait(e);
2199 e->engine.func->image_cache_set(e->engine.data.output, size); 2240 e->engine.func->image_cache_set(e->engine.data.output, size);
2200} 2241}
@@ -2513,6 +2554,7 @@ evas_object_image_unload(Evas_Object *eo_obj, Eina_Bool dirty)
2513 (o->pixels_checked_out > 0)) return; 2554 (o->pixels_checked_out > 0)) return;
2514 2555
2515 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS); 2556 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
2557 evas_object_async_block(obj);
2516 if (dirty) 2558 if (dirty)
2517 { 2559 {
2518 if (o->engine_data) 2560 if (o->engine_data)
@@ -4660,13 +4702,14 @@ _evas_object_image_video_overlay_do(Evas_Object *eo_obj)
4660EOLIAN static void 4702EOLIAN static void
4661_evas_image_filter_program_set(Eo *eo_obj, Evas_Image_Data *o, const char *arg) 4703_evas_image_filter_program_set(Eo *eo_obj, Evas_Image_Data *o, const char *arg)
4662{ 4704{
4663 Evas_Object_Protected_Data *obj; 4705 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
4664 Evas_Filter_Program *pgm = NULL; 4706 Evas_Filter_Program *pgm = NULL;
4665 4707
4666 if (!o) return; 4708 if (!o) return;
4667 if (o->cur->filter->code == arg) return; 4709 if (o->cur->filter->code == arg) return;
4668 if (o->cur->filter->code && arg && !strcmp(arg, o->cur->filter->code)) return; 4710 if (o->cur->filter->code && arg && !strcmp(arg, o->cur->filter->code)) return;
4669 4711
4712 evas_object_async_block(obj);
4670 EINA_COW_IMAGE_STATE_WRITE_BEGIN(o, state_write) 4713 EINA_COW_IMAGE_STATE_WRITE_BEGIN(o, state_write)
4671 EINA_COW_IMAGE_FILTER_WRITE_BEGIN(state_write, fcow) 4714 EINA_COW_IMAGE_FILTER_WRITE_BEGIN(state_write, fcow)
4672 { 4715 {
@@ -4693,7 +4736,6 @@ _evas_image_filter_program_set(Eo *eo_obj, Evas_Image_Data *o, const char *arg)
4693 EINA_COW_IMAGE_STATE_WRITE_END(o, state_write); 4736 EINA_COW_IMAGE_STATE_WRITE_END(o, state_write);
4694 4737
4695 // Update object 4738 // Update object
4696 obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
4697 o->changed = EINA_TRUE; 4739 o->changed = EINA_TRUE;
4698 evas_object_change(eo_obj, obj); 4740 evas_object_change(eo_obj, obj);
4699} 4741}
@@ -4745,6 +4787,7 @@ _evas_image_filter_source_set(Eo *eo_obj, Evas_Image_Data *o, const char *name,
4745 Eina_Hash *sources = o->cur->filter->sources; 4787 Eina_Hash *sources = o->cur->filter->sources;
4746 4788
4747 obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS); 4789 obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
4790 evas_object_async_block(obj);
4748 if (eo_source) source = eo_data_scope_get(eo_source, EVAS_OBJECT_CLASS); 4791 if (eo_source) source = eo_data_scope_get(eo_source, EVAS_OBJECT_CLASS);
4749 4792
4750 if (!name) 4793 if (!name)
diff --git a/src/lib/evas/canvas/evas_object_line.c b/src/lib/evas/canvas/evas_object_line.c
index 4c2d789..8090c61 100644
--- a/src/lib/evas/canvas/evas_object_line.c
+++ b/src/lib/evas/canvas/evas_object_line.c
@@ -118,6 +118,7 @@ _evas_line_xy_set(Eo *eo_obj, Evas_Line_Data *_pd, Evas_Coord x1, Evas_Coord y1,
118 (y1 == (obj->cur->geometry.y + o->cur.y1)) && 118 (y1 == (obj->cur->geometry.y + o->cur.y1)) &&
119 (x2 == (obj->cur->geometry.x + o->cur.x2)) && 119 (x2 == (obj->cur->geometry.x + o->cur.x2)) &&
120 (y2 == (obj->cur->geometry.y + o->cur.y2))) return; 120 (y2 == (obj->cur->geometry.y + o->cur.y2))) return;
121 evas_object_async_block(obj);
121 122
122 if (!(obj->layer->evas->is_frozen)) 123 if (!(obj->layer->evas->is_frozen))
123 { 124 {
diff --git a/src/lib/evas/canvas/evas_object_main.c b/src/lib/evas/canvas/evas_object_main.c
index da97914..8d286fd 100644
--- a/src/lib/evas/canvas/evas_object_main.c
+++ b/src/lib/evas/canvas/evas_object_main.c
@@ -645,6 +645,7 @@ evas_object_del(Evas_Object *eo_obj)
645 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, MY_CLASS); 645 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, MY_CLASS);
646 646
647 if (!obj) return; 647 if (!obj) return;
648 evas_object_async_block(obj);
648 if (obj->delete_me || obj->eo_del_called) return; 649 if (obj->delete_me || obj->eo_del_called) return;
649 if (obj->ref > 0) 650 if (obj->ref > 0)
650 { 651 {
@@ -764,6 +765,7 @@ _evas_object_position_set(Eo *eo_obj, Evas_Object_Protected_Data *obj, Evas_Coor
764 if (obj->delete_me) return; 765 if (obj->delete_me) return;
765 if (!obj->layer) return; 766 if (!obj->layer) return;
766 767
768 evas_object_async_block(obj);
767 if (evas_object_intercept_call_move(eo_obj, obj, x, y)) return; 769 if (evas_object_intercept_call_move(eo_obj, obj, x, y)) return;
768 770
769 if (obj->doing.in_move > 0) 771 if (obj->doing.in_move > 0)
@@ -846,6 +848,7 @@ _evas_object_size_set(Eo *eo_obj, Evas_Object_Protected_Data *obj, Evas_Coord w,
846 if (!obj->layer) return; 848 if (!obj->layer) return;
847 if (w < 0) w = 0; if (h < 0) h = 0; 849 if (w < 0) w = 0; if (h < 0) h = 0;
848 850
851 evas_object_async_block(obj);
849 if (evas_object_intercept_call_resize(eo_obj, obj, w, h)) return; 852 if (evas_object_intercept_call_resize(eo_obj, obj, w, h)) return;
850 853
851 if (obj->doing.in_resize > 0) 854 if (obj->doing.in_resize > 0)
@@ -978,6 +981,7 @@ _evas_object_size_hint_display_mode_set(Eo *eo_obj EINA_UNUSED, Evas_Object_Prot
978{ 981{
979 if (!obj) return; 982 if (!obj) return;
980 if (obj->delete_me) return; 983 if (obj->delete_me) return;
984 evas_object_async_block(obj);
981 _evas_object_size_hint_alloc(eo_obj, obj); 985 _evas_object_size_hint_alloc(eo_obj, obj);
982 if (obj->size_hints->dispmode == dispmode) return; 986 if (obj->size_hints->dispmode == dispmode) return;
983 obj->size_hints->dispmode = dispmode; 987 obj->size_hints->dispmode = dispmode;
@@ -1002,6 +1006,7 @@ _evas_object_size_hint_min_set(Eo *eo_obj, Evas_Object_Protected_Data *obj, Evas
1002{ 1006{
1003 if (obj->delete_me) 1007 if (obj->delete_me)
1004 return; 1008 return;
1009 evas_object_async_block(obj);
1005 _evas_object_size_hint_alloc(eo_obj, obj); 1010 _evas_object_size_hint_alloc(eo_obj, obj);
1006 if ((obj->size_hints->min.w == w) && (obj->size_hints->min.h == h)) return; 1011 if ((obj->size_hints->min.w == w) && (obj->size_hints->min.h == h)) return;
1007 obj->size_hints->min.w = w; 1012 obj->size_hints->min.w = w;
@@ -1027,6 +1032,7 @@ _evas_object_size_hint_max_set(Eo *eo_obj, Evas_Object_Protected_Data *obj, Evas
1027{ 1032{
1028 if (obj->delete_me) 1033 if (obj->delete_me)
1029 return; 1034 return;
1035 evas_object_async_block(obj);
1030 _evas_object_size_hint_alloc(eo_obj, obj); 1036 _evas_object_size_hint_alloc(eo_obj, obj);
1031 if ((obj->size_hints->max.w == w) && (obj->size_hints->max.h == h)) return; 1037 if ((obj->size_hints->max.w == w) && (obj->size_hints->max.h == h)) return;
1032 obj->size_hints->max.w = w; 1038 obj->size_hints->max.w = w;
@@ -1052,6 +1058,7 @@ _evas_object_size_hint_request_set(Eo *eo_obj, Evas_Object_Protected_Data *obj,
1052{ 1058{
1053 if (obj->delete_me) 1059 if (obj->delete_me)
1054 return; 1060 return;
1061 evas_object_async_block(obj);
1055 _evas_object_size_hint_alloc(eo_obj, obj); 1062 _evas_object_size_hint_alloc(eo_obj, obj);
1056 if ((obj->size_hints->request.w == w) && (obj->size_hints->request.h == h)) return; 1063 if ((obj->size_hints->request.w == w) && (obj->size_hints->request.h == h)) return;
1057 obj->size_hints->request.w = w; 1064 obj->size_hints->request.w = w;
@@ -1079,6 +1086,7 @@ _evas_object_size_hint_aspect_set(Eo *eo_obj, Evas_Object_Protected_Data *obj, E
1079{ 1086{
1080 if (obj->delete_me) 1087 if (obj->delete_me)
1081 return; 1088 return;
1089 evas_object_async_block(obj);
1082 _evas_object_size_hint_alloc(eo_obj, obj); 1090 _evas_object_size_hint_alloc(eo_obj, obj);
1083 if ((obj->size_hints->aspect.mode == aspect) && (obj->size_hints->aspect.size.w == w) && (obj->size_hints->aspect.size.h == h)) return; 1091 if ((obj->size_hints->aspect.mode == aspect) && (obj->size_hints->aspect.size.w == w) && (obj->size_hints->aspect.size.h == h)) return;
1084 obj->size_hints->aspect.mode = aspect; 1092 obj->size_hints->aspect.mode = aspect;
@@ -1105,6 +1113,7 @@ _evas_object_size_hint_align_set(Eo *eo_obj, Evas_Object_Protected_Data *obj, do
1105{ 1113{
1106 if (obj->delete_me) 1114 if (obj->delete_me)
1107 return; 1115 return;
1116 evas_object_async_block(obj);
1108 _evas_object_size_hint_alloc(eo_obj, obj); 1117 _evas_object_size_hint_alloc(eo_obj, obj);
1109 if ((obj->size_hints->align.x == x) && (obj->size_hints->align.y == y)) return; 1118 if ((obj->size_hints->align.x == x) && (obj->size_hints->align.y == y)) return;
1110 obj->size_hints->align.x = x; 1119 obj->size_hints->align.x = x;
@@ -1130,6 +1139,7 @@ _evas_object_size_hint_weight_set(Eo *eo_obj, Evas_Object_Protected_Data *obj, d
1130{ 1139{
1131 if (obj->delete_me) 1140 if (obj->delete_me)
1132 return; 1141 return;
1142 evas_object_async_block(obj);
1133 _evas_object_size_hint_alloc(eo_obj, obj); 1143 _evas_object_size_hint_alloc(eo_obj, obj);
1134 if ((obj->size_hints->weight.x == x) && (obj->size_hints->weight.y == y)) return; 1144 if ((obj->size_hints->weight.x == x) && (obj->size_hints->weight.y == y)) return;
1135 obj->size_hints->weight.x = x; 1145 obj->size_hints->weight.x = x;
@@ -1158,6 +1168,7 @@ _evas_object_size_hint_padding_set(Eo *eo_obj, Evas_Object_Protected_Data *obj,
1158{ 1168{
1159 if (obj->delete_me) 1169 if (obj->delete_me)
1160 return; 1170 return;
1171 evas_object_async_block(obj);
1161 _evas_object_size_hint_alloc(eo_obj, obj); 1172 _evas_object_size_hint_alloc(eo_obj, obj);
1162 if ((obj->size_hints->padding.l == l) && (obj->size_hints->padding.r == r) && (obj->size_hints->padding.t == t) && (obj->size_hints->padding.b == b)) return; 1173 if ((obj->size_hints->padding.l == l) && (obj->size_hints->padding.r == r) && (obj->size_hints->padding.t == t) && (obj->size_hints->padding.b == b)) return;
1163 obj->size_hints->padding.l = l; 1174 obj->size_hints->padding.l = l;
@@ -1187,6 +1198,7 @@ evas_object_hide(Evas_Object *eo_obj)
1187static void 1198static void
1188_evas_object_visibility_set(Eo *eo_obj, Evas_Object_Protected_Data *obj, Eina_Bool visible) 1199_evas_object_visibility_set(Eo *eo_obj, Evas_Object_Protected_Data *obj, Eina_Bool visible)
1189{ 1200{
1201 evas_object_async_block(obj);
1190 if (visible) _show(eo_obj, obj); 1202 if (visible) _show(eo_obj, obj);
1191 else _hide(eo_obj, obj); 1203 else _hide(eo_obj, obj);
1192} 1204}
@@ -1390,6 +1402,7 @@ _evas_object_color_set(Eo *eo_obj, Evas_Object_Protected_Data *obj, int r, int g
1390 ERR("Evas only handles pre multiplied colors!"); 1402 ERR("Evas only handles pre multiplied colors!");
1391 } 1403 }
1392 1404
1405 evas_object_async_block(obj);
1393 if (evas_object_intercept_call_color_set(eo_obj, obj, r, g, b, a)) return; 1406 if (evas_object_intercept_call_color_set(eo_obj, obj, r, g, b, a)) return;
1394 if (obj->is_smart) 1407 if (obj->is_smart)
1395 { 1408 {
@@ -1442,6 +1455,7 @@ _evas_object_anti_alias_set(Eo *eo_obj, Evas_Object_Protected_Data *obj, Eina_Bo
1442 anti_alias = !!anti_alias; 1455 anti_alias = !!anti_alias;
1443 if (obj->cur->anti_alias == anti_alias)return; 1456 if (obj->cur->anti_alias == anti_alias)return;
1444 1457
1458 evas_object_async_block(obj);
1445 EINA_COW_STATE_WRITE_BEGIN(obj, state_write, cur) 1459 EINA_COW_STATE_WRITE_BEGIN(obj, state_write, cur)
1446 { 1460 {
1447 state_write->anti_alias = anti_alias; 1461 state_write->anti_alias = anti_alias;
@@ -1464,6 +1478,7 @@ _evas_object_scale_set(Eo *eo_obj, Evas_Object_Protected_Data *obj, double scale
1464 if (obj->delete_me) return; 1478 if (obj->delete_me) return;
1465 if (obj->cur->scale == scale) return; 1479 if (obj->cur->scale == scale) return;
1466 1480
1481 evas_object_async_block(obj);
1467 EINA_COW_STATE_WRITE_BEGIN(obj, state_write, cur) 1482 EINA_COW_STATE_WRITE_BEGIN(obj, state_write, cur)
1468 { 1483 {
1469 state_write->scale = scale; 1484 state_write->scale = scale;
@@ -1487,6 +1502,7 @@ _evas_object_render_op_set(Eo *eo_obj, Evas_Object_Protected_Data *obj, Evas_Ren
1487 if (obj->delete_me) return; 1502 if (obj->delete_me) return;
1488 if (obj->cur->render_op == render_op) return; 1503 if (obj->cur->render_op == render_op) return;
1489 1504
1505 evas_object_async_block(obj);
1490 EINA_COW_STATE_WRITE_BEGIN(obj, state_write, cur) 1506 EINA_COW_STATE_WRITE_BEGIN(obj, state_write, cur)
1491 { 1507 {
1492 state_write->render_op = render_op; 1508 state_write->render_op = render_op;
@@ -1841,6 +1857,7 @@ _evas_object_type_set(Eo *eo_obj EINA_UNUSED, Evas_Object_Protected_Data *obj, c
1841EOLIAN static void 1857EOLIAN static void
1842_evas_object_precise_is_inside_set(Eo *eo_obj EINA_UNUSED, Evas_Object_Protected_Data *obj, Eina_Bool precise) 1858_evas_object_precise_is_inside_set(Eo *eo_obj EINA_UNUSED, Evas_Object_Protected_Data *obj, Eina_Bool precise)
1843{ 1859{
1860 evas_object_async_block(obj);
1844 obj->precise_is_inside = precise; 1861 obj->precise_is_inside = precise;
1845} 1862}
1846 1863
@@ -1853,6 +1870,7 @@ _evas_object_precise_is_inside_get(Eo *eo_obj EINA_UNUSED, Evas_Object_Protected
1853EOLIAN static void 1870EOLIAN static void
1854_evas_object_static_clip_set(Eo *eo_obj EINA_UNUSED, Evas_Object_Protected_Data *obj, Eina_Bool is_static_clip) 1871_evas_object_static_clip_set(Eo *eo_obj EINA_UNUSED, Evas_Object_Protected_Data *obj, Eina_Bool is_static_clip)
1855{ 1872{
1873 evas_object_async_block(obj);
1856 obj->is_static_clip = is_static_clip; 1874 obj->is_static_clip = is_static_clip;
1857} 1875}
1858 1876
@@ -1881,6 +1899,7 @@ _evas_object_is_frame_object_set(Eo *eo_obj, Evas_Object_Protected_Data *obj, Ei
1881{ 1899{
1882 Evas_Coord x, y; 1900 Evas_Coord x, y;
1883 1901
1902 evas_object_async_block(obj);
1884 evas_object_geometry_get(eo_obj, &x, &y, NULL, NULL); 1903 evas_object_geometry_get(eo_obj, &x, &y, NULL, NULL);
1885 1904
1886 _is_frame_flag_set(obj, is_frame); 1905 _is_frame_flag_set(obj, is_frame);
diff --git a/src/lib/evas/canvas/evas_object_polygon.c b/src/lib/evas/canvas/evas_object_polygon.c
index cd27199..4e5ed04 100644
--- a/src/lib/evas/canvas/evas_object_polygon.c
+++ b/src/lib/evas/canvas/evas_object_polygon.c
@@ -124,7 +124,7 @@ _evas_polygon_point_add(Eo *eo_obj, Evas_Polygon_Data *_pd, Evas_Coord x, Evas_C
124 Evas_Coord min_x, max_x, min_y, max_y; 124 Evas_Coord min_x, max_x, min_y, max_y;
125 int is, was = 0; 125 int is, was = 0;
126 126
127 127 evas_object_async_block(obj);
128 if (!obj->layer->evas->is_frozen) 128 if (!obj->layer->evas->is_frozen)
129 { 129 {
130 if (!evas_event_passes_through(eo_obj, obj) && 130 if (!evas_event_passes_through(eo_obj, obj) &&
@@ -230,6 +230,7 @@ _evas_polygon_points_clear(Eo *eo_obj, Evas_Polygon_Data *_pd)
230 void *list_data; 230 void *list_data;
231 int is, was; 231 int is, was;
232 232
233 evas_object_async_block(obj);
233 was = evas_object_is_in_output_rect(eo_obj, obj, 234 was = evas_object_is_in_output_rect(eo_obj, obj,
234 obj->layer->evas->pointer.x, 235 obj->layer->evas->pointer.x,
235 obj->layer->evas->pointer.y, 1, 1); 236 obj->layer->evas->pointer.y, 1, 1);
diff --git a/src/lib/evas/canvas/evas_object_smart.c b/src/lib/evas/canvas/evas_object_smart.c
index 3345776..4623fc0 100644
--- a/src/lib/evas/canvas/evas_object_smart.c
+++ b/src/lib/evas/canvas/evas_object_smart.c
@@ -237,6 +237,7 @@ _evas_object_smart_member_add(Eo *smart_obj, Evas_Smart_Data *o, Evas_Object *eo
237 237
238 if (obj->smart.parent == smart_obj) return; 238 if (obj->smart.parent == smart_obj) return;
239 239
240 evas_object_async_block(obj);
240 if (obj->smart.parent) evas_object_smart_member_del(eo_obj); 241 if (obj->smart.parent) evas_object_smart_member_del(eo_obj);
241 242
242 o->member_count++; 243 o->member_count++;
@@ -283,6 +284,7 @@ _evas_object_smart_member_del(Eo *smart_obj, Evas_Smart_Data *_pd EINA_UNUSED, E
283 284
284 if (!obj->smart.parent) return; 285 if (!obj->smart.parent) return;
285 286
287 evas_object_async_block(obj);
286 Evas_Object_Protected_Data *smart = eo_data_scope_get(smart_obj, EVAS_OBJECT_CLASS); 288 Evas_Object_Protected_Data *smart = eo_data_scope_get(smart_obj, EVAS_OBJECT_CLASS);
287 if (smart->smart.smart && smart->smart.smart->smart_class->member_del) 289 if (smart->smart.smart && smart->smart.smart->smart_class->member_del)
288 smart->smart.smart->smart_class->member_del(smart_obj, eo_obj); 290 smart->smart.smart->smart_class->member_del(smart_obj, eo_obj);
@@ -403,17 +405,19 @@ _evas_object_smart_iterator_free(Evas_Object_Smart_Iterator *it)
403 405
404// Should we have an eo_children_iterator_new API and just inherit from it ? 406// Should we have an eo_children_iterator_new API and just inherit from it ?
405EOLIAN static Eina_Iterator* 407EOLIAN static Eina_Iterator*
406_evas_object_smart_iterator_new(Eo *o, Evas_Smart_Data *priv) 408_evas_object_smart_iterator_new(Eo *eo_obj, Evas_Smart_Data *priv)
407{ 409{
408 Evas_Object_Smart_Iterator *it; 410 Evas_Object_Smart_Iterator *it;
411 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
409 412
410 if (!priv->contained) return NULL; 413 if (!priv->contained) return NULL;
411 414
415 evas_object_async_block(obj);
412 it = calloc(1, sizeof(Evas_Object_Smart_Iterator)); 416 it = calloc(1, sizeof(Evas_Object_Smart_Iterator));
413 if (!it) return NULL; 417 if (!it) return NULL;
414 418
415 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); 419 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
416 it->parent = eo_ref(o); 420 it->parent = eo_ref(eo_obj);
417 it->current = priv->contained; 421 it->current = priv->contained;
418 422
419 it->iterator.next = FUNC_ITERATOR_NEXT(_evas_object_smart_iterator_next); 423 it->iterator.next = FUNC_ITERATOR_NEXT(_evas_object_smart_iterator_next);
@@ -424,13 +428,13 @@ _evas_object_smart_iterator_new(Eo *o, Evas_Smart_Data *priv)
424} 428}
425 429
426EOLIAN static Eina_List* 430EOLIAN static Eina_List*
427_evas_object_smart_members_get(Eo *eo_obj EINA_UNUSED, Evas_Smart_Data *o) 431_evas_object_smart_members_get(Eo *eo_obj, Evas_Smart_Data *o)
428{ 432{
429 Eina_List *members; 433 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
430 434 Eina_List *members = NULL;
431 Eina_Inlist *member; 435 Eina_Inlist *member;
432 436
433 members = NULL; 437 evas_object_async_block(obj);
434 for (member = o->contained; member; member = member->next) 438 for (member = o->contained; member; member = member->next)
435 members = eina_list_append(members, ((Evas_Object_Protected_Data *)member)->object); 439 members = eina_list_append(members, ((Evas_Object_Protected_Data *)member)->object);
436 440
@@ -440,9 +444,11 @@ _evas_object_smart_members_get(Eo *eo_obj EINA_UNUSED, Evas_Smart_Data *o)
440const Eina_Inlist * 444const Eina_Inlist *
441evas_object_smart_members_get_direct(const Evas_Object *eo_obj) 445evas_object_smart_members_get_direct(const Evas_Object *eo_obj)
442{ 446{
447 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
443 MAGIC_CHECK(eo_obj, Evas_Object, MAGIC_OBJ); 448 MAGIC_CHECK(eo_obj, Evas_Object, MAGIC_OBJ);
444 return NULL; 449 return NULL;
445 MAGIC_CHECK_END(); 450 MAGIC_CHECK_END();
451 evas_object_async_block(obj);
446 if (!eo_isa(eo_obj, MY_CLASS)) return NULL; 452 if (!eo_isa(eo_obj, MY_CLASS)) return NULL;
447 Evas_Smart_Data *o = eo_data_scope_get(eo_obj, MY_CLASS); 453 Evas_Smart_Data *o = eo_data_scope_get(eo_obj, MY_CLASS);
448 return o->contained; 454 return o->contained;
@@ -858,6 +864,7 @@ _evas_object_smart_need_recalculate_set(Eo *eo_obj, Evas_Smart_Data *o, Eina_Boo
858 // XXX: do i need this? 864 // XXX: do i need this?
859 if (!obj || !obj->layer || obj->delete_me) return; 865 if (!obj || !obj->layer || obj->delete_me) return;
860 866
867 evas_object_async_block(obj);
861 /* remove this entry from calc_list or processed list */ 868 /* remove this entry from calc_list or processed list */
862 if (eina_clist_element_is_linked(&o->calc_entry)) 869 if (eina_clist_element_is_linked(&o->calc_entry))
863 eina_clist_remove(&o->calc_entry); 870 eina_clist_remove(&o->calc_entry);
@@ -893,6 +900,7 @@ _evas_object_smart_calculate(Eo *eo_obj, Evas_Smart_Data *o)
893 if (!obj->smart.smart || !obj->smart.smart->smart_class->calculate) 900 if (!obj->smart.smart || !obj->smart.smart->smart_class->calculate)
894 return; 901 return;
895 902
903 evas_object_async_block(obj);
896 o->need_recalculate = 0; 904 o->need_recalculate = 0;
897 obj->smart.smart->smart_class->calculate(eo_obj); 905 obj->smart.smart->smart_class->calculate(eo_obj);
898} 906}
@@ -921,6 +929,7 @@ evas_call_smarts_calculate(Evas *eo_e)
921 Eina_Clist *elem; 929 Eina_Clist *elem;
922 Evas_Public_Data *e = eo_data_scope_get(eo_e, EVAS_CANVAS_CLASS); 930 Evas_Public_Data *e = eo_data_scope_get(eo_e, EVAS_CANVAS_CLASS);
923 931
932 evas_canvas_async_block(e);
924 evas_event_freeze(eo_e); 933 evas_event_freeze(eo_e);
925 e->in_smart_calc++; 934 e->in_smart_calc++;
926 935
@@ -963,6 +972,7 @@ EOLIAN static void
963_evas_object_smart_changed(Eo *eo_obj, Evas_Smart_Data *o EINA_UNUSED) 972_evas_object_smart_changed(Eo *eo_obj, Evas_Smart_Data *o EINA_UNUSED)
964{ 973{
965 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS); 974 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
975 evas_object_async_block(obj);
966 evas_object_change(eo_obj, obj); 976 evas_object_change(eo_obj, obj);
967 eo_do(eo_obj, evas_obj_smart_need_recalculate_set(1)); 977 eo_do(eo_obj, evas_obj_smart_need_recalculate_set(1));
968} 978}
@@ -1297,6 +1307,7 @@ evas_object_smart_need_bounding_box_update(Evas_Object *eo_obj)
1297 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS); 1307 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1298 Evas_Smart_Data *o = eo_data_scope_get(eo_obj, MY_CLASS); 1308 Evas_Smart_Data *o = eo_data_scope_get(eo_obj, MY_CLASS);
1299 1309
1310 evas_object_async_block(obj);
1300 if (o->update_boundingbox_needed) return; 1311 if (o->update_boundingbox_needed) return;
1301 o->update_boundingbox_needed = EINA_TRUE; 1312 o->update_boundingbox_needed = EINA_TRUE;
1302 1313
@@ -1318,6 +1329,7 @@ evas_object_smart_bounding_box_update(Evas_Object *eo_obj, Evas_Object_Protected
1318 return; 1329 return;
1319 MAGIC_CHECK_END(); 1330 MAGIC_CHECK_END();
1320 1331
1332 evas_object_async_block(obj);
1321 os = eo_data_scope_get(eo_obj, MY_CLASS); 1333 os = eo_data_scope_get(eo_obj, MY_CLASS);
1322 1334
1323 if (!os->update_boundingbox_needed) return; 1335 if (!os->update_boundingbox_needed) return;
diff --git a/src/lib/evas/canvas/evas_object_text.c b/src/lib/evas/canvas/evas_object_text.c
index 8eadf07..004001f 100644
--- a/src/lib/evas/canvas/evas_object_text.c
+++ b/src/lib/evas/canvas/evas_object_text.c
@@ -380,11 +380,13 @@ _evas_text_eo_base_constructor(Eo *eo_obj, Evas_Text_Data *o)
380} 380}
381 381
382EOLIAN static void 382EOLIAN static void
383_evas_text_efl_text_properties_font_source_set(Eo *eo_obj EINA_UNUSED, Evas_Text_Data *o, const char *font_source) 383_evas_text_efl_text_properties_font_source_set(Eo *eo_obj, Evas_Text_Data *o, const char *font_source)
384{ 384{
385 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
385 if ((o->cur.source) && (font_source) && 386 if ((o->cur.source) && (font_source) &&
386 (!strcmp(o->cur.source, font_source))) 387 (!strcmp(o->cur.source, font_source)))
387 return; 388 return;
389 evas_object_async_block(obj);
388 /* 390 /*
389 if (o->cur.source) eina_stringshare_del(o->cur.source); 391 if (o->cur.source) eina_stringshare_del(o->cur.source);
390 if (font_source) o->cur.source = eina_stringshare_add(font_source); 392 if (font_source) o->cur.source = eina_stringshare_add(font_source);
@@ -415,6 +417,7 @@ _evas_text_filter_changed_set(Evas_Text_Data *o, Eina_Bool val)
415EOLIAN static void 417EOLIAN static void
416_evas_text_efl_text_properties_font_set(Eo *eo_obj, Evas_Text_Data *o, const char *font, Evas_Font_Size size) 418_evas_text_efl_text_properties_font_set(Eo *eo_obj, Evas_Text_Data *o, const char *font, Evas_Font_Size size)
417{ 419{
420 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
418 Eina_Bool is, was = EINA_FALSE; 421 Eina_Bool is, was = EINA_FALSE;
419 Eina_Bool pass = EINA_FALSE, freeze = EINA_FALSE; 422 Eina_Bool pass = EINA_FALSE, freeze = EINA_FALSE;
420 Eina_Bool source_invisible = EINA_FALSE; 423 Eina_Bool source_invisible = EINA_FALSE;
@@ -423,6 +426,7 @@ _evas_text_efl_text_properties_font_set(Eo *eo_obj, Evas_Text_Data *o, const cha
423 426
424 if ((!font) || (size <= 0)) return; 427 if ((!font) || (size <= 0)) return;
425 428
429 evas_object_async_block(obj);
426 if (!(o->cur.font && !strcmp(font, o->cur.font))) 430 if (!(o->cur.font && !strcmp(font, o->cur.font)))
427 { 431 {
428 fdesc = evas_font_desc_new(); 432 fdesc = evas_font_desc_new();
@@ -447,7 +451,6 @@ _evas_text_efl_text_properties_font_set(Eo *eo_obj, Evas_Text_Data *o, const cha
447 eina_stringshare_replace(&o->cur.font, font); 451 eina_stringshare_replace(&o->cur.font, font);
448 o->prev.font = NULL; 452 o->prev.font = NULL;
449 453
450 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
451 if (!(obj->layer->evas->is_frozen)) 454 if (!(obj->layer->evas->is_frozen))
452 { 455 {
453 pass = evas_event_passes_through(eo_obj, obj); 456 pass = evas_event_passes_through(eo_obj, obj);
@@ -927,6 +930,7 @@ _evas_text_evas_object_size_set(Eo *eo_obj, Evas_Text_Data *o, Evas_Coord w, Eva
927{ 930{
928 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS); 931 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
929 932
933 evas_object_async_block(obj);
930 EINA_COW_STATE_WRITE_BEGIN(obj, state_write, cur) 934 EINA_COW_STATE_WRITE_BEGIN(obj, state_write, cur)
931 { 935 {
932 state_write->geometry.w = w; 936 state_write->geometry.w = w;
@@ -944,6 +948,7 @@ _evas_text_ellipsis_set(Eo *eo_obj, Evas_Text_Data *o, double ellipsis)
944 948
945 if (o->cur.ellipsis == ellipsis) return; 949 if (o->cur.ellipsis == ellipsis) return;
946 950
951 evas_object_async_block(obj);
947 o->cur.ellipsis = ellipsis; 952 o->cur.ellipsis = ellipsis;
948 o->changed = 1; 953 o->changed = 1;
949 _evas_text_filter_changed_set(o, EINA_TRUE); 954 _evas_text_filter_changed_set(o, EINA_TRUE);
@@ -979,15 +984,16 @@ _evas_text_eo_base_dbg_info_get(Eo *eo_obj, Evas_Text_Data *o EINA_UNUSED, Eo_Db
979EOLIAN static void 984EOLIAN static void
980_evas_text_efl_text_text_set(Eo *eo_obj, Evas_Text_Data *o, const char *_text) 985_evas_text_efl_text_text_set(Eo *eo_obj, Evas_Text_Data *o, const char *_text)
981{ 986{
987 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
982 int is, was, len; 988 int is, was, len;
983 Eina_Unicode *text; 989 Eina_Unicode *text;
984 990
985 if ((o->cur.utf8_text) && (_text) && (!strcmp(o->cur.utf8_text, _text))) 991 if ((o->cur.utf8_text) && (_text) && (!strcmp(o->cur.utf8_text, _text)))
986 return; 992 return;
993 evas_object_async_block(obj);
987 text = eina_unicode_utf8_to_unicode(_text, &len); 994 text = eina_unicode_utf8_to_unicode(_text, &len);
988 995
989 if (!text) text = eina_unicode_strdup(EINA_UNICODE_EMPTY_STRING); 996 if (!text) text = eina_unicode_strdup(EINA_UNICODE_EMPTY_STRING);
990 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
991 was = evas_object_is_in_output_rect(eo_obj, obj, 997 was = evas_object_is_in_output_rect(eo_obj, obj,
992 obj->layer->evas->pointer.x, 998 obj->layer->evas->pointer.x,
993 obj->layer->evas->pointer.y, 1, 1); 999 obj->layer->evas->pointer.y, 1, 1);
@@ -1020,8 +1026,10 @@ _evas_text_efl_text_text_set(Eo *eo_obj, Evas_Text_Data *o, const char *_text)
1020} 1026}
1021 1027
1022EOLIAN static void 1028EOLIAN static void
1023_evas_text_bidi_delimiters_set(Eo *eo_obj EINA_UNUSED, Evas_Text_Data *o, const char *delim) 1029_evas_text_bidi_delimiters_set(Eo *eo_obj, Evas_Text_Data *o, const char *delim)
1024{ 1030{
1031 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1032 evas_object_async_block(obj);
1025 eina_stringshare_replace(&o->bidi_delimiters, delim); 1033 eina_stringshare_replace(&o->bidi_delimiters, delim);
1026} 1034}
1027 1035
@@ -1212,11 +1220,12 @@ _evas_text_char_coords_get(Eo *eo_obj, Evas_Text_Data *o, Evas_Coord x, Evas_Coo
1212EOLIAN static void 1220EOLIAN static void
1213_evas_text_style_set(Eo *eo_obj, Evas_Text_Data *o, Evas_Text_Style_Type style) 1221_evas_text_style_set(Eo *eo_obj, Evas_Text_Data *o, Evas_Text_Style_Type style)
1214{ 1222{
1223 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1215 int pl = 0, pr = 0, pt = 0, pb = 0, l = 0, r = 0, t = 0, b = 0; 1224 int pl = 0, pr = 0, pt = 0, pb = 0, l = 0, r = 0, t = 0, b = 0;
1216 int w = 0, h = 0; 1225 int w = 0, h = 0;
1217 1226
1218 if (o->cur.style == style) return; 1227 if (o->cur.style == style) return;
1219 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS); 1228 evas_object_async_block(obj);
1220 1229
1221 evas_text_style_pad_get(o->cur.style, &pl, &pr, &pt, &pb); 1230 evas_text_style_pad_get(o->cur.style, &pl, &pr, &pt, &pb);
1222 o->cur.style = style; 1231 o->cur.style = style;
@@ -1239,15 +1248,16 @@ _evas_text_style_get(Eo *eo_obj EINA_UNUSED, Evas_Text_Data *o)
1239EOLIAN static void 1248EOLIAN static void
1240_evas_text_shadow_color_set(Eo *eo_obj, Evas_Text_Data *o, int r, int g, int b, int a) 1249_evas_text_shadow_color_set(Eo *eo_obj, Evas_Text_Data *o, int r, int g, int b, int a)
1241{ 1250{
1251 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1242 if ((o->cur.shadow.r == r) && (o->cur.shadow.g == g) && 1252 if ((o->cur.shadow.r == r) && (o->cur.shadow.g == g) &&
1243 (o->cur.shadow.b == b) && (o->cur.shadow.a == a)) 1253 (o->cur.shadow.b == b) && (o->cur.shadow.a == a))
1244 return; 1254 return;
1255 evas_object_async_block(obj);
1245 o->cur.shadow.r = r; 1256 o->cur.shadow.r = r;
1246 o->cur.shadow.g = g; 1257 o->cur.shadow.g = g;
1247 o->cur.shadow.b = b; 1258 o->cur.shadow.b = b;
1248 o->cur.shadow.a = a; 1259 o->cur.shadow.a = a;
1249 o->changed = 1; 1260 o->changed = 1;
1250 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1251 evas_object_change(eo_obj, obj); 1261 evas_object_change(eo_obj, obj);
1252} 1262}
1253 1263
@@ -1263,15 +1273,16 @@ _evas_text_shadow_color_get(Eo *eo_obj EINA_UNUSED, Evas_Text_Data *o, int *r, i
1263EOLIAN static void 1273EOLIAN static void
1264_evas_text_glow_color_set(Eo *eo_obj, Evas_Text_Data *o, int r, int g, int b, int a) 1274_evas_text_glow_color_set(Eo *eo_obj, Evas_Text_Data *o, int r, int g, int b, int a)
1265{ 1275{
1276 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1266 if ((o->cur.glow.r == r) && (o->cur.glow.g == g) && 1277 if ((o->cur.glow.r == r) && (o->cur.glow.g == g) &&
1267 (o->cur.glow.b == b) && (o->cur.glow.a == a)) 1278 (o->cur.glow.b == b) && (o->cur.glow.a == a))
1268 return; 1279 return;
1280 evas_object_async_block(obj);
1269 o->cur.glow.r = r; 1281 o->cur.glow.r = r;
1270 o->cur.glow.g = g; 1282 o->cur.glow.g = g;
1271 o->cur.glow.b = b; 1283 o->cur.glow.b = b;
1272 o->cur.glow.a = a; 1284 o->cur.glow.a = a;
1273 o->changed = 1; 1285 o->changed = 1;
1274 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1275 evas_object_change(eo_obj, obj); 1286 evas_object_change(eo_obj, obj);
1276} 1287}
1277 1288
@@ -1287,15 +1298,16 @@ _evas_text_glow_color_get(Eo *eo_obj EINA_UNUSED, Evas_Text_Data *o, int *r, int
1287EOLIAN static void 1298EOLIAN static void
1288_evas_text_glow2_color_set(Eo *eo_obj, Evas_Text_Data *o, int r, int g, int b, int a) 1299_evas_text_glow2_color_set(Eo *eo_obj, Evas_Text_Data *o, int r, int g, int b, int a)
1289{ 1300{
1301 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1290 if ((o->cur.glow2.r == r) && (o->cur.glow2.g == g) && 1302 if ((o->cur.glow2.r == r) && (o->cur.glow2.g == g) &&
1291 (o->cur.glow2.b == b) && (o->cur.glow2.a == a)) 1303 (o->cur.glow2.b == b) && (o->cur.glow2.a == a))
1292 return; 1304 return;
1305 evas_object_async_block(obj);
1293 o->cur.glow2.r = r; 1306 o->cur.glow2.r = r;
1294 o->cur.glow2.g = g; 1307 o->cur.glow2.g = g;
1295 o->cur.glow2.b = b; 1308 o->cur.glow2.b = b;
1296 o->cur.glow2.a = a; 1309 o->cur.glow2.a = a;
1297 o->changed = 1; 1310 o->changed = 1;
1298 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1299 evas_object_change(eo_obj, obj); 1311 evas_object_change(eo_obj, obj);
1300} 1312}
1301 1313
@@ -1311,15 +1323,16 @@ _evas_text_glow2_color_get(Eo *eo_obj EINA_UNUSED, Evas_Text_Data *o, int *r, in
1311EOLIAN static void 1323EOLIAN static void
1312_evas_text_outline_color_set(Eo *eo_obj, Evas_Text_Data *o, int r, int g, int b, int a) 1324_evas_text_outline_color_set(Eo *eo_obj, Evas_Text_Data *o, int r, int g, int b, int a)
1313{ 1325{
1326 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1314 if ((o->cur.outline.r == r) && (o->cur.outline.g == g) && 1327 if ((o->cur.outline.r == r) && (o->cur.outline.g == g) &&
1315 (o->cur.outline.b == b) && (o->cur.outline.a == a)) 1328 (o->cur.outline.b == b) && (o->cur.outline.a == a))
1316 return; 1329 return;
1330 evas_object_async_block(obj);
1317 o->cur.outline.r = r; 1331 o->cur.outline.r = r;
1318 o->cur.outline.g = g; 1332 o->cur.outline.g = g;
1319 o->cur.outline.b = b; 1333 o->cur.outline.b = b;
1320 o->cur.outline.a = a; 1334 o->cur.outline.a = a;
1321 o->changed = 1; 1335 o->changed = 1;
1322 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
1323 evas_object_change(eo_obj, obj); 1336 evas_object_change(eo_obj, obj);
1324} 1337}
1325 1338
@@ -2357,13 +2370,15 @@ _evas_object_text_recalc(Evas_Object *eo_obj, Eina_Unicode *text)
2357EOLIAN static void 2370EOLIAN static void
2358_evas_text_filter_program_set(Eo *eo_obj, Evas_Text_Data *o, const char *arg) 2371_evas_text_filter_program_set(Eo *eo_obj, Evas_Text_Data *o, const char *arg)
2359{ 2372{
2360 Evas_Object_Protected_Data *obj; 2373 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
2374
2361 Evas_Filter_Program *pgm = NULL; 2375 Evas_Filter_Program *pgm = NULL;
2362 2376
2363 if (!o) return; 2377 if (!o) return;
2364 if (o->cur.filter->code == arg) return; 2378 if (o->cur.filter->code == arg) return;
2365 if (o->cur.filter->code && arg && !strcmp(arg, o->cur.filter->code)) return; 2379 if (o->cur.filter->code && arg && !strcmp(arg, o->cur.filter->code)) return;
2366 2380
2381 evas_object_async_block(obj);
2367 EINA_COW_WRITE_BEGIN(evas_object_filter_cow, o->cur.filter, Evas_Object_Filter_Data, fcow) 2382 EINA_COW_WRITE_BEGIN(evas_object_filter_cow, o->cur.filter, Evas_Object_Filter_Data, fcow)
2368 { 2383 {
2369 // Parse filter program 2384 // Parse filter program
@@ -2387,7 +2402,6 @@ _evas_text_filter_program_set(Eo *eo_obj, Evas_Text_Data *o, const char *arg)
2387 EINA_COW_WRITE_END(evas_object_filter_cow, o->cur.filter, fcow); 2402 EINA_COW_WRITE_END(evas_object_filter_cow, o->cur.filter, fcow);
2388 2403
2389 // Update object 2404 // Update object
2390 obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
2391 _evas_object_text_items_clear(o); 2405 _evas_object_text_items_clear(o);
2392 o->changed = 1; 2406 o->changed = 1;
2393 _evas_object_text_recalc(eo_obj, o->cur.text); 2407 _evas_object_text_recalc(eo_obj, o->cur.text);
@@ -2435,14 +2449,14 @@ _filter_source_hash_free_cb(void *data)
2435EOLIAN static void 2449EOLIAN static void
2436_evas_text_filter_source_set(Eo *eo_obj, Evas_Text_Data *o, const char *name, Evas_Object *eo_source) 2450_evas_text_filter_source_set(Eo *eo_obj, Evas_Text_Data *o, const char *name, Evas_Object *eo_source)
2437{ 2451{
2438 Evas_Object_Protected_Data *obj; 2452 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
2439 Evas_Filter_Proxy_Binding *pb, *pb_old = NULL; 2453 Evas_Filter_Proxy_Binding *pb, *pb_old = NULL;
2440 Evas_Object_Protected_Data *source = NULL; 2454 Evas_Object_Protected_Data *source = NULL;
2441 Evas_Object_Filter_Data *fcow = NULL; 2455 Evas_Object_Filter_Data *fcow = NULL;
2442 2456
2443 obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
2444 if (eo_source) source = eo_data_scope_get(eo_source, EVAS_OBJECT_CLASS); 2457 if (eo_source) source = eo_data_scope_get(eo_source, EVAS_OBJECT_CLASS);
2445 2458
2459 evas_object_async_block(obj);
2446 if (!name) 2460 if (!name)
2447 { 2461 {
2448 if (!eo_source || !o->cur.filter->sources) return; 2462 if (!eo_source || !o->cur.filter->sources) return;
diff --git a/src/lib/evas/canvas/evas_object_textblock.c b/src/lib/evas/canvas/evas_object_textblock.c
index e9db7bb..52805ed 100644
--- a/src/lib/evas/canvas/evas_object_textblock.c
+++ b/src/lib/evas/canvas/evas_object_textblock.c
@@ -5842,6 +5842,8 @@ evas_textblock_style_set(Evas_Textblock_Style *ts, const char *text)
5842 EINA_LIST_FOREACH(ts->objects, l, eo_obj) 5842 EINA_LIST_FOREACH(ts->objects, l, eo_obj)
5843 { 5843 {
5844 Evas_Textblock_Data *o = eo_data_scope_get(eo_obj, MY_CLASS); 5844 Evas_Textblock_Data *o = eo_data_scope_get(eo_obj, MY_CLASS);
5845 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
5846 evas_object_async_block(obj);
5845 _evas_textblock_invalidate_all(o); 5847 _evas_textblock_invalidate_all(o);
5846 _evas_textblock_changed(o, eo_obj); 5848 _evas_textblock_changed(o, eo_obj);
5847 } 5849 }
@@ -6060,6 +6062,8 @@ _textblock_style_generic_set(Evas_Object *eo_obj, Evas_Textblock_Style *ts,
6060EOLIAN static void 6062EOLIAN static void
6061_evas_textblock_style_set(Eo *eo_obj, Evas_Textblock_Data *o, const Evas_Textblock_Style *ts) 6063_evas_textblock_style_set(Eo *eo_obj, Evas_Textblock_Data *o, const Evas_Textblock_Style *ts)
6062{ 6064{
6065 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
6066 evas_object_async_block(obj);
6063 _textblock_style_generic_set(eo_obj, (Evas_Textblock_Style *) ts, &(o->style)); 6067 _textblock_style_generic_set(eo_obj, (Evas_Textblock_Style *) ts, &(o->style));
6064} 6068}
6065 6069
@@ -6072,6 +6076,8 @@ _evas_textblock_style_get(Eo *eo_obj EINA_UNUSED, Evas_Textblock_Data *o)
6072EOLIAN static void 6076EOLIAN static void
6073_evas_textblock_style_user_push(Eo *eo_obj, Evas_Textblock_Data *o, Evas_Textblock_Style *ts) 6077_evas_textblock_style_user_push(Eo *eo_obj, Evas_Textblock_Data *o, Evas_Textblock_Style *ts)
6074{ 6078{
6079 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
6080 evas_object_async_block(obj);
6075 _textblock_style_generic_set(eo_obj, ts, &(o->style_user)); 6081 _textblock_style_generic_set(eo_obj, ts, &(o->style_user));
6076} 6082}
6077 6083
@@ -6084,12 +6090,16 @@ _evas_textblock_style_user_peek(Eo *eo_obj EINA_UNUSED, Evas_Textblock_Data *o)
6084EOLIAN static void 6090EOLIAN static void
6085_evas_textblock_style_user_pop(Eo *eo_obj, Evas_Textblock_Data *o) 6091_evas_textblock_style_user_pop(Eo *eo_obj, Evas_Textblock_Data *o)
6086{ 6092{
6093 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
6094 evas_object_async_block(obj);
6087 _textblock_style_generic_set(eo_obj, NULL, &(o->style_user)); 6095 _textblock_style_generic_set(eo_obj, NULL, &(o->style_user));
6088} 6096}
6089 6097
6090EOLIAN static void 6098EOLIAN static void
6091_evas_textblock_replace_char_set(Eo *eo_obj, Evas_Textblock_Data *o, const char *ch) 6099_evas_textblock_replace_char_set(Eo *eo_obj, Evas_Textblock_Data *o, const char *ch)
6092{ 6100{
6101 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
6102 evas_object_async_block(obj);
6093 if (o->repch) eina_stringshare_del(o->repch); 6103 if (o->repch) eina_stringshare_del(o->repch);
6094 if (ch) o->repch = eina_stringshare_add(ch); 6104 if (ch) o->repch = eina_stringshare_add(ch);
6095 else o->repch = NULL; 6105 else o->repch = NULL;
@@ -6100,6 +6110,8 @@ _evas_textblock_replace_char_set(Eo *eo_obj, Evas_Textblock_Data *o, const char
6100EOLIAN static void 6110EOLIAN static void
6101_evas_textblock_legacy_newline_set(Eo *eo_obj EINA_UNUSED, Evas_Textblock_Data *o, Eina_Bool mode) 6111_evas_textblock_legacy_newline_set(Eo *eo_obj EINA_UNUSED, Evas_Textblock_Data *o, Eina_Bool mode)
6102{ 6112{
6113 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
6114 evas_object_async_block(obj);
6103 if (o->legacy_newline == mode) 6115 if (o->legacy_newline == mode)
6104 return; 6116 return;
6105 6117
@@ -6117,6 +6129,8 @@ _evas_textblock_legacy_newline_get(Eo *eo_obj EINA_UNUSED, Evas_Textblock_Data *
6117EOLIAN static void 6129EOLIAN static void
6118_evas_textblock_valign_set(Eo *eo_obj, Evas_Textblock_Data *o, double align) 6130_evas_textblock_valign_set(Eo *eo_obj, Evas_Textblock_Data *o, double align)
6119{ 6131{
6132 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
6133 evas_object_async_block(obj);
6120 if (align < 0.0) align = 0.0; 6134 if (align < 0.0) align = 0.0;
6121 else if (align > 1.0) align = 1.0; 6135 else if (align > 1.0) align = 1.0;
6122 if (o->valign == align) return; 6136 if (o->valign == align) return;
@@ -6133,6 +6147,8 @@ _evas_textblock_valign_get(Eo *eo_obj EINA_UNUSED, Evas_Textblock_Data *o)
6133EOLIAN static void 6147EOLIAN static void
6134_evas_textblock_bidi_delimiters_set(Eo *eo_obj EINA_UNUSED, Evas_Textblock_Data *o, const char *delim) 6148_evas_textblock_bidi_delimiters_set(Eo *eo_obj EINA_UNUSED, Evas_Textblock_Data *o, const char *delim)
6135{ 6149{
6150 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
6151 evas_object_async_block(obj);
6136 eina_stringshare_replace(&o->bidi_delimiters, delim); 6152 eina_stringshare_replace(&o->bidi_delimiters, delim);
6137} 6153}
6138 6154
@@ -6350,6 +6366,8 @@ _prepend_escaped_char(Evas_Textblock_Cursor *cur, const char *s,
6350EOLIAN static void 6366EOLIAN static void
6351_evas_textblock_text_markup_set(Eo *eo_obj EINA_UNUSED, Evas_Textblock_Data *o, const char *text) 6367_evas_textblock_text_markup_set(Eo *eo_obj EINA_UNUSED, Evas_Textblock_Data *o, const char *text)
6352{ 6368{
6369 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
6370 evas_object_async_block(obj);
6353 if ((text != o->markup_text) && (o->markup_text)) 6371 if ((text != o->markup_text) && (o->markup_text))
6354 { 6372 {
6355 free(o->markup_text); 6373 free(o->markup_text);
@@ -6391,6 +6409,8 @@ evas_object_textblock_text_markup_prepend(Evas_Textblock_Cursor *cur, const char
6391{ 6409{
6392 if (!cur) return; 6410 if (!cur) return;
6393 Evas_Object *eo_obj = cur->obj; 6411 Evas_Object *eo_obj = cur->obj;
6412 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
6413 evas_object_async_block(obj);
6394 TB_HEAD(); 6414 TB_HEAD();
6395 if (text) 6415 if (text)
6396 { 6416 {
@@ -6595,6 +6615,8 @@ _evas_textblock_text_markup_get(Eo *eo_obj EINA_UNUSED, Evas_Textblock_Data *o)
6595 Evas_Object_Textblock_Node_Text *n; 6615 Evas_Object_Textblock_Node_Text *n;
6596 Eina_Strbuf *txt = NULL; 6616 Eina_Strbuf *txt = NULL;
6597 6617
6618 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
6619 evas_object_async_block(obj);
6598 const char *markup; 6620 const char *markup;
6599 if (o->markup_text) 6621 if (o->markup_text)
6600 { 6622 {
@@ -7112,14 +7134,15 @@ EOLIAN static Evas_Textblock_Cursor*
7112_evas_textblock_cursor_new(Eo *eo_obj, Evas_Textblock_Data *o) 7134_evas_textblock_cursor_new(Eo *eo_obj, Evas_Textblock_Data *o)
7113{ 7135{
7114 Evas_Textblock_Cursor *cur; 7136 Evas_Textblock_Cursor *cur;
7115 { 7137 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
7116 cur = calloc(1, sizeof(Evas_Textblock_Cursor)); 7138 evas_object_async_block(obj);
7117 (cur)->obj = (Evas_Object *) eo_obj;
7118 (cur)->node = o->text_nodes;
7119 (cur)->pos = 0;
7120 o->cursors = eina_list_append(o->cursors, cur);
7121 }
7122 7139
7140 cur = calloc(1, sizeof(Evas_Textblock_Cursor));
7141 if (!cur) return NULL;
7142 cur->obj = (Evas_Object *) eo_obj;
7143 cur->node = o->text_nodes;
7144 cur->pos = 0;
7145 o->cursors = eina_list_append(o->cursors, cur);
7123 return cur; 7146 return cur;
7124} 7147}
7125 7148
@@ -7127,6 +7150,8 @@ EAPI void
7127evas_textblock_cursor_free(Evas_Textblock_Cursor *cur) 7150evas_textblock_cursor_free(Evas_Textblock_Cursor *cur)
7128{ 7151{
7129 if (!cur) return; 7152 if (!cur) return;
7153 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
7154 evas_object_async_block(obj);
7130 Evas_Textblock_Data *o = eo_data_scope_get(cur->obj, MY_CLASS); 7155 Evas_Textblock_Data *o = eo_data_scope_get(cur->obj, MY_CLASS);
7131 if (cur == o->cursor) return; 7156 if (cur == o->cursor) return;
7132 o->cursors = eina_list_remove(o->cursors, cur); 7157 o->cursors = eina_list_remove(o->cursors, cur);
@@ -7136,14 +7161,18 @@ evas_textblock_cursor_free(Evas_Textblock_Cursor *cur)
7136EAPI Eina_Bool 7161EAPI Eina_Bool
7137evas_textblock_cursor_is_format(const Evas_Textblock_Cursor *cur) 7162evas_textblock_cursor_is_format(const Evas_Textblock_Cursor *cur)
7138{ 7163{
7164 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
7165 evas_object_async_block(obj);
7139 if (!cur || !cur->node) return EINA_FALSE; 7166 if (!cur || !cur->node) return EINA_FALSE;
7140 return (_evas_textblock_cursor_node_format_at_pos_get(cur)) ? 7167 return (_evas_textblock_cursor_node_format_at_pos_get(cur)) ?
7141 EINA_TRUE : EINA_FALSE; 7168 EINA_TRUE : EINA_FALSE;
7142} 7169}
7143 7170
7144EOLIAN static const Eina_List * 7171EOLIAN static const Eina_List *
7145_evas_textblock_node_format_list_get(Eo *eo_obj EINA_UNUSED, Evas_Textblock_Data *o, const char *anchor) 7172_evas_textblock_node_format_list_get(Eo *eo_obj, Evas_Textblock_Data *o, const char *anchor)
7146{ 7173{
7174 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
7175 evas_object_async_block(obj);
7147 if (!strcmp(anchor, "a")) 7176 if (!strcmp(anchor, "a"))
7148 return o->anchors_a; 7177 return o->anchors_a;
7149 else if (!strcmp(anchor, "item")) 7178 else if (!strcmp(anchor, "item"))
@@ -7152,14 +7181,18 @@ _evas_textblock_node_format_list_get(Eo *eo_obj EINA_UNUSED, Evas_Textblock_Data
7152} 7181}
7153 7182
7154EOLIAN static const Evas_Object_Textblock_Node_Format* 7183EOLIAN static const Evas_Object_Textblock_Node_Format*
7155_evas_textblock_node_format_first_get(Eo *eo_obj EINA_UNUSED, Evas_Textblock_Data *o) 7184_evas_textblock_node_format_first_get(Eo *eo_obj, Evas_Textblock_Data *o)
7156{ 7185{
7186 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
7187 evas_object_async_block(obj);
7157 return o->format_nodes; 7188 return o->format_nodes;
7158} 7189}
7159 7190
7160EOLIAN static const Evas_Object_Textblock_Node_Format* 7191EOLIAN static const Evas_Object_Textblock_Node_Format*
7161_evas_textblock_node_format_last_get(Eo *eo_obj EINA_UNUSED, Evas_Textblock_Data *o) 7192_evas_textblock_node_format_last_get(Eo *eo_obj, Evas_Textblock_Data *o)
7162{ 7193{
7194 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
7195 evas_object_async_block(obj);
7163 return o->format_nodes ? _NODE_FORMAT(EINA_INLIST_GET(o->format_nodes)->last) : NULL; 7196 return o->format_nodes ? _NODE_FORMAT(EINA_INLIST_GET(o->format_nodes)->last) : NULL;
7164} 7197}
7165 7198
@@ -7188,6 +7221,8 @@ _evas_textblock_node_format_remove_pair(Eo *eo_obj, Evas_Textblock_Data *o, Evas
7188 7221
7189 fmt = n; 7222 fmt = n;
7190 7223
7224 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
7225 evas_object_async_block(obj);
7191 do 7226 do
7192 { 7227 {
7193 const char *fstr = fmt->orig_format; 7228 const char *fstr = fmt->orig_format;
@@ -7287,6 +7322,8 @@ EAPI void
7287evas_textblock_cursor_paragraph_first(Evas_Textblock_Cursor *cur) 7322evas_textblock_cursor_paragraph_first(Evas_Textblock_Cursor *cur)
7288{ 7323{
7289 if (!cur) return; 7324 if (!cur) return;
7325 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
7326 evas_object_async_block(obj);
7290 Evas_Textblock_Data *o = eo_data_scope_get(cur->obj, MY_CLASS); 7327 Evas_Textblock_Data *o = eo_data_scope_get(cur->obj, MY_CLASS);
7291 cur->node = o->text_nodes; 7328 cur->node = o->text_nodes;
7292 cur->pos = 0; 7329 cur->pos = 0;
@@ -7299,6 +7336,8 @@ evas_textblock_cursor_paragraph_last(Evas_Textblock_Cursor *cur)
7299 Evas_Object_Textblock_Node_Text *node; 7336 Evas_Object_Textblock_Node_Text *node;
7300 7337
7301 if (!cur) return; 7338 if (!cur) return;
7339 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
7340 evas_object_async_block(obj);
7302 Evas_Textblock_Data *o = eo_data_scope_get(cur->obj, MY_CLASS); 7341 Evas_Textblock_Data *o = eo_data_scope_get(cur->obj, MY_CLASS);
7303 node = o->text_nodes; 7342 node = o->text_nodes;
7304 if (node) 7343 if (node)
@@ -7321,6 +7360,8 @@ EAPI Eina_Bool
7321evas_textblock_cursor_paragraph_next(Evas_Textblock_Cursor *cur) 7360evas_textblock_cursor_paragraph_next(Evas_Textblock_Cursor *cur)
7322{ 7361{
7323 if (!cur) return EINA_FALSE; 7362 if (!cur) return EINA_FALSE;
7363 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
7364 evas_object_async_block(obj);
7324 TB_NULL_CHECK(cur->node, EINA_FALSE); 7365 TB_NULL_CHECK(cur->node, EINA_FALSE);
7325 /* If there is a current text node, return the next text node (if exists) 7366 /* If there is a current text node, return the next text node (if exists)
7326 * otherwise, just return False. */ 7367 * otherwise, just return False. */
@@ -7344,6 +7385,8 @@ evas_textblock_cursor_paragraph_prev(Evas_Textblock_Cursor *cur)
7344{ 7385{
7345 Evas_Object_Textblock_Node_Text *node; 7386 Evas_Object_Textblock_Node_Text *node;
7346 if (!cur) return EINA_FALSE; 7387 if (!cur) return EINA_FALSE;
7388 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
7389 evas_object_async_block(obj);
7347 TB_NULL_CHECK(cur->node, EINA_FALSE); 7390 TB_NULL_CHECK(cur->node, EINA_FALSE);
7348 /* If the current node is a text node, just get the prev if any, 7391 /* If the current node is a text node, just get the prev if any,
7349 * if it's a format, get the current text node out of the format and return 7392 * if it's a format, get the current text node out of the format and return
@@ -7377,6 +7420,8 @@ evas_textblock_cursor_format_next(Evas_Textblock_Cursor *cur)
7377 Evas_Object_Textblock_Node_Format *node; 7420 Evas_Object_Textblock_Node_Format *node;
7378 7421
7379 if (!cur) return EINA_FALSE; 7422 if (!cur) return EINA_FALSE;
7423 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
7424 evas_object_async_block(obj);
7380 TB_NULL_CHECK(cur->node, EINA_FALSE); 7425 TB_NULL_CHECK(cur->node, EINA_FALSE);
7381 /* If the current node is a format node, just get the next if any, 7426 /* If the current node is a format node, just get the next if any,
7382 * if it's a text, get the current format node out of the text and return 7427 * if it's a text, get the current format node out of the text and return
@@ -7413,6 +7458,8 @@ evas_textblock_cursor_format_prev(Evas_Textblock_Cursor *cur)
7413{ 7458{
7414 const Evas_Object_Textblock_Node_Format *node; 7459 const Evas_Object_Textblock_Node_Format *node;
7415 if (!cur) return EINA_FALSE; 7460 if (!cur) return EINA_FALSE;
7461 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
7462 evas_object_async_block(obj);
7416 TB_NULL_CHECK(cur->node, EINA_FALSE); 7463 TB_NULL_CHECK(cur->node, EINA_FALSE);
7417 node = evas_textblock_cursor_format_get(cur); 7464 node = evas_textblock_cursor_format_get(cur);
7418 if (!node) 7465 if (!node)
@@ -7456,6 +7503,8 @@ evas_textblock_cursor_word_start(Evas_Textblock_Cursor *cur)
7456 char *breaks; 7503 char *breaks;
7457 7504
7458 if (!cur) return EINA_FALSE; 7505 if (!cur) return EINA_FALSE;
7506 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
7507 evas_object_async_block(obj);
7459 TB_NULL_CHECK(cur->node, EINA_FALSE); 7508 TB_NULL_CHECK(cur->node, EINA_FALSE);
7460 7509
7461 size_t len = eina_ustrbuf_length_get(cur->node->unicode); 7510 size_t len = eina_ustrbuf_length_get(cur->node->unicode);
@@ -7514,6 +7563,8 @@ evas_textblock_cursor_word_end(Evas_Textblock_Cursor *cur)
7514 char *breaks; 7563 char *breaks;
7515 7564
7516 if (!cur) return EINA_FALSE; 7565 if (!cur) return EINA_FALSE;
7566 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
7567 evas_object_async_block(obj);
7517 TB_NULL_CHECK(cur->node, EINA_FALSE); 7568 TB_NULL_CHECK(cur->node, EINA_FALSE);
7518 7569
7519 size_t len = eina_ustrbuf_length_get(cur->node->unicode); 7570 size_t len = eina_ustrbuf_length_get(cur->node->unicode);
@@ -7565,6 +7616,8 @@ evas_textblock_cursor_char_next(Evas_Textblock_Cursor *cur)
7565 const Eina_Unicode *text; 7616 const Eina_Unicode *text;
7566 7617
7567 if (!cur) return EINA_FALSE; 7618 if (!cur) return EINA_FALSE;
7619 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
7620 evas_object_async_block(obj);
7568 TB_NULL_CHECK(cur->node, EINA_FALSE); 7621 TB_NULL_CHECK(cur->node, EINA_FALSE);
7569 7622
7570 ind = cur->pos; 7623 ind = cur->pos;
@@ -7600,6 +7653,8 @@ EAPI Eina_Bool
7600evas_textblock_cursor_char_prev(Evas_Textblock_Cursor *cur) 7653evas_textblock_cursor_char_prev(Evas_Textblock_Cursor *cur)
7601{ 7654{
7602 if (!cur) return EINA_FALSE; 7655 if (!cur) return EINA_FALSE;
7656 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
7657 evas_object_async_block(obj);
7603 TB_NULL_CHECK(cur->node, EINA_FALSE); 7658 TB_NULL_CHECK(cur->node, EINA_FALSE);
7604 7659
7605 if (cur->pos != 0) 7660 if (cur->pos != 0)
@@ -7614,6 +7669,8 @@ EAPI void
7614evas_textblock_cursor_paragraph_char_first(Evas_Textblock_Cursor *cur) 7669evas_textblock_cursor_paragraph_char_first(Evas_Textblock_Cursor *cur)
7615{ 7670{
7616 if (!cur) return; 7671 if (!cur) return;
7672 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
7673 evas_object_async_block(obj);
7617 cur->pos = 0; 7674 cur->pos = 0;
7618 7675
7619} 7676}
@@ -7624,6 +7681,8 @@ evas_textblock_cursor_paragraph_char_last(Evas_Textblock_Cursor *cur)
7624 int ind; 7681 int ind;
7625 7682
7626 if (!cur) return; 7683 if (!cur) return;
7684 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
7685 evas_object_async_block(obj);
7627 TB_NULL_CHECK(cur->node); 7686 TB_NULL_CHECK(cur->node);
7628 ind = eina_ustrbuf_length_get(cur->node->unicode); 7687 ind = eina_ustrbuf_length_get(cur->node->unicode);
7629 /* If it's not the last paragraph, go back one, because we want to point 7688 /* If it's not the last paragraph, go back one, because we want to point
@@ -7645,6 +7704,8 @@ evas_textblock_cursor_line_char_first(Evas_Textblock_Cursor *cur)
7645 Evas_Object_Textblock_Item *it = NULL; 7704 Evas_Object_Textblock_Item *it = NULL;
7646 7705
7647 if (!cur) return; 7706 if (!cur) return;
7707 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
7708 evas_object_async_block(obj);
7648 TB_NULL_CHECK(cur->node); 7709 TB_NULL_CHECK(cur->node);
7649 Evas_Textblock_Data *o = eo_data_scope_get(cur->obj, MY_CLASS); 7710 Evas_Textblock_Data *o = eo_data_scope_get(cur->obj, MY_CLASS);
7650 7711
@@ -7679,6 +7740,8 @@ evas_textblock_cursor_line_char_last(Evas_Textblock_Cursor *cur)
7679 Evas_Object_Textblock_Item *it = NULL; 7740 Evas_Object_Textblock_Item *it = NULL;
7680 7741
7681 if (!cur) return; 7742 if (!cur) return;
7743 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
7744 evas_object_async_block(obj);
7682 TB_NULL_CHECK(cur->node); 7745 TB_NULL_CHECK(cur->node);
7683 Evas_Textblock_Data *o = eo_data_scope_get(cur->obj, MY_CLASS); 7746 Evas_Textblock_Data *o = eo_data_scope_get(cur->obj, MY_CLASS);
7684 7747
@@ -8150,6 +8213,8 @@ evas_textblock_cursor_pos_get(const Evas_Textblock_Cursor *cur)
8150 size_t npos = 0; 8213 size_t npos = 0;
8151 8214
8152 if (!cur) return -1; 8215 if (!cur) return -1;
8216 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
8217 evas_object_async_block(obj);
8153 TB_NULL_CHECK(cur->node, 0); 8218 TB_NULL_CHECK(cur->node, 0);
8154 Evas_Textblock_Data *o = eo_data_scope_get(cur->obj, MY_CLASS); 8219 Evas_Textblock_Data *o = eo_data_scope_get(cur->obj, MY_CLASS);
8155 n = o->text_nodes; 8220 n = o->text_nodes;
@@ -8168,6 +8233,8 @@ evas_textblock_cursor_pos_set(Evas_Textblock_Cursor *cur, int _pos)
8168 size_t pos; 8233 size_t pos;
8169 8234
8170 if (!cur) return; 8235 if (!cur) return;
8236 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
8237 evas_object_async_block(obj);
8171 Evas_Textblock_Data *o = eo_data_scope_get(cur->obj, MY_CLASS); 8238 Evas_Textblock_Data *o = eo_data_scope_get(cur->obj, MY_CLASS);
8172 8239
8173 if (_pos < 0) 8240 if (_pos < 0)
@@ -8213,6 +8280,8 @@ evas_textblock_cursor_line_set(Evas_Textblock_Cursor *cur, int line)
8213 Evas_Object_Textblock_Item *it; 8280 Evas_Object_Textblock_Item *it;
8214 8281
8215 if (!cur) return EINA_FALSE; 8282 if (!cur) return EINA_FALSE;
8283 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
8284 evas_object_async_block(obj);
8216 8285
8217 Evas_Textblock_Data *o = eo_data_scope_get(cur->obj, MY_CLASS); 8286 Evas_Textblock_Data *o = eo_data_scope_get(cur->obj, MY_CLASS);
8218 8287
@@ -8242,6 +8311,8 @@ evas_textblock_cursor_compare(const Evas_Textblock_Cursor *cur1, const Evas_Text
8242 8311
8243 if (!cur1) return 0; 8312 if (!cur1) return 0;
8244 if (!cur2) return 0; 8313 if (!cur2) return 0;
8314 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur1->obj, EVAS_OBJECT_CLASS);
8315 evas_object_async_block(obj);
8245 if (cur1->obj != cur2->obj) return 0; 8316 if (cur1->obj != cur2->obj) return 0;
8246 if ((!cur1->node) || (!cur2->node)) return 0; 8317 if ((!cur1->node) || (!cur2->node)) return 0;
8247 if (cur1->node == cur2->node) 8318 if (cur1->node == cur2->node)
@@ -8269,6 +8340,8 @@ evas_textblock_cursor_copy(const Evas_Textblock_Cursor *cur, Evas_Textblock_Curs
8269 if (!cur) return; 8340 if (!cur) return;
8270 if (!cur_dest) return; 8341 if (!cur_dest) return;
8271 if (cur->obj != cur_dest->obj) return; 8342 if (cur->obj != cur_dest->obj) return;
8343 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
8344 evas_object_async_block(obj);
8272 cur_dest->pos = cur->pos; 8345 cur_dest->pos = cur->pos;
8273 cur_dest->node = cur->node; 8346 cur_dest->node = cur->node;
8274 8347
@@ -8521,6 +8594,8 @@ evas_textblock_cursor_text_append(Evas_Textblock_Cursor *cur, const char *_text)
8521 int len = 0; 8594 int len = 0;
8522 8595
8523 if (!cur) return 0; 8596 if (!cur) return 0;
8597 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
8598 evas_object_async_block(obj);
8524 text = eina_unicode_utf8_to_unicode(_text, &len); 8599 text = eina_unicode_utf8_to_unicode(_text, &len);
8525 Evas_Textblock_Data *o = eo_data_scope_get(cur->obj, MY_CLASS); 8600 Evas_Textblock_Data *o = eo_data_scope_get(cur->obj, MY_CLASS);
8526 8601
@@ -8589,6 +8664,9 @@ evas_textblock_cursor_text_prepend(Evas_Textblock_Cursor *cur, const char *_text
8589{ 8664{
8590 int len; 8665 int len;
8591 /*append is essentially prepend without advancing */ 8666 /*append is essentially prepend without advancing */
8667 if (!cur) return 0;
8668 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
8669 evas_object_async_block(obj);
8592 len = evas_textblock_cursor_text_append(cur, _text); 8670 len = evas_textblock_cursor_text_append(cur, _text);
8593 if (len == 0) return 0; 8671 if (len == 0) return 0;
8594 cur->pos += len; /*Advance */ 8672 cur->pos += len; /*Advance */
@@ -8768,6 +8846,8 @@ evas_textblock_cursor_format_append(Evas_Textblock_Cursor *cur, const char *form
8768 Eina_Bool is_visible; 8846 Eina_Bool is_visible;
8769 8847
8770 if (!cur) return EINA_FALSE; 8848 if (!cur) return EINA_FALSE;
8849 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
8850 evas_object_async_block(obj);
8771 if ((!format) || (format[0] == 0)) return EINA_FALSE; 8851 if ((!format) || (format[0] == 0)) return EINA_FALSE;
8772 Evas_Textblock_Data *o = eo_data_scope_get(cur->obj, MY_CLASS); 8852 Evas_Textblock_Data *o = eo_data_scope_get(cur->obj, MY_CLASS);
8773 /* We should always have at least one text node */ 8853 /* We should always have at least one text node */
@@ -8898,6 +8978,10 @@ EAPI Eina_Bool
8898evas_textblock_cursor_format_prepend(Evas_Textblock_Cursor *cur, const char *format) 8978evas_textblock_cursor_format_prepend(Evas_Textblock_Cursor *cur, const char *format)
8899{ 8979{
8900 Eina_Bool is_visible; 8980 Eina_Bool is_visible;
8981
8982 if (!cur) return EINA_FALSE;
8983 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
8984 evas_object_async_block(obj);
8901 /* append is essentially prepend without advancing */ 8985 /* append is essentially prepend without advancing */
8902 is_visible = evas_textblock_cursor_format_append(cur, format); 8986 is_visible = evas_textblock_cursor_format_append(cur, format);
8903 if (is_visible) 8987 if (is_visible)
@@ -8917,6 +9001,8 @@ evas_textblock_cursor_char_delete(Evas_Textblock_Cursor *cur)
8917 int chr, ind, ppos; 9001 int chr, ind, ppos;
8918 9002
8919 if (!cur || !cur->node) return; 9003 if (!cur || !cur->node) return;
9004 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
9005 evas_object_async_block(obj);
8920 Evas_Textblock_Data *o = eo_data_scope_get(cur->obj, MY_CLASS); 9006 Evas_Textblock_Data *o = eo_data_scope_get(cur->obj, MY_CLASS);
8921 n = cur->node; 9007 n = cur->node;
8922 9008
@@ -8994,6 +9080,8 @@ evas_textblock_cursor_range_delete(Evas_Textblock_Cursor *cur1, Evas_Textblock_C
8994 if (!cur1 || !cur1->node) return; 9080 if (!cur1 || !cur1->node) return;
8995 if (!cur2 || !cur2->node) return; 9081 if (!cur2 || !cur2->node) return;
8996 if (cur1->obj != cur2->obj) return; 9082 if (cur1->obj != cur2->obj) return;
9083 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur1->obj, EVAS_OBJECT_CLASS);
9084 evas_object_async_block(obj);
8997 Evas_Textblock_Data *o = eo_data_scope_get(cur1->obj, MY_CLASS); 9085 Evas_Textblock_Data *o = eo_data_scope_get(cur1->obj, MY_CLASS);
8998 if (evas_textblock_cursor_compare(cur1, cur2) > 0) 9086 if (evas_textblock_cursor_compare(cur1, cur2) > 0)
8999 { 9087 {
@@ -9092,6 +9180,8 @@ EAPI char *
9092evas_textblock_cursor_content_get(const Evas_Textblock_Cursor *cur) 9180evas_textblock_cursor_content_get(const Evas_Textblock_Cursor *cur)
9093{ 9181{
9094 if (!cur || !cur->node) return NULL; 9182 if (!cur || !cur->node) return NULL;
9183 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
9184 evas_object_async_block(obj);
9095 if (evas_textblock_cursor_format_is_visible_get(cur)) 9185 if (evas_textblock_cursor_format_is_visible_get(cur))
9096 { 9186 {
9097 Eina_Strbuf *buf; 9187 Eina_Strbuf *buf;
@@ -9304,6 +9394,8 @@ evas_textblock_cursor_range_formats_get(const Evas_Textblock_Cursor *cur1, const
9304 if (!cur2 || !cur2->node) return NULL; 9394 if (!cur2 || !cur2->node) return NULL;
9305 if (cur1->obj != cur2->obj) return NULL; 9395 if (cur1->obj != cur2->obj) return NULL;
9306 9396
9397 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur1->obj, EVAS_OBJECT_CLASS);
9398 evas_object_async_block(obj);
9307 eo_obj = cur1->obj; 9399 eo_obj = cur1->obj;
9308 TB_HEAD_RETURN(NULL); 9400 TB_HEAD_RETURN(NULL);
9309 9401
@@ -9365,6 +9457,8 @@ evas_textblock_cursor_range_formats_get(const Evas_Textblock_Cursor *cur1, const
9365EAPI char * 9457EAPI char *
9366evas_textblock_cursor_range_text_get(const Evas_Textblock_Cursor *cur1, const Evas_Textblock_Cursor *cur2, Evas_Textblock_Text_Type format) 9458evas_textblock_cursor_range_text_get(const Evas_Textblock_Cursor *cur1, const Evas_Textblock_Cursor *cur2, Evas_Textblock_Text_Type format)
9367{ 9459{
9460 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur1->obj, EVAS_OBJECT_CLASS);
9461 evas_object_async_block(obj);
9368 if (format == EVAS_TEXTBLOCK_TEXT_MARKUP) 9462 if (format == EVAS_TEXTBLOCK_TEXT_MARKUP)
9369 return _evas_textblock_cursor_range_text_markup_get(cur1, cur2); 9463 return _evas_textblock_cursor_range_text_markup_get(cur1, cur2);
9370 else if (format == EVAS_TEXTBLOCK_TEXT_PLAIN) 9464 else if (format == EVAS_TEXTBLOCK_TEXT_PLAIN)
@@ -9378,6 +9472,8 @@ evas_textblock_cursor_paragraph_text_get(const Evas_Textblock_Cursor *cur)
9378{ 9472{
9379 Evas_Textblock_Cursor cur1, cur2; 9473 Evas_Textblock_Cursor cur1, cur2;
9380 if (!cur) return NULL; 9474 if (!cur) return NULL;
9475 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
9476 evas_object_async_block(obj);
9381 TB_NULL_CHECK(cur->node, NULL); 9477 TB_NULL_CHECK(cur->node, NULL);
9382 if (cur->node->utf8) 9478 if (cur->node->utf8)
9383 { 9479 {
@@ -9398,6 +9494,8 @@ evas_textblock_cursor_paragraph_text_length_get(const Evas_Textblock_Cursor *cur
9398{ 9494{
9399 int len; 9495 int len;
9400 if (!cur) return -1; 9496 if (!cur) return -1;
9497 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
9498 evas_object_async_block(obj);
9401 TB_NULL_CHECK(cur->node, -1); 9499 TB_NULL_CHECK(cur->node, -1);
9402 len = eina_ustrbuf_length_get(cur->node->unicode); 9500 len = eina_ustrbuf_length_get(cur->node->unicode);
9403 9501
@@ -9411,6 +9509,8 @@ EAPI const Evas_Object_Textblock_Node_Format *
9411evas_textblock_cursor_format_get(const Evas_Textblock_Cursor *cur) 9509evas_textblock_cursor_format_get(const Evas_Textblock_Cursor *cur)
9412{ 9510{
9413 if (!cur) return NULL; 9511 if (!cur) return NULL;
9512 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
9513 evas_object_async_block(obj);
9414 TB_NULL_CHECK(cur->node, NULL); 9514 TB_NULL_CHECK(cur->node, NULL);
9415 return _evas_textblock_cursor_node_format_at_pos_get(cur); 9515 return _evas_textblock_cursor_node_format_at_pos_get(cur);
9416} 9516}
@@ -9459,6 +9559,8 @@ EAPI void
9459evas_textblock_cursor_at_format_set(Evas_Textblock_Cursor *cur, const Evas_Object_Textblock_Node_Format *fmt) 9559evas_textblock_cursor_at_format_set(Evas_Textblock_Cursor *cur, const Evas_Object_Textblock_Node_Format *fmt)
9460{ 9560{
9461 if (!fmt || !cur) return; 9561 if (!fmt || !cur) return;
9562 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
9563 evas_object_async_block(obj);
9462 cur->node = fmt->text_node; 9564 cur->node = fmt->text_node;
9463 cur->pos = _evas_textblock_node_format_pos_get(fmt); 9565 cur->pos = _evas_textblock_node_format_pos_get(fmt);
9464} 9566}
@@ -9469,6 +9571,8 @@ evas_textblock_cursor_format_is_visible_get(const Evas_Textblock_Cursor *cur)
9469 const Eina_Unicode *text; 9571 const Eina_Unicode *text;
9470 9572
9471 if (!cur) return EINA_FALSE; 9573 if (!cur) return EINA_FALSE;
9574 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
9575 evas_object_async_block(obj);
9472 TB_NULL_CHECK(cur->node, EINA_FALSE); 9576 TB_NULL_CHECK(cur->node, EINA_FALSE);
9473 if (!evas_textblock_cursor_is_format(cur)) return EINA_FALSE; 9577 if (!evas_textblock_cursor_is_format(cur)) return EINA_FALSE;
9474 text = eina_ustrbuf_string_get(cur->node->unicode); 9578 text = eina_ustrbuf_string_get(cur->node->unicode);
@@ -9499,6 +9603,8 @@ EAPI Eina_Bool
9499evas_textblock_cursor_geometry_bidi_get(const Evas_Textblock_Cursor *cur, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch, Evas_Coord *cx2, Evas_Coord *cy2, Evas_Coord *cw2, Evas_Coord *ch2, Evas_Textblock_Cursor_Type ctype) 9603evas_textblock_cursor_geometry_bidi_get(const Evas_Textblock_Cursor *cur, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch, Evas_Coord *cx2, Evas_Coord *cy2, Evas_Coord *cw2, Evas_Coord *ch2, Evas_Textblock_Cursor_Type ctype)
9500{ 9604{
9501 if (!cur) return EINA_FALSE; 9605 if (!cur) return EINA_FALSE;
9606 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
9607 evas_object_async_block(obj);
9502 Evas_Textblock_Data *o = eo_data_scope_get(cur->obj, MY_CLASS); 9608 Evas_Textblock_Data *o = eo_data_scope_get(cur->obj, MY_CLASS);
9503 9609
9504 _relayout_if_needed(cur->obj, o); 9610 _relayout_if_needed(cur->obj, o);
@@ -9681,6 +9787,8 @@ evas_textblock_cursor_geometry_get(const Evas_Textblock_Cursor *cur, Evas_Coord
9681{ 9787{
9682 int ret = -1; 9788 int ret = -1;
9683 if (!cur) return -1; 9789 if (!cur) return -1;
9790 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
9791 evas_object_async_block(obj);
9684 Evas_Textblock_Data *o = eo_data_scope_get(cur->obj, MY_CLASS); 9792 Evas_Textblock_Data *o = eo_data_scope_get(cur->obj, MY_CLASS);
9685 9793
9686 _relayout_if_needed(cur->obj, o); 9794 _relayout_if_needed(cur->obj, o);
@@ -9869,6 +9977,7 @@ evas_textblock_cursor_char_geometry_get(const Evas_Textblock_Cursor *cur, Evas_C
9869{ 9977{
9870 if (!cur) return -1; 9978 if (!cur) return -1;
9871 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS); 9979 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
9980 evas_object_async_block(obj);
9872 return _evas_textblock_cursor_char_pen_geometry_common_get( 9981 return _evas_textblock_cursor_char_pen_geometry_common_get(
9873 ENFN->font_char_coords_get, cur, cx, cy, cw, ch); 9982 ENFN->font_char_coords_get, cur, cx, cy, cw, ch);
9874} 9983}
@@ -9878,6 +9987,7 @@ evas_textblock_cursor_pen_geometry_get(const Evas_Textblock_Cursor *cur, Evas_Co
9878{ 9987{
9879 if (!cur) return -1; 9988 if (!cur) return -1;
9880 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS); 9989 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
9990 evas_object_async_block(obj);
9881 return _evas_textblock_cursor_char_pen_geometry_common_get( 9991 return _evas_textblock_cursor_char_pen_geometry_common_get(
9882 ENFN->font_pen_coords_get, cur, cx, cy, cw, ch); 9992 ENFN->font_pen_coords_get, cur, cx, cy, cw, ch);
9883} 9993}
@@ -9890,6 +10000,8 @@ evas_textblock_cursor_line_geometry_get(const Evas_Textblock_Cursor *cur, Evas_C
9890 int x, y, w, h; 10000 int x, y, w, h;
9891 10001
9892 if (!cur) return -1; 10002 if (!cur) return -1;
10003 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
10004 evas_object_async_block(obj);
9893 Evas_Textblock_Data *o = eo_data_scope_get(cur->obj, MY_CLASS); 10005 Evas_Textblock_Data *o = eo_data_scope_get(cur->obj, MY_CLASS);
9894 10006
9895 _relayout_if_needed(cur->obj, o); 10007 _relayout_if_needed(cur->obj, o);
@@ -9921,6 +10033,7 @@ evas_textblock_cursor_visible_range_get(Evas_Textblock_Cursor *start, Evas_Textb
9921 Evas_Coord cy, ch; 10033 Evas_Coord cy, ch;
9922 Evas_Object *eo_obj = start->obj; 10034 Evas_Object *eo_obj = start->obj;
9923 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS); 10035 Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
10036 evas_object_async_block(obj);
9924 TB_HEAD_RETURN(EINA_FALSE); 10037 TB_HEAD_RETURN(EINA_FALSE);
9925 eo_e = evas_object_evas_get(eo_obj); 10038 eo_e = evas_object_evas_get(eo_obj);
9926 Evas_Public_Data *e = eo_data_scope_get(eo_e, EVAS_CANVAS_CLASS); 10039 Evas_Public_Data *e = eo_data_scope_get(eo_e, EVAS_CANVAS_CLASS);
@@ -9941,6 +10054,8 @@ evas_textblock_cursor_char_coord_set(Evas_Textblock_Cursor *cur, Evas_Coord x, E
9941 Evas_Object_Textblock_Item *it = NULL; 10054 Evas_Object_Textblock_Item *it = NULL;
9942 10055
9943 if (!cur) return EINA_FALSE; 10056 if (!cur) return EINA_FALSE;
10057 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
10058 evas_object_async_block(obj);
9944 Evas_Textblock_Data *o = eo_data_scope_get(cur->obj, MY_CLASS); 10059 Evas_Textblock_Data *o = eo_data_scope_get(cur->obj, MY_CLASS);
9945 10060
9946 _relayout_if_needed(cur->obj, o); 10061 _relayout_if_needed(cur->obj, o);
@@ -10055,6 +10170,8 @@ evas_textblock_cursor_line_coord_set(Evas_Textblock_Cursor *cur, Evas_Coord y)
10055 Evas_Object_Textblock_Line *ln; 10170 Evas_Object_Textblock_Line *ln;
10056 10171
10057 if (!cur) return -1; 10172 if (!cur) return -1;
10173 Evas_Object_Protected_Data *obj = eo_data_scope_get(cur->obj, EVAS_OBJECT_CLASS);
10174 evas_object_async_block(obj);
10058 Evas_Textblock_Data *o = eo_data_scope_get(cur->obj, MY_CLASS); 10175 Evas_Textblock_Data *o = eo_data_scope_get(cur->obj, MY_CLASS);
10059 10176
10060 _relayout_if_needed(cur->obj, o);