Marcel Taeumel uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-mt.1583.mcz==================== Summary ====================
Name: Morphic-mt.1583
Author: mt
Time: 29 October 2019, 3:09:10.326172 pm
UUID: 2724b1c3-9a13-1c4f-811f-a5bbc8ed76e1
Ancestors: Morphic-mt.1582
Make it possible to recover from (deprecation) warnings in important drawing methods.
See
http://forum.world.st/The-Trunk-System-mt-1093-mcz-tp5103937p5106420.html=============== Diff against Morphic-mt.1582 ===============
Item was changed:
----- Method: WorldState>>displayWorldSafely: (in category 'update cycle') -----
displayWorldSafely: aWorld
"Update this world's display and keep track of errors during draw methods."
| finished classesWithErrors |
finished := false.
[finished] whileFalse: [
+ [aWorld displayWorld. finished := true] on: Error, Halt, Warning do: [:ex |
- [aWorld displayWorld. finished := true] on: Error, Halt do: [:ex |
"Handle a drawing error"
| err rcvr errCtx errMorph |
err := ex description.
rcvr := ex receiver.
errCtx := thisContext.
[
errCtx := errCtx sender.
"Search the sender chain to find the morph causing the problem"
[errCtx notNil and:[(errCtx receiver isMorph) not]]
whileTrue:[errCtx := errCtx sender].
"If we're at the root of the context chain then we have a fatal drawing problem"
errCtx ifNil:[^Project current fatalDrawingError: err].
errMorph := errCtx receiver.
"If the morph causing the problem has already the #drawError flag set,
then search for the next morph above in the caller chain."
errMorph hasProperty: #errorOnDraw
] whileTrue.
errMorph setProperty: #errorOnDraw toValue: true.
"Catch all errors, one for each receiver class."
classesWithErrors ifNil: [classesWithErrors := IdentitySet new].
(classesWithErrors includes: rcvr class) ifFalse: [
classesWithErrors add: rcvr class.
ToolSet debugException: ex].
"Repaint all to catch all errors now and not if the debugger will appear."
aWorld fullRepaintNeeded.
]].!