<body><div id="__MailbirdStyleContent" style="font-size: 10pt;font-family: Arial;color: #000000">
Hi Christoph,<div><br></div><div>can you point me to the prior inbox artifacts and list discussions/comments about this "safe event processing"? I would really like to take a look at it. Having some safety net for broken #mouseOver: handlers similar to #displayWorldSafely: would really help debugging.</div><div><br></div><div>Best,</div><div>Marcel</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;">
<p style="color: #AAAAAA; margin-top: 10px;">Am 07.06.2020 14:46:14 schrieb commits@source.squeak.org <commits@source.squeak.org>:</p><div style="font-family:Arial,Helvetica,sans-serif">Christoph Thiede uploaded a new version of Morphic to project The Inbox:<br>http://source.squeak.org/inbox/Morphic-ct.1641.mcz<br><br>==================== Summary ====================<br><br>Name: Morphic-ct.1641<br>Author: ct<br>Time: 7 June 2020, 2:45:17.536284 pm<br>UUID: b90e23e1-ce70-3d49-a8e4-f09af148ef97<br>Ancestors: Morphic-ct.1638<br><br>Refine #isHighFrequentEvent implementation for further event types. Fixes one possible cause of the "color depth = 0" bug. See http://forum.world.st/Image-not-startable-after-save-td5117084.html.<br><br>Depends indeed on Morphic-ct.1638.<br><br>=============== Diff against Morphic-ct.1638 ===============<br><br>Item was added:<br>+ ----- Method: DropEvent>>isHighFrequentEvent (in category 'testing') -----<br>+ isHighFrequentEvent<br>+ <br>+ ^ false!<br><br>Item was added:<br>+ ----- Method: WindowEvent>>isHighFrequentEvent (in category 'testing') -----<br>+ isHighFrequentEvent<br>+ <br>+ ^ (#(windowClose) includes: self type) not!<br><br>Item was changed:<br> ----- Method: WorldState>>doSafely:onErrorThat:setErrorFlag:ifFatal:afterErrorDo: (in category 'update cycle') -----<br> doSafely: aBlock onErrorThat: errorPredicate setErrorFlag: errorFlag ifFatal: fatalErrorBlock afterErrorDo: postErrorBlock<br> "Evaluate aBlock and keep track of errors during morph invocations."<br> <br> | finished classesWithErrors |<br> finished := false.<br> classesWithErrors := IdentitySet new.<br> [finished] whileFalse: [<br> [aBlock value. finished := true] on: Error, Halt, Warning do: [:ex |<br> | err rcvr errCtxt errMorph |<br> (errorPredicate cull: ex)<br> ifFalse: [ex pass].<br> err := ex description.<br> rcvr := ex receiver.<br> <br> errCtxt := thisContext.<br> [<br> errCtxt := errCtxt sender.<br> "Search the sender chain to find the morph causing the problem"<br> [errCtxt notNil and: [(errCtxt receiver isMorph) not]] <br> whileTrue: [errCtxt := errCtxt sender].<br> "If we're at the root of the context chain then we have a fatal problem"<br> errCtxt ifNil: [^ fatalErrorBlock cull: err].<br>+ errMorph := errCtxt receiver<br>+ ] doWhileTrue: [<br>- errMorph := errCtxt receiver.<br> "If the morph causing the problem has already the error flag set, then search for the next morph above in the caller chain."<br> errMorph hasProperty: errorFlag<br>+ ].<br>- ] whileTrue.<br> errMorph<br> setProperty: errorFlag toValue: true;<br> changed.<br> <br> "Catch all errors, one for each receiver class."<br> (classesWithErrors includes: rcvr class) ifFalse: [<br> classesWithErrors add: rcvr class.<br> ToolSet debugException: ex].<br> <br> postErrorBlock cull: err.<br> ]].!<br><br>Item was changed:<br> ----- Method: WorldState>>processEventsSafely: (in category 'update cycle') -----<br> processEventsSafely: aHandMorph<br> <br> ^ self<br> doSafely: [aHandMorph processEvents]<br>+ onErrorThat: [:error | self currentEvent ifNil: [true] ifNotNil: [:evt | evt isHighFrequentEvent]]<br>- onErrorThat: [:error | ActiveEvent isNil or: [ActiveEvent isHighFrequentEvent]]<br> setErrorFlag: #errorOnEvent<br> ifFatal: [:error | Project current fatalEventHandlingError: error]<br> afterErrorDo: []!<br><br><br></div></blockquote>
</div></body>