Jean-Marc Lasgouttes wrote: > Le 07/10/2014 17:21, Alfredo Braunstein a écrit : >> Jean-Marc Lasgouttes wrote: >> >>> Le 07/10/2014 16:18, Alfredo Braunstein a écrit : >>>> By the way, this behavior is also a way of triggering >>>> http://www.lyx.org/trac/ticket/3900 ("Mathed corners displayed without >>>> mouse hover", now closed/fixed), as when the cursor escapes wrongly the >>>> math inset, purple corners are not cleared. The patch fixes also this. >>>> Though as before, I don't know if it has other ill effects... >>> >>> Hi Alfredo, >>> >>> The problem is to understand how this LFUN_FINISHED_LEFT thingy works. I >>> suspect that only André knows... >>> >>> JMarc >> >> Well, that's just mean... Is he around? I'm not supposed to investigate >> this by myself, right? I'd rather just wait until Friday and ask less >> nicely... ;-) >> >> A/ >> > > Does this help?
Sort of... Let me try to show what I understand about what is happening in this example, and why I think that that line should go: [aaa(bbb|)ccc] As I see it, the situation is as follows. The outer inset is an InsetHull (derived from InsetGrid), the inner one is an InsetNest. 1) On line-end, LFUN_LINE_END gets first dispatched by Cursor to the inner InsetNest 2) The InsetNest doesn't do anything by itself (because the cursor is already in its last position) but changes the lfun to LFUN_FINISHED_RIGHT, flagged undispatched. 3) Then Cursor tries to dispatch (on the same cycle) the new lfun to the next guy in the chain, which is the containing InsetHull (the dispatch Cursor loses his last slice) 4) InsetHull just forwards the call to his ancestor InsetGrid and *then* flags the lfun undispatched (this is the line I commented) 5) InsetGrid forward the call to his ancestor InsetNest. 6) InsetNest moves finally the cursor position one forward, to the following: [aaa(bbb)|ccc]. The lfun is flagged as dispatched. The End! The good guys win! But wait...! 7) As the flag is now reflagged as undispatched in 4), Cursor next tries to dispatch it to the containing Text (the dispatch cursor loses another slice). 8) Text moves it to the right once more (bad)... So, the reflagging in 4) looks buggy to me... as it makes the same lfun to be dealt with (successfully) twice. Of course it is possible that I misunderstood something. Also, other code could "depend" on this "feature" somehow... Thoughts? A/