[Pkg] The Trunk: Morphic-mt.1575.mcz

commits at source.squeak.org commits at source.squeak.org
Tue Oct 15 11:30:30 UTC 2019

Marcel Taeumel uploaded a new version of Morphic to project The Trunk:

==================== Summary ====================

Name: Morphic-mt.1575
Author: mt
Time: 15 October 2019, 1:30:24.148785 pm
UUID: c7bde074-ddad-864a-a5b3-8b078736fe2f
Ancestors: Morphic-mt.1574

More robustness: (1) Catch both Error and Halt in Morphic drawing and (2) Reset drawing errors in morphs when restoring the Display.

=============== Diff against Morphic-mt.1574 ===============

Item was added:
+ ----- Method: MorphicProject>>restoreDisplay (in category 'scheduling & debugging') -----
+ restoreDisplay
+ 	"Give all morphs a chance to draw again."
+ 	self world ifNotNil: [:w | w allMorphsDo: [:ea | ea removeProperty: #errorOnDraw ]].
+ 	super restoreDisplay.!

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 do: [:ex |
- 		[aWorld displayWorld. finished := true] on: Error 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.

More information about the Packages mailing list