<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>