<div id="__MailbirdStyleContent" style="font-size: 10pt;font-family: Arial;color: #000000;text-align: left" dir="ltr">
                                        Hi Christoph.<div><br></div><div>> <span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px">Do we need a second recursive lock somewhere around LazyListMorph [...]</span></div><div><span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px"><br></span></div><div><span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px">Yes, it looks like we do. Maybe for LazyListMorph >> drawOn: so that we can skip it if it is called while currently activated.</span></div><div><span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px"><br></span></div><div><span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px">Hmm... maybe we can also find a cheap way to support this in Morph >> #fullDrawOn:? But setting and checking such a flag would likely create too much overhead. So maybe just once in LazyListMorph.</span></div><div><span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px"><br></span></div><div><span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px">Other places:</span></div><div><span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px">- Icon in IndentingListItemMorph</span></div><div><span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px">- Icon in PluggableButtonMorph</span></div><div><span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px">- ...</span></div><div><span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px"><br></span></div><div><span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px">Hmpf. I suppose that the model could take care of it because it knows best whether its icons are dynamically created or static.</span></div><div><span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px"><br></span></div><div><span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px">Best,</span></div><div><span style="font-family: Arial, Helvetica, sans-serif;font-size: 13px">Marcel</span></div><div class="mb_sig"></div>
                                        <blockquote class="history_container" type="cite" style="border-left-style: solid;border-width: 1px;margin-top: 20px;margin-left: 0px;padding-left: 10px;min-width: 500px">
                        <p style="color: #AAAAAA; margin-top: 10px;">Am 16.06.2021 16:20:40 schrieb christoph.thiede@student.hpi.uni-potsdam.de <christoph.thiede@student.hpi.uni-potsdam.de>:</p><div style="font-family:Arial,Helvetica,sans-serif">Hi all, hi Marcel,
<br>
<br>I just stumbled into another similar incident. I have a complex model that does a lazy-cached computation when it is asked the first time for the icons in a list. When the computation is run, the model spawns a progress bar to communicate the operation to the user. In theory, this would work fine, but in practice, if the computation takes more than 1 second to run, the progress bar will redraw the world and thus an almost-infinite loop occurs. Actually, after ~10 iterations the computation succeeds for an unknown reason, but it definitively is very inefficient and looks somehow awkward:
<br>
<br>["awkward-progressbar.png"]
<br>
<br>Do we need a second recursive lock somewhere around LazyListMorph >> #icon:? Or would you instead suggest to move this responsibility into the model? Conceptually, however, that approach would feel wrong to me because it is the view which defines the special recursive behavior in this case.
<br>
<br>Here is the relevant recursive stack slice:
<br>
<br>      ... stuff in model ...
<br>      PluggableMultiColumnListMorph>>iconAt:column:
<br>      LazyListMorph>>getListIcon:
<br>      LazyListMorph>>icon:
<br>      LazyListMorph>>iconExtent
<br>      LazyListMorph>>widthToDisplayItem:
<br>      LazyListMorph>>item:
<br>      LazyListMorph>>drawOn:
<br>      LazyListMorph(Morph)>>fullDrawOn:
<br>      [] in [] in PluggableMultiColumnListMorph(Morph)>>drawSubmorphsOn:
<br>      [] in PluggableMultiColumnListMorph(Morph)>>drawSubmorphsOn:
<br>      PluggableMultiColumnListMorph(Morph)>>drawSubmorphsOn:
<br>      PluggableMultiColumnListMorph(Morph)>>fullDrawOn:
<br>      ...
<br>      PasteUpMorph>>displayWorld
<br>      [] in SystemProgressMorph>>position:label:min:max:
<br>      ...
<br>      ... stuff in model ...
<br>      PluggableMultiColumnListMorph>>iconAt:column:
<br>      LazyListMorph>>getListIcon:
<br>      LazyListMorph>>icon:
<br>      ...
<br>
<br>Best,
<br>Christoph
<br><br></div></blockquote></div>