Enlightenment CVS committal
Author : raster
Project : e17
Module : libs/edje
Dir : e17/libs/edje/src/lib
Modified Files:
edje_callbacks.c edje_load.c edje_private.h edje_program.c
edje_smart.c edje_util.c
Log Message:
IMMENSELY evil!
akuma no code desu!
there are a LOT of paths that lead to calling external callbacks froma
pgoram thaty will invalidate the loop or code just after that call-
causing... segv's and all sort sof fun goodies. i've blocks/locks off a lot
of them... i hope i haven't missed any - but it's likely. tread carefully
within callbacks!
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_callbacks.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -3 -r1.8 -r1.9
--- edje_callbacks.c 15 Aug 2003 13:35:25 -0000 1.8
+++ edje_callbacks.c 26 Aug 2003 00:16:49 -0000 1.9
@@ -62,6 +62,7 @@
else
#endif
snprintf(buf, sizeof(buf), "mouse,down,%i", ev->button);
+ _edje_ref(ed);
if ((rp->part->dragable.x) || (rp->part->dragable.y))
{
if (rp->drag.down.count == 0)
@@ -83,6 +84,7 @@
_edje_emit(ed, buf, rp->part->name);
_edje_recalc(ed);
_edje_thaw(ed);
+ _edje_unref(ed);
}
void
@@ -98,6 +100,7 @@
rp = evas_object_data_get(obj, "real_part");
if (!rp) return;
snprintf(buf, sizeof(buf), "mouse,up,%i", ev->button);
+ _edje_ref(ed);
_edje_emit(ed, buf, rp->part->name);
if ((rp->part->dragable.x) || (rp->part->dragable.y))
{
@@ -122,6 +125,7 @@
}
_edje_recalc(ed);
_edje_thaw(ed);
+ _edje_unref(ed);
}
void
@@ -165,11 +169,11 @@
ed->dirty = 1;
}
}
+ _edje_ref(ed);
_edje_emit(ed, "mouse,move", rp->part->name);
ed->calc_only = 1;
_edje_recalc(ed);
ed->calc_only = 0;
- _edje_thaw(ed);
if ((rp->part->dragable.x) || (rp->part->dragable.y))
{
if (rp->drag.down.count > 0)
@@ -187,6 +191,8 @@
}
}
}
+ _edje_unref(ed);
+ _edje_thaw(ed);
}
void
@@ -225,9 +231,10 @@
Evas_List *newl = NULL;
ed = animl->data;
+ _edje_block(ed);
_edje_freeze(ed);
animl = evas_list_remove(animl, animl->data);
- if (!ed->paused)
+ if ((!ed->paused) && (!ed->delete_me))
{
ed->walking_actions = 1;
for (l = ed->actions; l; l = l->next)
@@ -240,6 +247,12 @@
newl = evas_list_remove(newl, newl->data);
if (!runp->delete_me)
_edje_program_run_iterate(runp, t);
+ if (_edje_block_break(ed))
+ {
+ evas_list_free(newl);
+ newl = NULL;
+ goto break_prog;
+ }
}
for (l = ed->actions; l; l = l->next)
newl = evas_list_append(newl, l->data);
@@ -262,6 +275,8 @@
}
ed->walking_actions = 0;
}
+ break_prog:
+ _edje_unblock(ed);
_edje_thaw(ed);
_edje_unref(ed);
}
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_load.c,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -3 -r1.22 -r1.23
--- edje_load.c 15 Aug 2003 13:35:25 -0000 1.22
+++ edje_load.c 26 Aug 2003 00:16:49 -0000 1.23
@@ -85,6 +85,7 @@
rp->part = ep;
ed->parts = evas_list_append(ed->parts, rp);
rp->param1.description = ep->default_desc;
+ printf("MEH %s\n", rp->part->name);
if (!rp->param1.description)
{
printf("EDJE ERROR: no default part description!\n");
@@ -133,8 +134,8 @@
}
else
evas_object_pass_events_set(rp->object, 1);
- evas_object_clip_set(rp->object, ed->clipper);
- evas_object_show(rp->object);
+ if (rp->part->clip_to_id < 0)
+ evas_object_clip_set(rp->object, ed->clipper);
}
for (l = ed->parts; l; l = l->next)
{
@@ -162,13 +163,25 @@
if (rp->part->dragable.confine_id >= 0)
rp->confine_to = evas_list_nth(ed->parts,
rp->part->dragable.confine_id);
}
- ed->dirty = 1;
+ _edje_ref(ed);
+ _edje_block(ed);
_edje_freeze(ed);
- _edje_recalc(ed);
_edje_emit(ed, "load", "");
- _edje_thaw(ed);
+ for (l = ed->parts; l; l = l->next)
+ {
+ Edje_Real_Part *rp;
+
+ rp = l->data;
+ evas_object_show(rp->object);
+ if (_edje_block_break(ed)) break;
+ }
+ ed->dirty = 1;
if ((ed->parts) && (evas_object_visible_get(obj)))
evas_object_show(ed->clipper);
+ _edje_recalc(ed);
+ _edje_thaw(ed);
+ _edje_unblock(ed);
+ _edje_unref(ed);
}
}
@@ -359,9 +372,9 @@
void
_edje_file_del(Edje *ed)
{
- /* segv's sometimes happen after here... */
- /* avoid segv's... but LEAK */
- /* return; */
+ _edje_emit(ed, NULL, NULL); /* clear out signal emissions */
+ ed->dont_clear_signals = 1;
+ _edje_block_violate(ed);
if (ed->collection)
{
ed->collection->references--;
@@ -385,7 +398,6 @@
rp = ed->parts->data;
ed->parts = evas_list_remove(ed->parts, rp);
- _edje_text_part_on_del(ed, rp);
evas_object_event_callback_del(rp->object,
EVAS_CALLBACK_MOUSE_IN,
_edje_mouse_in_cb);
@@ -404,6 +416,7 @@
evas_object_event_callback_del(rp->object,
EVAS_CALLBACK_MOUSE_WHEEL,
_edje_mouse_wheel_cb);
+ _edje_text_part_on_del(ed, rp);
evas_object_del(rp->object);
if (rp->swallowed_object)
{
@@ -431,8 +444,8 @@
ed->actions = evas_list_remove(ed->actions, runp);
free(runp);
}
- _edje_animators = evas_list_remove(_edje_animators, ed);
}
+ _edje_animators = evas_list_remove(_edje_animators, ed);
if (ed->pending_actions)
{
while (ed->pending_actions)
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_private.h,v
retrieving revision 1.42
retrieving revision 1.43
diff -u -3 -r1.42 -r1.43
--- edje_private.h 15 Aug 2003 13:35:25 -0000 1.42
+++ edje_private.h 26 Aug 2003 00:16:49 -0000 1.43
@@ -17,9 +17,13 @@
/* FIXME:
*
+ * recursions, unsafe callbacks outside edje etc. with freeze, ref/unref and
blobk/unblock and break_programs needs to be redesigned & fixed
+ * all unsafe calls that may result in callbacks must be marked and dealt with
+ *
+ * dragable needs to be able to reverse value affect for "other direction" drag
+ * dragable relative value needs to be able to be set or ++/-- by actions
* dragable needs to be able to affect rel/abs values of other parts
* dragable relative value needs to be able to be applied to other part vals.
- * dragable relative value needs to be able to be set or ++/-- by actions
*
* more example edje files
*
@@ -370,6 +374,9 @@
unsigned short no_anim : 1;
unsigned short calc_only : 1;
unsigned short walking_actions : 1;
+ unsigned short block_break : 1;
+ unsigned short delete_me : 1;
+ unsigned short dont_clear_signals : 1;
double paused_at;
Evas *evas; /* the evas this edje belongs to */
Evas_Object *obj; /* the smart object */
@@ -384,7 +391,8 @@
Evas_List *text_classes;
int freeze;
int references;
-
+ int block;
+ Evas_List *emissions;
};
struct _Edje_Real_Part
@@ -581,6 +589,10 @@
int _edje_glob_match(char *str, char *glob);
int _edje_freeze(Edje *ed);
int _edje_thaw(Edje *ed);
+int _edje_block(Edje *ed);
+int _edje_unblock(Edje *ed);
+int _edje_block_break(Edje *ed);
+void _edje_block_violate(Edje *ed);
void _edje_object_part_swallow_free_cb(void *data, Evas *e, Evas_Object
*obj, void *event_info);
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_program.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -3 -r1.18 -r1.19
--- edje_program.c 15 Aug 2003 13:35:25 -0000 1.18
+++ edje_program.c 26 Aug 2003 00:16:49 -0000 1.19
@@ -37,6 +37,7 @@
if ((!emission) || (!source) || (!func)) return;
ed = _edje_fetch(obj);
if (!ed) return;
+ if (ed->delete_me) return;
escb = calloc(1, sizeof(Edje_Signal_Callback));
escb->signal = strdup(emission);
escb->source = strdup(source);
@@ -59,6 +60,7 @@
if ((!emission) || (!source) || (!func)) return NULL;
ed = _edje_fetch(obj);
if (!ed) return;
+ if (ed->delete_me) return NULL;
for (l = ed->callbacks; l; l = l->next)
{
Edje_Signal_Callback *escb;
@@ -97,6 +99,7 @@
if ((!emission) || (!source)) return;
ed = _edje_fetch(obj);
if (!ed) return;
+ if (ed->delete_me) return;
_edje_emit(ed, (char *)emission, (char *)source);
}
@@ -109,6 +112,7 @@
ed = _edje_fetch(obj);
if (!ed) return;
+ if (ed->delete_me) return;
if (play)
{
if (!ed->paused) return;
@@ -137,6 +141,7 @@
ed = _edje_fetch(obj);
if (!ed) return 0;
+ if (ed->delete_me) return 0;
if (ed->paused) return 0;
return 1;
}
@@ -149,6 +154,8 @@
ed = _edje_fetch(obj);
if (!ed) return;
+ if (ed->delete_me) return;
+ _edje_block(ed);
ed->no_anim = !on;
_edje_freeze(ed);
if (!on)
@@ -164,6 +171,11 @@
runp = newl->data;
newl = evas_list_remove(newl, newl->data);
_edje_program_run_iterate(runp, runp->start_time +
runp->program->tween.time);
+ if (_edje_block_break(ed))
+ {
+ evas_list_free(newl);
+ goto break_prog;
+ }
}
}
else
@@ -175,7 +187,9 @@
evas_object_show(obj);
}
}
+ break_prog:
_edje_thaw(ed);
+ _edje_unblock(ed);
}
int
@@ -185,6 +199,7 @@
ed = _edje_fetch(obj);
if (!ed) return 0;
+ if (ed->delete_me) return 0;
if (ed->no_anim) return 0;
return 1;
}
@@ -196,9 +211,13 @@
{
double t, total;
Evas_List *l;
+ Edje *ed;
- _edje_ref(runp->edje);
- _edje_freeze(runp->edje);
+ ed = runp->edje;
+ if (ed->delete_me) return 0;
+ _edje_block(ed);
+ _edje_ref(ed);
+ _edje_freeze(ed);
t = tim - runp->start_time;
total = runp->program->tween.time;
t /= total;
@@ -209,8 +228,8 @@
Edje_Program_Target *pt;
pt = l->data;
- rp = evas_list_nth(runp->edje->parts, pt->id);
- if (rp) _edje_part_pos_set(runp->edje, rp,
+ rp = evas_list_nth(ed->parts, pt->id);
+ if (rp) _edje_part_pos_set(ed, rp,
runp->program->tween.mode, t);
}
if (t >= 1.0)
@@ -221,45 +240,50 @@
Edje_Program_Target *pt;
pt = l->data;
- rp = evas_list_nth(runp->edje->parts, pt->id);
+ rp = evas_list_nth(ed->parts, pt->id);
if (rp)
{
- _edje_part_description_apply(runp->edje, rp,
+ _edje_part_description_apply(ed, rp,
runp->program->state,
runp->program->value,
NULL,
0.0);
- _edje_part_pos_set(runp->edje, rp,
+ _edje_part_pos_set(ed, rp,
runp->program->tween.mode, 0.0);
rp->program = NULL;
}
}
- _edje_recalc(runp->edje);
+ _edje_recalc(ed);
runp->delete_me = 1;
- if (!runp->edje->walking_actions)
+ if (!ed->walking_actions)
{
_edje_anim_count--;
- runp->edje->actions = evas_list_remove(runp->edje->actions, runp);
- if (!runp->edje->actions)
- _edje_animators = evas_list_remove(_edje_animators, runp->edje);
+ ed->actions = evas_list_remove(ed->actions, runp);
+ if (!ed->actions)
+ _edje_animators = evas_list_remove(_edje_animators, ed);
}
- _edje_emit(runp->edje, "program,stop", runp->program->name);
+ _edje_emit(ed, "program,stop", runp->program->name);
+ if (_edje_block_break(ed)) goto break_prog;
if (runp->program->after >= 0)
{
Edje_Program *pr;
- pr = evas_list_nth(runp->edje->collection->programs,
+ pr = evas_list_nth(ed->collection->programs,
runp->program->after);
- if (pr) _edje_program_run(runp->edje, pr, 0);
+ if (pr) _edje_program_run(ed, pr, 0);
+ if (_edje_block_break(ed)) goto break_prog;
}
- _edje_thaw(runp->edje);
- _edje_unref(runp->edje);
- if (!runp->edje->walking_actions) free(runp);
+ _edje_thaw(ed);
+ _edje_unref(ed);
+ if (!ed->walking_actions) free(runp);
+ _edje_unblock(ed);
return 0;
}
- _edje_recalc(runp->edje);
- _edje_thaw(runp->edje);
- _edje_unref(runp->edje);
+ break_prog:
+ _edje_recalc(ed);
+ _edje_thaw(ed);
+ _edje_unref(ed);
+ _edje_unblock(ed);
return 1;
}
@@ -267,41 +291,46 @@
_edje_program_end(Edje *ed, Edje_Running_Program *runp)
{
Evas_List *l;
+ char *pname = NULL;
- _edje_ref(runp->edje);
- _edje_freeze(runp->edje);
+ if (ed->delete_me) return;
+ _edje_ref(ed);
+ _edje_freeze(ed);
for (l = runp->program->targets; l; l = l->next)
{
Edje_Real_Part *rp;
Edje_Program_Target *pt;
pt = l->data;
- rp = evas_list_nth(runp->edje->parts, pt->id);
+ rp = evas_list_nth(ed->parts, pt->id);
if (rp)
{
- _edje_part_description_apply(runp->edje, rp,
+ _edje_part_description_apply(ed, rp,
runp->program->state,
runp->program->value,
NULL,
0.0);
- _edje_part_pos_set(runp->edje, rp,
+ _edje_part_pos_set(ed, rp,
runp->program->tween.mode, 0.0);
rp->program = NULL;
}
}
- _edje_recalc(runp->edje);
+ _edje_recalc(ed);
runp->delete_me = 1;
- if (!runp->edje->walking_actions)
+ pname = runp->program->name;
+ if (!ed->walking_actions)
{
_edje_anim_count--;
- runp->edje->actions = evas_list_remove(runp->edje->actions, runp);
- if (!runp->edje->actions)
- _edje_animators = evas_list_remove(_edje_animators, runp->edje);
- }
- _edje_emit(runp->edje, "program,stop", runp->program->name);
- _edje_thaw(runp->edje);
- _edje_unref(runp->edje);
- if (!runp->edje->walking_actions) free(runp);
+ ed->actions = evas_list_remove(ed->actions, runp);
+ if (!ed->actions)
+ {
+ _edje_animators = evas_list_remove(_edje_animators, ed);
+ free(runp);
+ }
+ }
+ _edje_emit(ed, "program,stop", pname);
+ _edje_thaw(ed);
+ _edje_unref(ed);
}
void
@@ -312,6 +341,7 @@
static int recursions = 0;
static int recursion_limit = 0;
+ if (ed->delete_me) return;
if ((pr->in.from > 0.0) && (pr->in.range >= 0.0) && (!force))
{
Edje_Pending_Program *pp;
@@ -340,8 +370,10 @@
return;
}
recursions++;
- _edje_freeze(ed);
+ _edje_block(ed);
_edje_ref(ed);
+ _edje_freeze(ed);
+ printf("run program %s\n", pr->name);
if (pr->action == EDJE_ACTION_TYPE_STATE_SET)
{
if ((pr->tween.time > 0.0) && (!ed->no_anim))
@@ -370,7 +402,7 @@
}
}
_edje_emit(ed, "program,start", pr->name);
-
+ if (_edje_block_break(ed)) goto break_prog;
if (!ed->actions)
_edje_animators = evas_list_append(_edje_animators, ed);
ed->actions = evas_list_append(ed->actions, runp);
@@ -403,7 +435,9 @@
}
}
_edje_emit(ed, "program,start", pr->name);
+ if (_edje_block_break(ed)) goto break_prog;
_edje_emit(ed, "program,stop", pr->name);
+ if (_edje_block_break(ed)) goto break_prog;
if (pr->after >= 0)
{
Edje_Program *pr2;
@@ -411,6 +445,7 @@
pr2 = evas_list_nth(ed->collection->programs,
pr->after);
if (pr2) _edje_program_run(ed, pr2, 0);
+ if (_edje_block_break(ed)) goto break_prog;
}
_edje_recalc(ed);
}
@@ -451,12 +486,16 @@
done:
}
_edje_emit(ed, "program,stop", pr->name);
+ if (_edje_block_break(ed)) goto break_prog;
}
else if (pr->action == EDJE_ACTION_TYPE_SIGNAL_EMIT)
{
_edje_emit(ed, "program,start", pr->name);
+ if (_edje_block_break(ed)) goto break_prog;
_edje_emit(ed, pr->state, pr->state2);
+ if (_edje_block_break(ed)) goto break_prog;
_edje_emit(ed, "program,stop", pr->name);
+ if (_edje_block_break(ed)) goto break_prog;
}
if (pr->action != EDJE_ACTION_TYPE_STATE_SET)
{
@@ -466,57 +505,79 @@
pr2 = evas_list_nth(ed->collection->programs, pr->after);
if (pr2) _edje_program_run(ed, pr2, 0);
+ if (_edje_block_break(ed)) goto break_prog;
}
}
- _edje_unref(ed);
+ break_prog:
_edje_thaw(ed);
+ _edje_unref(ed);
recursions--;
if (recursions == 0) recursion_limit = 0;
+ _edje_unblock(ed);
}
void
_edje_emit(Edje *ed, char *sig, char *src)
{
Evas_List *l;
- static Evas_List *emissions = NULL;
Edje_Emission *ee;
/* limit self-feeding loops in callbacks to 64 levels */
static int recursions = 0;
static int recursion_limit = 0;
+ if ((!sig) && (!src))
+ {
+ printf("clear signals! %p\n", ed->emissions);
+ while (ed->emissions)
+ {
+ ee = ed->emissions->data;
+ free(ee->signal);
+ free(ee->source);
+ free(ee);
+ ed->emissions = evas_list_remove(ed->emissions, ee);
+ }
+ return;
+ }
+ if (ed->delete_me) return;
if ((recursions >= 64) || (recursion_limit))
{
recursion_limit = 1;
return;
}
recursions++;
- _edje_ref(ed);
- _edje_freeze(ed);
printf("EDJE EMIT: signal: \"%s\" source: \"%s\"\n", sig, src);
- ee = calloc(1, sizeof(Edje_Emission));
- if (!ee)
+ if ((sig) && (src))
{
- recursions--;
- if (recursions == 0) recursion_limit = 0;
- return;
- }
- ee->signal = strdup(sig);
- ee->source = strdup(src);
- if (emissions)
- {
- emissions = evas_list_append(emissions, ee);
- _edje_thaw(ed);
- _edje_unref(ed);
- recursions--;
- if (recursions == 0) recursion_limit = 0;
- return;
+ printf("queue emission\n");
+ ee = calloc(1, sizeof(Edje_Emission));
+ if (!ee)
+ {
+ recursions--;
+ if (recursions == 0) recursion_limit = 0;
+ return;
+ }
+ ee->signal = strdup(sig);
+ ee->source = strdup(src);
+ if ((ed->emissions) || (_edje_block_break(ed)))
+ {
+ printf("append signal & leave\n");
+ ed->emissions = evas_list_append(ed->emissions, ee);
+ recursions--;
+ if (recursions == 0) recursion_limit = 0;
+ return;
+ }
+ else
+ ed->emissions = evas_list_append(ed->emissions, ee);
}
- else
- emissions = evas_list_append(emissions, ee);
- while (emissions)
+ if (!ed->emissions) return;
+ _edje_block(ed);
+ _edje_ref(ed);
+ _edje_freeze(ed);
+ while (ed->emissions)
{
- ee = emissions->data;
- emissions = evas_list_remove(emissions, ee);
+ ee = ed->emissions->data;
+ ed->emissions = evas_list_remove(ed->emissions, ee);
+ printf("EDJE: handle emission \"%s\" \"%s\"\n", ee->signal, ee->source);
if (ed->collection)
{
Edje_Part_Collection *ec;
@@ -542,7 +603,9 @@
Evas_List *matches;
if (evas_hash_find(ec->prog_cache.no_matches, tmps))
- done = 1;
+ {
+ done = 1;
+ }
else if ((matches = evas_hash_find(ec->prog_cache.matches, tmps)))
{
for (l = matches; l; l = l->next)
@@ -551,6 +614,13 @@
pr = l->data;
_edje_program_run(ed, pr, 0);
+ if (_edje_block_break(ed))
+ {
+ if (tmps) free(tmps);
+ if (!ed->dont_clear_signals)
+ _edje_emit(ed, NULL, NULL);
+ goto break_prog;
+ }
}
done = 1;
}
@@ -572,6 +642,14 @@
{
matched++;
_edje_program_run(ed, pr, 0);
+ if (_edje_block_break(ed))
+ {
+ if (tmps) free(tmps);
+ evas_list_free(matches);
+ if (!ed->dont_clear_signals)
+ _edje_emit(ed, NULL, NULL);
+ goto break_prog;
+ }
matches = evas_list_append(matches, pr);
}
}
@@ -586,16 +664,26 @@
}
}
_edje_emit_cb(ed, ee->signal, ee->source);
+ if (_edje_block_break(ed))
+ {
+ if (tmps) free(tmps);
+ if (!ed->dont_clear_signals)
+ _edje_emit(ed, NULL, NULL);
+ goto break_prog;
+ }
if (tmps) free(tmps);
+ tmps = NULL;
}
free(ee->signal);
free(ee->source);
free(ee);
}
- _edje_thaw(ed);
- _edje_unref(ed);
+ break_prog:
recursions--;
if (recursions == 0) recursion_limit = 0;
+ _edje_thaw(ed);
+ _edje_unref(ed);
+ _edje_unblock(ed);
}
static void
@@ -603,6 +691,10 @@
{
Evas_List *l;
+ if (ed->delete_me) return;
+ _edje_ref(ed);
+ _edje_freeze(ed);
+ _edje_block(ed);
ed->walking_callbacks = 1;
for (l = ed->callbacks; l; l = l->next)
{
@@ -614,6 +706,7 @@
(_edje_glob_match(sig, escb->signal)) &&
(_edje_glob_match(src, escb->source)))
escb->func(escb->data, ed->obj, sig, src);
+ if (_edje_block_break(ed)) goto break_prog;
}
ed->walking_callbacks = 0;
if ((ed->delete_callbacks) || (ed->just_added_callbacks))
@@ -639,4 +732,8 @@
l = next_l;
}
}
+ break_prog:
+ _edje_unblock(ed);
+ _edje_thaw(ed);
+ _edje_unref(ed);
}
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_smart.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -3 -r1.9 -r1.10
--- edje_smart.c 30 Jul 2003 02:58:22 -0000 1.9
+++ edje_smart.c 26 Aug 2003 00:16:49 -0000 1.10
@@ -67,6 +67,8 @@
ed = evas_object_smart_data_get(obj);
if (!ed) return;
+ _edje_block_violate(ed);
+ ed->delete_me = 1;
_edje_clean_objects(ed);
_edje_unref(ed);
_edje_edjes = evas_list_remove(_edje_edjes, obj);
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_util.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -3 -r1.19 -r1.20
--- edje_util.c 15 Aug 2003 13:35:25 -0000 1.19
+++ edje_util.c 26 Aug 2003 00:16:49 -0000 1.20
@@ -764,9 +764,42 @@
{
ed->freeze--;
if (ed->freeze < 0) ed->freeze = 0;
- if ((ed->freeze == 0) && (ed->recalc))
- _edje_recalc(ed);
+ if ((ed->freeze == 0) && (ed->recalc)) _edje_recalc(ed);
return ed->freeze;
+}
+
+int
+_edje_block(Edje *ed)
+{
+ ed->block++;
+ return ed->block;
+}
+
+int
+_edje_unblock(Edje *ed)
+{
+ ed->block--;
+ if (ed->block == 0)
+ {
+ ed->block_break = 0;
+ printf("unblock!!! ed->emissions = %p\n", ed->emissions);
+ ed->dont_clear_signals = 0;
+ if (ed->emissions) _edje_emit(ed, "", NULL);
+ }
+ return ed->block;
+}
+
+int
+_edje_block_break(Edje *ed)
+{
+ if (ed->block_break) return 1;
+ return 0;
+}
+
+void
+_edje_block_violate(Edje *ed)
+{
+ if (ed->block > 0) ed->block_break = 1;
}
void
-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs