diff --git a/legacy/edje/configure.ac b/legacy/edje/configure.ac index 1a9ccd627c..155e6b652e 100644 --- a/legacy/edje/configure.ac +++ b/legacy/edje/configure.ac @@ -3,7 +3,7 @@ dnl Process this file with autoconf to produce a configure script. # get rid of that stupid cache mechanism rm -f config.cache -AC_INIT([edje], [0.9.9.050], [enlightenment-devel@lists.sourceforge.net]) +AC_INIT([edje], [0.9.9.050.7], [enlightenment-devel@lists.sourceforge.net]) AC_PREREQ(2.52) AC_CONFIG_SRCDIR([configure.ac]) AC_CONFIG_MACRO_DIR([m4]) diff --git a/legacy/edje/src/lib/edje_calc.c b/legacy/edje/src/lib/edje_calc.c index 91fc593bc5..a89cabd4a1 100644 --- a/legacy/edje/src/lib/edje_calc.c +++ b/legacy/edje/src/lib/edje_calc.c @@ -137,21 +137,30 @@ _edje_part_description_apply(Edje *ed, Edje_Real_Part *ep, const char *d1, doubl void _edje_recalc(Edje *ed) { - int i; - - if (!ed->dirty) - { - return; - } if ((ed->freeze > 0) || (_edje_freeze_val > 0)) { ed->recalc = 1; if (!ed->calc_only) { if (_edje_freeze_val > 0) _edje_freeze_calc_count++; - return; + return ; } } + if (ed->postponed) return ; + evas_object_smart_changed(ed->obj); + ed->postponed = 1; +} + +void +_edje_recalc_do(Edje *ed) +{ + int i; + + ed->postponed = 0; + if (!ed->dirty) + { + return; + } for (i = 0; i < ed->table_parts_size; i++) { Edje_Real_Part *ep; @@ -168,8 +177,9 @@ _edje_recalc(Edje *ed) if (ep->calculated != FLAG_XY) _edje_part_recalc(ed, ep, (~ep->calculated) & FLAG_XY); } - ed->dirty = 0; if (!ed->calc_only) ed->recalc = 0; + ed->dirty = 0; + ed->calc_only = 0; } int diff --git a/legacy/edje/src/lib/edje_callbacks.c b/legacy/edje/src/lib/edje_callbacks.c index 66583aa6a9..3e584dc0c5 100644 --- a/legacy/edje/src/lib/edje_callbacks.c +++ b/legacy/edje/src/lib/edje_callbacks.c @@ -117,7 +117,7 @@ _edje_mouse_down_cb(void *data, Evas * e, Evas_Object * obj, void *event_info) } ed->dirty = 1; } - _edje_recalc(ed); + _edje_recalc_do(ed); /* _edje_thaw(ed); _edje_unref(ed); @@ -139,7 +139,7 @@ _edje_mouse_down_cb(void *data, Evas * e, Evas_Object * obj, void *event_info) _edje_emit(ed, "drag", rp->part->name); ed->dirty = 1; rp->drag.need_reset = 1; - _edje_recalc(ed); + _edje_recalc_do(ed); } } } @@ -162,7 +162,7 @@ _edje_mouse_down_cb(void *data, Evas * e, Evas_Object * obj, void *event_info) rp->clicked_button = ev->button; rp->still_in = 1; } -// _edje_recalc(ed); +// _edje_recalc_do(ed); _edje_thaw(ed); _edje_unref(ed); return; @@ -226,7 +226,7 @@ _edje_mouse_up_cb(void *data, Evas * e, Evas_Object * obj, void *event_info) rp->clicked_button = 0; rp->still_in = 0; -// _edje_recalc(ed); +// _edje_recalc_do(ed); _edje_thaw(ed); _edje_unref(ed); return; @@ -282,7 +282,7 @@ _edje_mouse_move_cb(void *data, Evas * e, Evas_Object * obj, void *event_info) rp->drag.tmp.y = ev->cur.canvas.y - rp->drag.down.y; ed->dirty = 1; } - _edje_recalc(ed); + _edje_recalc_do(ed); } if ((rp->part->dragable.x) || (rp->part->dragable.y)) { @@ -299,7 +299,7 @@ _edje_mouse_move_cb(void *data, Evas * e, Evas_Object * obj, void *event_info) if (!ignored) _edje_emit(ed, "drag", rp->part->name); ed->dirty = 1; - _edje_recalc(ed); + _edje_recalc_do(ed); } } } diff --git a/legacy/edje/src/lib/edje_private.h b/legacy/edje/src/lib/edje_private.h index a203fde7a1..6183870603 100644 --- a/legacy/edje/src/lib/edje_private.h +++ b/legacy/edje/src/lib/edje_private.h @@ -667,6 +667,7 @@ struct _Edje unsigned short walking_actions : 1; unsigned short block_break : 1; unsigned short delete_me : 1; + unsigned short postponed : 1; }; struct _Edje_Real_Part @@ -1009,6 +1010,7 @@ void _edje_part_pos_set(Edje *ed, Edje_Real_Part *ep, int mode, double pos); Edje_Part_Description *_edje_part_description_find(Edje *ed, Edje_Real_Part *rp, const char *name, double val); void _edje_part_description_apply(Edje *ed, Edje_Real_Part *ep, const char *d1, double v1, const char *d2, double v2); void _edje_recalc(Edje *ed); +void _edje_recalc_do(Edje *ed); int _edje_part_dragable_calc(Edje *ed, Edje_Real_Part *ep, double *x, double *y); void _edje_dragable_pos_set(Edje *ed, Edje_Real_Part *ep, double x, double y); diff --git a/legacy/edje/src/lib/edje_program.c b/legacy/edje/src/lib/edje_program.c index 3e778f2f42..d80ae3840e 100644 --- a/legacy/edje/src/lib/edje_program.c +++ b/legacy/edje/src/lib/edje_program.c @@ -749,7 +749,7 @@ _edje_program_run(Edje *ed, Edje_Program *pr, int force, const char *ssig, const _edje_embryo_test_run(ed, fname, ssig, ssrc); // _edje_emit(ed, "program,stop", pr->name); if (_edje_block_break(ed)) goto break_prog; - _edje_recalc(ed); + _edje_recalc_do(ed); } else if (pr->action == EDJE_ACTION_TYPE_FOCUS_SET) { diff --git a/legacy/edje/src/lib/edje_smart.c b/legacy/edje/src/lib/edje_smart.c index 5ddc26ab73..1cd5dc4a19 100644 --- a/legacy/edje/src/lib/edje_smart.c +++ b/legacy/edje/src/lib/edje_smart.c @@ -13,6 +13,7 @@ static void _edje_smart_hide(Evas_Object * obj); static void _edje_smart_color_set(Evas_Object * obj, int r, int g, int b, int a); static void _edje_smart_clip_set(Evas_Object * obj, Evas_Object * clip); static void _edje_smart_clip_unset(Evas_Object * obj); +static void _edje_smart_calculate(Evas_Object * obj); static Evas_Smart *_edje_smart = NULL; @@ -45,7 +46,7 @@ edje_object_add(Evas *evas) _edje_smart_color_set, _edje_smart_clip_set, _edje_smart_clip_unset, - NULL, + _edje_smart_calculate, NULL, NULL, NULL @@ -170,7 +171,7 @@ _edje_smart_resize(Evas_Object * obj, Evas_Coord w, Evas_Coord h) } // evas_object_resize(ed->clipper, ed->w, ed->h); ed->dirty = 1; - _edje_recalc(ed); + _edje_recalc_do(ed); _edje_emit(ed, "resize", NULL); } @@ -244,3 +245,13 @@ _edje_smart_clip_unset(Evas_Object * obj) evas_object_clip_unset(ed->clipper); // _edje_emit(ed, "clip_unset", NULL); } + +static void +_edje_smart_calculate(Evas_Object *obj) +{ + Edje *ed; + + ed = evas_object_smart_data_get(obj); + if (!ed) return; + _edje_recalc_do(ed); +} diff --git a/legacy/edje/src/lib/edje_util.c b/legacy/edje/src/lib/edje_util.c index 0044e75c3d..7e419e7829 100644 --- a/legacy/edje/src/lib/edje_util.c +++ b/legacy/edje/src/lib/edje_util.c @@ -75,7 +75,7 @@ _edje_thaw_edje(Edje *ed) if (ed2) _edje_thaw_edje(ed2); } } - if ((ed->recalc) && (ed->freeze <= 0)) _edje_recalc(ed); + if ((ed->recalc) && (ed->freeze <= 0)) _edje_recalc_do(ed); } #endif @@ -785,6 +785,10 @@ edje_object_part_object_get(const Evas_Object *obj, const char *part) ed = _edje_fetch(obj); if ((!ed) || (!part)) return NULL; + + /* Need to recalc before providing the object. */ + _edje_recalc_do(ed); + rp = _edje_real_part_recursive_get(ed, (char *)part); if (!rp) return NULL; return rp->object; @@ -818,6 +822,10 @@ edje_object_part_geometry_get(const Evas_Object *obj, const char *part, Evas_Coo if (h) *h = 0; return; } + + /* Need to recalc before providing the object. */ + _edje_recalc_do(ed); + rp = _edje_real_part_recursive_get(ed, (char *)part); if (!rp) { @@ -904,6 +912,10 @@ edje_object_part_text_get(const Evas_Object *obj, const char *part) ed = _edje_fetch(obj); if ((!ed) || (!part)) return NULL; + + /* Need to recalc before providing the object. */ + _edje_recalc_do(ed); + rp = _edje_real_part_recursive_get(ed, (char *)part); if (!rp) return NULL; if (rp->part->entry_mode > EDJE_ENTRY_EDIT_MODE_NONE) @@ -1051,6 +1063,10 @@ edje_object_part_swallow(Evas_Object *obj, const char *part, Evas_Object *obj_sw ed = _edje_fetch(obj); if ((!ed) || (!part)) return; + + /* Need to recalc before providing the object. */ + _edje_recalc_do(ed); + rp = _edje_real_part_recursive_get(ed, (char *)part); if (!rp) return; if (rp->part->type != EDJE_PART_TYPE_SWALLOW) return; @@ -1189,7 +1205,7 @@ edje_object_part_unswallow(Evas_Object *obj, Evas_Object *obj_swallow) rp->swallow_params.max.w = 0; rp->swallow_params.max.h = 0; rp->edje->dirty = 1; - _edje_recalc(rp->edje); + _edje_recalc_do(rp->edje); return; } } @@ -1207,6 +1223,10 @@ edje_object_part_swallow_get(const Evas_Object *obj, const char *part) ed = _edje_fetch(obj); if ((!ed) || (!part)) return NULL; + + /* Need to recalc before providing the object. */ + _edje_recalc_do(ed); + rp = _edje_real_part_recursive_get(ed, (char *)part); if (!rp) return NULL; return rp->swallowed_object; @@ -1256,6 +1276,10 @@ edje_object_size_max_get(const Evas_Object *obj, Evas_Coord *maxw, Evas_Coord *m if (maxh) *maxh = 0; return; } + + /* Need to recalc before providing the object. */ + _edje_recalc_do(ed); + if (ed->collection->prop.max.w == 0) { /* XXX TODO: convert maxw to 0, fix things that break. */ @@ -1298,7 +1322,7 @@ edje_object_calc_force(Evas_Object *obj) _edje_freeze_val = 0; ed->freeze = 0; - _edje_recalc(ed); + _edje_recalc_do(ed); ed->freeze = pf; _edje_freeze_val = pf2; @@ -1362,7 +1386,7 @@ edje_object_size_min_restricted_calc(Evas_Object *obj, Evas_Coord *minw, Evas_Co ok = 0; ed->dirty = 1; - _edje_recalc(ed); + _edje_recalc_do(ed); if (reset_maxwh) { maxw = 0; @@ -1466,6 +1490,10 @@ edje_object_part_state_get(const Evas_Object *obj, const char *part, double *val if (val_ret) *val_ret = 0; return ""; } + + /* Need to recalc before providing the object. */ + _edje_recalc_do(ed); + rp = _edje_real_part_recursive_get(ed, (char *)part); if (!rp) { @@ -1510,6 +1538,10 @@ edje_object_part_drag_dir_get(const Evas_Object *obj, const char *part) ed = _edje_fetch(obj); if ((!ed) || (!part)) return EDJE_DRAG_DIR_NONE; + + /* Need to recalc before providing the object. */ + _edje_recalc_do(ed); + rp = _edje_real_part_recursive_get(ed, (char *)part); if (!rp) return EDJE_DRAG_DIR_NONE; if ((rp->part->dragable.x) && (rp->part->dragable.y)) return EDJE_DRAG_DIR_XY; @@ -1574,6 +1606,10 @@ edje_object_part_drag_value_get(const Evas_Object *obj, const char *part, double if (dy) *dy = 0; return; } + + /* Need to recalc before providing the object. */ + _edje_recalc_do(ed); + rp = _edje_real_part_recursive_get(ed, (char *)part); if (!rp) { @@ -1639,6 +1675,10 @@ edje_object_part_drag_size_get(const Evas_Object *obj, const char *part, double if (dh) *dh = 0; return; } + + /* Need to recalc before providing the object. */ + _edje_recalc_do(ed); + rp = _edje_real_part_recursive_get(ed, (char *)part); if (!rp) { @@ -1697,6 +1737,10 @@ edje_object_part_drag_step_get(const Evas_Object *obj, const char *part, double if (dy) *dy = 0; return; } + + /* Need to recalc before providing the object. */ + _edje_recalc_do(ed); + rp = _edje_real_part_recursive_get(ed, (char *)part); if (!rp) { @@ -1755,6 +1799,10 @@ edje_object_part_drag_page_get(const Evas_Object *obj, const char *part, double if (dy) *dy = 0; return; } + + /* Need to recalc before providing the object. */ + _edje_recalc_do(ed); + rp = _edje_real_part_recursive_get(ed, (char *)part); if (!rp) {