the cursor really didn't change, it's more like a new cursor.
Also, when setting position, don't do anything if position is as it
was.
+
+2011-05-27 Carsten Haitzler (The Rasterman)
+
+ * Improve performance on create/delete of edje objects by using
+ evas freeze and thaw calls. May help in certain pathological
+ situations.
+
Sel *sel;
Evas_Coord x, y, w, h;
Evas_Object *smart, *clip;
+ Evas *tev = evas_object_evas_get(o);
smart = evas_object_smart_parent_get(o);
clip = evas_object_clip_get(o);
if (en->sel_start)
range = evas_textblock_cursor_range_geometry_get(en->sel_start, en->sel_end);
- else
- return;
+ else return;
+ evas_event_freeze(tev);
if (eina_list_count(range) != eina_list_count(en->sel))
{
while (en->sel)
range = eina_list_remove_list(range, range);
}
}
+ evas_event_thaw(tev);
+ evas_event_thaw_eval(tev);
}
static void
Eina_List *parts = NULL;
Eina_List *old_swallows;
int group_path_started = 0;
+ Evas *tev = evas_object_evas_get(obj);
ed = _edje_fetch(obj);
if (!ed) return 0;
(ed->group) && (!strcmp(group, ed->group)))
return 1;
+ evas_event_freeze(tev);
old_swallows = _edje_swallows_collect(ed);
if (_edje_script_only(ed)) _edje_script_only_shutdown(ed);
if (!rp)
{
ed->load_error = EDJE_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
+ evas_event_thaw(tev);
+ evas_event_thaw_eval(tev);
return 0;
}
{
ed->load_error = EDJE_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
free(rp);
- return 0;
+ evas_event_thaw(tev);
+ evas_event_thaw_eval(tev);
+ return 0;
}
rp->drag->step.x = FROM_INT(ep->dragable.step_x);
eina_list_free(group_path);
}
ed->load_error = EDJE_LOAD_ERROR_RECURSIVE_REFERENCE;
+ evas_event_thaw(tev);
+ evas_event_thaw_eval(tev);
return 0;
}
}
}
}
ed->load_error = edje_object_load_error_get(child_obj);
+ evas_event_thaw(tev);
+ evas_event_thaw_eval(tev);
return 0;
}
child_ed = _edje_fetch(child_obj);
}
}
_edje_entry_init(ed);
+ evas_event_thaw(tev);
+ evas_event_thaw_eval(tev);
return 1;
}
else
- return 0;
+ {
+ evas_event_thaw(tev);
+ evas_event_thaw_eval(tev);
+ return 0;
+ }
ed->load_error = EDJE_LOAD_ERROR_NONE;
_edje_entry_init(ed);
+ evas_event_thaw(tev);
+ evas_event_thaw_eval(tev);
return 1;
}
void
_edje_file_del(Edje *ed)
{
+ Evas *tev = evas_object_evas_get(ed->obj);
+
+ evas_event_freeze(tev);
if (ed->freeze_calc)
{
_edje_freeze_calc_list = eina_list_remove(_edje_freeze_calc_list, ed);
// if (ed->collection->script) _edje_embryo_script_shutdown(ed);
// }
- if (!((ed->file) && (ed->collection))) return;
+ if (!((ed->file) && (ed->collection)))
+ {
+ evas_event_thaw(tev);
+ evas_event_thaw_eval(tev);
+ return;
+ }
if (ed->table_parts)
{
unsigned int i;
ed->table_programs = NULL;
ed->table_programs_size = 0;
ed->focused_part = NULL;
+ evas_event_thaw(tev);
+ evas_event_thaw_eval(tev);
}
void
_edje_smart_add(Evas_Object *obj)
{
Edje *ed;
+ Evas *tev = evas_object_evas_get(obj);
+ evas_event_freeze(tev);
ed = evas_object_smart_data_get(obj);
if (!ed)
{
const Evas_Smart_Class *sc;
ed = calloc(1, sizeof(Edje));
- if (!ed) return;
+ if (!ed) goto end_smart_add;
smart = evas_object_smart_smart_get(obj);
sc = evas_smart_class_get(smart);
printf("--- EDJE DUMP [%i]\n", eina_list_count(_edje_edjes));
}
*/
+end_smart_add:
+ evas_event_thaw(tev);
+ evas_event_thaw_eval(tev);
}
static void