On Fri, Dec 2, 2016 at 2:58 AM, Carsten Haitzler <ras...@rasterman.com> wrote: > On Thu, 1 Dec 2016 12:36:28 -0200 Gustavo Sverzut Barbieri > <barbi...@gmail.com> > said: > >> On Thu, Dec 1, 2016 at 6:33 AM, Carsten Haitzler <ras...@rasterman.com> >> wrote: >> > On Wed, 30 Nov 2016 21:58:19 -0800 Cedric BAIL <cedric.b...@free.fr> said: >> > >> >> Hello, >> >> >> >> So we have currently a bug showing up for some people, that is >> >> actually related to how we handle event when a callback is registered >> >> from within a call triggered by that same event. There is a few >> >> possible behavior : >> >> >> >> - Do not call the callback until the next time the event is triggered. >> >> - If inserted before the currently executed callback, do not call, if >> >> after do trigger the call. >> >> - Trigger the call whatever the position of insertion (maybe even >> >> trigger it right away if it was inserted before) >> >> >> >> I am leaning toward the first case, but I am not really sure this is a >> >> good idea in all case. Any one with a good reason why we should do any >> >> of the other possibility ? >> > >> > hmm. i think it's more complex than this. so some pseudocode: >> > >> > -> event_call(obj, ev1) >> > ---> event_cb_add(obj, ev1) >> > >> > so what to do here? when the event cb is added to the >> > end of the array should it be called again while event_call() is still >> > calling.. in this case i'd say it shouldn't. >> > >> > now here comes the complex stuff: >> > >> > -> event_call(obj, ev1) >> > ---> event_cb_add(obj, ev1) >> > ---> event_call(obj, ev1) >> > >> > so now what? inside the 2nd event_call should we call the callback we just >> > added before? yes. i'd say so... now combine with the 1st case above. .. >> > what happens when we go back and return to the FIRST event_call. we called >> > in the child event_call()... should we call in the parent? hmmmm.... i'd >> > say no. >> > >> > how do we make this work AND make it efficient? but the above 2 cases are >> > pretty much a core concept that would expand to all other cases up and down >> > the stack. i agree that once you add an event that future event callback >> > calls should trigger it... but only future event callback calls that are >> > STARTED after the event cb add. not existing ones that are still "being >> > processed". >> >> agreed this is the expected behavior, however pretty uncommon in real >> life scenario to emit the event from the event callback of the same >> object, after all if done naively this can trigger infinite recursion. > > even if uncommon... it's still something we have to handle. in fact this can > happen as side-effects. like: > > on mouse enter... > move object > move of object indirectly causes a mouse out e.g. it shows an object on top > mouse out handler raises original object > original object now gets a mouse in... > ... repeat > > :) or things like this happen where feedback loops happen. often these > feedback > lops are shortcut somehow and don't recurse forever it is does mean that you > can have a mouse in called on an obj inside the mouse in and if you add/remove > mouse in callbacks this can all be affected. > > either way we need a simple and consistent behaviour that works the same way > all the time AND is "logical" and "makes sense". what this is about is... what > makes sense? > > above is what i proposed makes sense to me... it seems to make sense to you. > what about others...
Yes, I do agree with fixing it for once and for all, as you said these cases will happen... and we must handle them. What I tried to say is that our performance impact should be minimal on the usual case, optimize for that. Marcel's solution seems to do it nicely (in text, I did not check the patch). -- Gustavo Sverzut Barbieri -------------------------------------- Mobile: +55 (16) 99354-9890 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel