Hi Clement and and Stef, thanks for sharing. The video looks cool and it seems like a high-performance approach. Unfortunately, it doesn't seem to be working in Linux. I'm attaching the Pharo debug file, but it seems like the Handler being OSNullWindowHandle indicates a problem. I'm also not sure that this approach would allow me to do fullscreen apps. I noticed that your video shows a title bar in MacOS.
Cheers, Jeff On Sun, Sep 24, 2017 at 7:53 AM Clément Bera <bera.clem...@gmail.com> wrote: > Hi, > > I describe in the next paragraphs what I do to build application with > Pharo at 50 fps. Now I am using a SDL2 window with OSWindow and not the > default Pharo window for rendering. There is a fullscreen option with > OSWindow, I don't use it but I've just tried it works fine. > > To use Athens/Cairo I start the VM headless and I open from the code a > window using the SDL2 binding (OSWindow), then I extract the window surface > as a cairo surface to draw on it using Athens and I use SDL2 to manage > events (mouse, keyboard). That way I don't even start morphic/WorldMorph > which wastes cpu ressources. > > I built this video game that way: > > https://clementbera.wordpress.com/2016/08/29/sdl2-cairo-headless-for-realtime-native-applications/ > https://www.youtube.com/watch?v=srPdFgbyS6s > > The game is running in Pharo 4 (pre-Spur). I configured it to run at 50 > fps but from time to time some frames are dropped for performance so I > would say it is running at around 48-49 fps in practice. I think it should > work on the latest Pharo but you need to ask on pharo-dev how to use > OSWindow. Some APIs have changed since Pharo 4. Since the latest Pharo > version is now using Spur I expect the performance to be way better and I > think 50 fps is definitely manageable on a laptop. > > Note that this is still Pharo so if you want something which looks > real-time you need to be careful about you object allocation rate > in-between frame rendering. > > I hope this can help. > > Regards > > > > On Sun, Sep 24, 2017 at 9:43 AM, Stephane Ducasse <stepharo.s...@gmail.com > > wrote: > >> Hi jeff >> >> let us know if this is working. the start.sh script is not working on >> my machine. but clement made it worked on his machine and he should >> publish a zip. >> >> Stef >> >> >> >> On Sun, Sep 24, 2017 at 9:39 AM, Stephane Ducasse >> <stepharo.s...@gmail.com> wrote: >> > Yes I will share a dropbox with you for now. >> > >> > On Sat, Sep 23, 2017 at 9:44 PM, J.F. Rick <s...@je77.com> wrote: >> >> Hi Stef, >> >> >> >> since I'm only doing Athens rendering, it might be possible to do a >> native >> >> window implementation. That said, I don't know how to get started with >> that. >> >> Documentation seems to be hard to find. The last time I saw any work >> on that >> >> it was too early to be usable. I'm also not sure if it solves my "it >> needs >> >> to run in fullscreen at full speed" problem. If someone like Clement >> could >> >> get me started, that would be awesome. >> >> >> >> Cheers, >> >> >> >> Jeff >> >> >> >> On Fri, Sep 22, 2017 at 12:27 PM Stephane Ducasse < >> stepharo.s...@gmail.com> >> >> wrote: >> >>> >> >>> Hi Jeff >> >>> >> >>> Nice to see you. I do not know anybody running on X11. Esteban is >> >>> working on better SDL20 integration. >> >>> Did you try having a native window? I asked clement if he could >> >>> release the Wizard Battle Arena because it was a game he did in a >> >>> couple of days (yes he is good this guy) and that use cairo athens >> >>> based for drawing on native window. >> >>> >> >>> stef >> >>> >> >>> On Fri, Sep 22, 2017 at 3:11 PM, J.F. Rick <s...@je77.com> wrote: >> >>> > I'm running a fullscreen Pharo application on Ubuntu and I've >> noticed >> >>> > that >> >>> > Athens rendering gets way worse (maybe 10 updates per second) when I >> >>> > switch >> >>> > to fullscreen mode from inside Pharo. Ideally, I'd love for that to >> be >> >>> > fixed. >> >>> > >> >>> > In lieu of that, it would be cool if I could just maximize Pharo to >> the >> >>> > size >> >>> > of the screen to achieve good performance. Two things stop that: the >> >>> > Unity >> >>> > application bar and the title-bar. For the former, I can configure >> Unity >> >>> > to >> >>> > hide it. I noticed a '-notitle' X11 option when I execute pharo >> -help. >> >>> > I've >> >>> > tried using these X11 options and neither -notitle or -fullscreen >> seem >> >>> > to >> >>> > have any effect. Here's the command I run: >> >>> > >> >>> > ./bin/pharo --encoding utf8 -vm-display-X11 -fullscreen >> PATH_TO_IMAGE & >> >>> > >> >>> > Pharo starts fine but neither option seems to have any effect. I've >> also >> >>> > tried this in GNOME, thinking that Unity was the problem. Again, no >> >>> > effect. >> >>> > >> >>> > Any suggestions? >> >>> > >> >>> > Jeff >> >>> > >> >>> > >> >>> >> >> >> >> >
THERE_BE_DRAGONS_HERE ==== Startup Error: SubclassResponsibility: OSNullWindowHandle had the subclass responsibility to implement #title: 24 September 2017 8:08:59.17231 pm VM: unix - i686 - linux-gnu - NBCoInterpreter NativeBoost-CogPlugin-EstebanLorenzano.21 uuid: 4d9b9bdf-2dfa-4c0b-99eb-5b110dadc697 Nov 12 2015 NBCogit NativeBoost-CogPlugin-EstebanLorenzano.21 uuid: 4d9b9bdf-2dfa-4c0b-99eb-5b110dadc697 Nov 12 2015 https://github.com/pharo-project/pharo-vm.git Commit: 28d077d8df494ce050ca42c97c892471e8b8740c Date: 2015-10-16 12:02:43 +0200 By: Esteban Lorenzano <esteba...@gmail.com> Jenkins build #15015 Image: Pharo5.0 [Latest update: #50155] OSNullWindowHandle(Object)>>subclassResponsibility Receiver: an OSNullWindowHandle Arguments and temporary variables: Receiver's instance variables: osWindow: nil renderer: nil attributes: an OSWindowAttributes OSNullWindowHandle(OSWindowHandle)>>title: Receiver: an OSNullWindowHandle Arguments and temporary variables: aTitle: 'Wizard Battle Arena' Receiver's instance variables: osWindow: nil renderer: nil attributes: an OSWindowAttributes OSWindow>>title: Receiver: an OSWindow Arguments and temporary variables: aString: 'Wizard Battle Arena' Receiver's instance variables: handle: an OSNullWindowHandle initialAttributes: an OSWindowAttributes eventHandler: nil animated: false WBAScreen>>openWindow Receiver: a WBAScreen Arguments and temporary variables: Receiver's instance variables: model: nil window: an OSWindow surface: nil scheduler: nil WBAScreen>>initialize Receiver: a WBAScreen Arguments and temporary variables: Receiver's instance variables: model: nil window: an OSWindow surface: nil scheduler: nil WBAScreen class(Behavior)>>new Receiver: WBAScreen Arguments and temporary variables: Receiver's instance variables: superclass: Object methodDict: a MethodDictionary(#createSurface->WBAScreen>>#createSurface #event...etc... format: 138 layout: a FixedLayout instanceVariables: #(#model #window #surface #scheduler) organization: a ClassOrganization subclasses: nil name: #WBAScreen classPool: a Dictionary() sharedPools: an OrderedCollection() environment: a SystemDictionary(lots of globals) category: #'Wizard-Battle-Arena-Game-Core' traitComposition: {} localSelectors: nil WizardBattleArena class>>start Receiver: WizardBattleArena Arguments and temporary variables: Receiver's instance variables: superclass: Object methodDict: a MethodDictionary() format: 2 layout: a FixedLayout instanceVariables: #() organization: a ClassOrganization subclasses: nil name: #WizardBattleArena classPool: a Dictionary() sharedPools: an OrderedCollection() environment: a SystemDictionary(lots of globals) category: #'Wizard-Battle-Arena-Front-End' traitComposition: {} localSelectors: nil UndefinedObject>>DoIt Receiver: nil Arguments and temporary variables: Receiver's instance variables: nil OpalCompiler>>evaluate Receiver: an OpalCompiler Arguments and temporary variables: value: nil selectedSource: a ReadStream itsSelection: nil itsSelectionString: nil Receiver's instance variables: ast: DoIt ^ WizardBattleArena start source: a ReadStream context: nil receiver: nil compilationContext: a CompilationContext compilationContextClass: nil useFaultyForParsing: false OpalCompiler(AbstractCompiler)>>evaluate: Receiver: an OpalCompiler Arguments and temporary variables: textOrString: 'WizardBattleArena start' Receiver's instance variables: ast: DoIt ^ WizardBattleArena start source: a ReadStream context: nil receiver: nil compilationContext: a CompilationContext compilationContextClass: nil useFaultyForParsing: false SmalltalkImage>>evaluate: Receiver: Smalltalk Arguments and temporary variables: aString: 'WizardBattleArena start' Receiver's instance variables: globals: a SystemDictionary(lots of globals) deferredStartupActions: an OrderedCollection() specialObjectsArray: an Array(nil false true #Processor->Processor Bitmap Small...etc... session: an Object vm: a VirtualMachine [ result := Smalltalk evaluate: aStream. self hasSessionChanged ifFalse: [ self stdout print: result; lf ] ] in EvaluateCommandLineHandler>>evaluate: Receiver: an EvaluateCommandLineHandler Arguments and temporary variables: aStream: 'WizardBattleArena start' exceptionClassToUse: OCSemanticWarning result: nil Receiver's instance variables: commandLine: a CommandLineArguments session: a Session stdout: a VTermOutputDriver stderr: a VTermOutputDriver sourceFiles: nil BlockClosure>>on:do: Receiver: [ result := Smalltalk evaluate: aStream. self hasSessionChanged ifFalse: [ self stdou...etc... Arguments and temporary variables: exception: an ExceptionSet handlerAction: [ :error | self handleError: error ] Receiver's instance variables: outerContext: EvaluateCommandLineHandler>>evaluate: startpc: 106 numArgs: 0 EvaluateCommandLineHandler>>evaluate: Receiver: an EvaluateCommandLineHandler Arguments and temporary variables: result: nil aStream: 'WizardBattleArena start' exceptionClassToUse: OCSemanticWarning Receiver's instance variables: commandLine: a CommandLineArguments session: a Session stdout: a VTermOutputDriver stderr: a VTermOutputDriver sourceFiles: nil EvaluateCommandLineHandler>>evaluateArguments Receiver: an EvaluateCommandLineHandler Arguments and temporary variables: argumentString: 'WizardBattleArena start' Receiver's instance variables: commandLine: a CommandLineArguments session: a Session stdout: a VTermOutputDriver stderr: a VTermOutputDriver sourceFiles: nil EvaluateCommandLineHandler>>activate Receiver: an EvaluateCommandLineHandler Arguments and temporary variables: Receiver's instance variables: commandLine: a CommandLineArguments session: a Session stdout: a VTermOutputDriver stderr: a VTermOutputDriver sourceFiles: nil EvaluateCommandLineHandler class(CommandLineHandler class)>>activateWith: Receiver: EvaluateCommandLineHandler Arguments and temporary variables: aCommandLine: a CommandLineArguments Receiver's instance variables: superclass: STCommandLineHandler methodDict: a MethodDictionary(#activate->EvaluateCommandLineHandler>>#activate...etc... format: 140 layout: a FixedLayout instanceVariables: #() organization: a ClassOrganization subclasses: nil name: #EvaluateCommandLineHandler classPool: a Dictionary() sharedPools: an OrderedCollection() environment: a SystemDictionary(lots of globals) category: #'CodeImport-CommandLineHandlers' traitComposition: {} localSelectors: nil [ aCommandLinehandler activateWith: commandLine ] in PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand: Receiver: a PharoCommandLineHandler Arguments and temporary variables: aCommandLinehandler: EvaluateCommandLineHandler Receiver's instance variables: commandLine: a CommandLineArguments session: a Session stdout: a VTermOutputDriver stderr: a VTermOutputDriver BlockClosure>>on:do: Receiver: [ aCommandLinehandler activateWith: commandLine ] Arguments and temporary variables: exception: Exit handlerAction: [ :exit | ^ self handleExit: exit for: aCommandLinehandler ] Receiver's instance variables: outerContext: PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubComm...etc... startpc: 34 numArgs: 0 PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand: Receiver: a PharoCommandLineHandler Arguments and temporary variables: aCommandLinehandler: EvaluateCommandLineHandler Receiver's instance variables: commandLine: a CommandLineArguments session: a Session stdout: a VTermOutputDriver stderr: a VTermOutputDriver PharoCommandLineHandler(BasicCommandLineHandler)>>handleSubcommand Receiver: a PharoCommandLineHandler Arguments and temporary variables: handlers: an OrderedCollection(EvaluateCommandLineHandler) Receiver's instance variables: commandLine: a CommandLineArguments session: a Session stdout: a VTermOutputDriver stderr: a VTermOutputDriver PharoCommandLineHandler(BasicCommandLineHandler)>>handleArgument: Receiver: a PharoCommandLineHandler Arguments and temporary variables: aString: 'eval' Receiver's instance variables: commandLine: a CommandLineArguments session: a Session stdout: a VTermOutputDriver stderr: a VTermOutputDriver [ self handleArgument: (self arguments ifEmpty: [ '' ] ifNotEmpty: [ :arguments | arguments first ]) ] in PharoCommandLineHandler(BasicCommandLineHandler)>>activate Receiver: a PharoCommandLineHandler Arguments and temporary variables: Receiver's instance variables: commandLine: a CommandLineArguments session: a Session stdout: a VTermOutputDriver stderr: a VTermOutputDriver BlockClosure>>on:do: Receiver: [ self handleArgument: (self arguments ifEmpty: [ '' ] ifNotEmpty: [ :arguments | argument...etc... Arguments and temporary variables: exception: Exit handlerAction: [ :exit | ^ self handleExit: exit ] Receiver's instance variables: outerContext: PharoCommandLineHandler(BasicCommandLineHandler)>>activate startpc: 49 numArgs: 0 PharoCommandLineHandler(BasicCommandLineHandler)>>activate Receiver: a PharoCommandLineHandler Arguments and temporary variables: Receiver's instance variables: commandLine: a CommandLineArguments session: a Session stdout: a VTermOutputDriver stderr: a VTermOutputDriver PharoCommandLineHandler>>activate Receiver: a PharoCommandLineHandler Arguments and temporary variables: Receiver's instance variables: commandLine: a CommandLineArguments session: a Session stdout: a VTermOutputDriver stderr: a VTermOutputDriver PharoCommandLineHandler class(CommandLineHandler class)>>activateWith: Receiver: PharoCommandLineHandler Arguments and temporary variables: aCommandLine: a CommandLineArguments Receiver's instance variables: superclass: BasicCommandLineHandler methodDict: a MethodDictionary(#activate->PharoCommandLineHandler>>#activate #c...etc... format: 138 layout: a FixedLayout instanceVariables: nil organization: a ClassOrganization subclasses: nil name: #PharoCommandLineHandler classPool: a Dictionary() sharedPools: an OrderedCollection() environment: a SystemDictionary(lots of globals) category: #'System-CommandLineHandler' traitComposition: {} localSelectors: nil [ super activateWith: aCommandLine ] in PharoCommandLineHandler class>>activateWith: Receiver: PharoCommandLineHandler Arguments and temporary variables: aCommandLine: a CommandLineArguments Receiver's instance variables: superclass: BasicCommandLineHandler methodDict: a MethodDictionary(#activate->PharoCommandLineHandler>>#activate #c...etc... format: 138 layout: a FixedLayout instanceVariables: nil organization: a ClassOrganization subclasses: nil name: #PharoCommandLineHandler classPool: a Dictionary() sharedPools: an OrderedCollection() environment: a SystemDictionary(lots of globals) category: #'System-CommandLineHandler' traitComposition: {} localSelectors: nil NonInteractiveUIManager(UIManager)>>defer: Receiver: a NonInteractiveUIManager Arguments and temporary variables: aBlock: [ super activateWith: aCommandLine ] Receiver's instance variables: doNotQuitOnRestart: false uiManager: a MorphicUIManager PharoCommandLineHandler class>>activateWith: Receiver: PharoCommandLineHandler Arguments and temporary variables: aCommandLine: a CommandLineArguments Receiver's instance variables: superclass: BasicCommandLineHandler methodDict: a MethodDictionary(#activate->PharoCommandLineHandler>>#activate #c...etc... format: 138 layout: a FixedLayout instanceVariables: nil organization: a ClassOrganization subclasses: nil name: #PharoCommandLineHandler classPool: a Dictionary() sharedPools: an OrderedCollection() environment: a SystemDictionary(lots of globals) category: #'System-CommandLineHandler' traitComposition: {} localSelectors: nil [ aCommandLinehandler activateWith: commandLine ] in BasicCommandLineHandler>>activateSubCommand: Receiver: a BasicCommandLineHandler Arguments and temporary variables: aCommandLinehandler: PharoCommandLineHandler Receiver's instance variables: commandLine: a CommandLineArguments session: a Session stdout: a VTermOutputDriver stderr: a VTermOutputDriver BlockClosure>>on:do: Receiver: [ aCommandLinehandler activateWith: commandLine ] Arguments and temporary variables: exception: Exit handlerAction: [ :exit | ^ self handleExit: exit for: aCommandLinehandler ] Receiver's instance variables: outerContext: BasicCommandLineHandler>>activateSubCommand: startpc: 34 numArgs: 0 BasicCommandLineHandler>>activateSubCommand: Receiver: a BasicCommandLineHandler Arguments and temporary variables: aCommandLinehandler: PharoCommandLineHandler Receiver's instance variables: commandLine: a CommandLineArguments session: a Session stdout: a VTermOutputDriver stderr: a VTermOutputDriver BasicCommandLineHandler>>handleSubcommand Receiver: a BasicCommandLineHandler Arguments and temporary variables: handlers: an OrderedCollection(PharoCommandLineHandler EvaluateCommandLineHandl...etc... Receiver's instance variables: commandLine: a CommandLineArguments session: a Session stdout: a VTermOutputDriver stderr: a VTermOutputDriver BasicCommandLineHandler>>handleArgument: Receiver: a BasicCommandLineHandler Arguments and temporary variables: aString: 'eval' Receiver's instance variables: commandLine: a CommandLineArguments session: a Session stdout: a VTermOutputDriver stderr: a VTermOutputDriver [ self handleArgument: (self arguments ifEmpty: [ '' ] ifNotEmpty: [ :arguments | arguments first ]) ] in BasicCommandLineHandler>>activate Receiver: a BasicCommandLineHandler Arguments and temporary variables: Receiver's instance variables: commandLine: a CommandLineArguments session: a Session stdout: a VTermOutputDriver stderr: a VTermOutputDriver BlockClosure>>on:do: Receiver: [ self handleArgument: (self arguments ifEmpty: [ '' ] ifNotEmpty: [ :arguments | argument...etc... Arguments and temporary variables: exception: Exit handlerAction: [ :exit | ^ self handleExit: exit ] Receiver's instance variables: outerContext: BasicCommandLineHandler>>activate startpc: 49 numArgs: 0 BasicCommandLineHandler>>activate Receiver: a BasicCommandLineHandler Arguments and temporary variables: Receiver's instance variables: commandLine: a CommandLineArguments session: a Session stdout: a VTermOutputDriver stderr: a VTermOutputDriver [ self new activate ] in BasicCommandLineHandler class>>startUp: Receiver: BasicCommandLineHandler Arguments and temporary variables: resuming: true Receiver's instance variables: superclass: CommandLineHandler methodDict: a MethodDictionary(#activate->BasicCommandLineHandler>>#activate #a...etc... format: 138 layout: a FixedLayout instanceVariables: nil organization: a ClassOrganization subclasses: {PharoCommandLineHandler} name: #BasicCommandLineHandler classPool: a Dictionary() sharedPools: an OrderedCollection() environment: a SystemDictionary(lots of globals) category: #'System-CommandLineHandler' traitComposition: {} localSelectors: nil --- The full stack --- OSNullWindowHandle(Object)>>subclassResponsibility OSNullWindowHandle(OSWindowHandle)>>title: OSWindow>>title: WBAScreen>>openWindow WBAScreen>>initialize WBAScreen class(Behavior)>>new WizardBattleArena class>>start UndefinedObject>>DoIt OpalCompiler>>evaluate OpalCompiler(AbstractCompiler)>>evaluate: SmalltalkImage>>evaluate: [ result := Smalltalk evaluate: aStream. self hasSessionChanged ifFalse: [ self stdout print: result; lf ] ] in EvaluateCommandLineHandler>>evaluate: BlockClosure>>on:do: EvaluateCommandLineHandler>>evaluate: EvaluateCommandLineHandler>>evaluateArguments EvaluateCommandLineHandler>>activate EvaluateCommandLineHandler class(CommandLineHandler class)>>activateWith: [ aCommandLinehandler activateWith: commandLine ] in PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand: BlockClosure>>on:do: PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand: PharoCommandLineHandler(BasicCommandLineHandler)>>handleSubcommand PharoCommandLineHandler(BasicCommandLineHandler)>>handleArgument: [ self handleArgument: (self arguments ifEmpty: [ '' ] ifNotEmpty: [ :arguments | arguments first ]) ] in PharoCommandLineHandler(BasicCommandLineHandler)>>activate BlockClosure>>on:do: PharoCommandLineHandler(BasicCommandLineHandler)>>activate PharoCommandLineHandler>>activate PharoCommandLineHandler class(CommandLineHandler class)>>activateWith: [ super activateWith: aCommandLine ] in PharoCommandLineHandler class>>activateWith: NonInteractiveUIManager(UIManager)>>defer: PharoCommandLineHandler class>>activateWith: [ aCommandLinehandler activateWith: commandLine ] in BasicCommandLineHandler>>activateSubCommand: BlockClosure>>on:do: BasicCommandLineHandler>>activateSubCommand: BasicCommandLineHandler>>handleSubcommand BasicCommandLineHandler>>handleArgument: [ self handleArgument: (self arguments ifEmpty: [ '' ] ifNotEmpty: [ :arguments | arguments first ]) ] in BasicCommandLineHandler>>activate BlockClosure>>on:do: BasicCommandLineHandler>>activate [ self new activate ] in BasicCommandLineHandler class>>startUp: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BlockClosure>>cull: [ action cull: resuming ] in SmalltalkImage>>executeDeferredStartupActions: BlockClosure>>on:do: SmalltalkImage>>logStartUpErrorDuring:into:tryDebugger: SmalltalkImage>>executeDeferredStartupActions: SmalltalkImage>>startupImage:snapshotWorked: SmalltalkImage>>snapshot:andQuit: [ Smalltalk snapshot: true andQuit: true ] in WorldState class>>saveAndQuit BlockClosure>>ensure: CursorWithMask(Cursor)>>showWhile: WorldState class>>saveAndQuit [ | selArgCount | "show cursor in case item opens a new MVC window" (selArgCount := selector numArgs) = 0 ifTrue: [ target perform: selector ] ifFalse: [ selArgCount = arguments size ifTrue: [ target perform: selector withArguments: arguments ] ifFalse: [ target perform: selector withArguments: (arguments copyWith: evt) ] ]. self changed ] in ToggleMenuItemMorph(MenuItemMorph)>>invokeWithEvent: BlockClosure>>ensure: CursorWithMask(Cursor)>>showWhile: ToggleMenuItemMorph(MenuItemMorph)>>invokeWithEvent: ToggleMenuItemMorph(MenuItemMorph)>>mouseUp: ToggleMenuItemMorph(MenuItemMorph)>>handleMouseUp: MouseButtonEvent>>sentTo: ToggleMenuItemMorph(Morph)>>handleEvent: MorphicEventDispatcher>>dispatchDefault:with: MorphicEventDispatcher>>handleMouseUp: MouseButtonEvent>>sentTo: [ ^ anEvent sentTo: self ] in MorphicEventDispatcher>>dispatchEvent:with: BlockClosure>>ensure: MorphicEventDispatcher>>dispatchEvent:with: ToggleMenuItemMorph(Morph)>>processEvent:using: MorphicEventDispatcher>>dispatchDefault:with: MorphicEventDispatcher>>handleMouseUp: MouseButtonEvent>>sentTo: [ ^ anEvent sentTo: self ] in MorphicEventDispatcher>>dispatchEvent:with: BlockClosure>>ensure: MorphicEventDispatcher>>dispatchEvent:with: MenuMorph(Morph)>>processEvent:using: MenuMorph(Morph)>>processEvent: MenuMorph>>handleFocusEvent: [ ActiveHand := self. ActiveEvent := anEvent. result := focusHolder handleFocusEvent: (anEvent transformedBy: (focusHolder transformedFrom: self)) ] in HandMorph>>sendFocusEvent:to:clear: BlockClosure>>on:do: WorldMorph(PasteUpMorph)>>becomeActiveDuring: HandMorph>>sendFocusEvent:to:clear: HandMorph>>sendEvent:focus:clear: HandMorph>>sendMouseEvent: HandMorph>>handleEvent: HandMorph>>processEvents [ :h | ActiveHand := h. h processEvents. ActiveHand := nil ] in WorldState>>doOneCycleNowFor: Array(SequenceableCollection)>>do: WorldState>>handsDo: WorldState>>doOneCycleNowFor: WorldState>>doOneCycleFor: WorldMorph>>doOneCycle [ [ World doOneCycle. Processor yield. false ] whileFalse: [ ] ] in MorphicUIManager>>spawnNewProcess [ self value. Processor terminateActive ] in BlockClosure>>newProcess ------------------------------------------------------------------------------- THERE_BE_DRAGONS_HERE Got startup errors: ------------------------------------------------------------------------------- THERE_BE_DRAGONS_HERE SubclassResponsibility: OSNullWindowHandle had the subclass responsibility to implement #title: ------------------------------------------------------------------------------- THERE_BE_DRAGONS_HERE SubclassResponsibility: OSNullWindowHandle had the subclass responsibility to implement #title: 24 September 2017 8:09:51.909082 pm VM: unix - i686 - linux-gnu - NBCoInterpreter NativeBoost-CogPlugin-EstebanLorenzano.21 uuid: 4d9b9bdf-2dfa-4c0b-99eb-5b110dadc697 Nov 12 2015 NBCogit NativeBoost-CogPlugin-EstebanLorenzano.21 uuid: 4d9b9bdf-2dfa-4c0b-99eb-5b110dadc697 Nov 12 2015 https://github.com/pharo-project/pharo-vm.git Commit: 28d077d8df494ce050ca42c97c892471e8b8740c Date: 2015-10-16 12:02:43 +0200 By: Esteban Lorenzano <esteba...@gmail.com> Jenkins build #15015 Image: Pharo5.0 [Latest update: #50155] OSNullWindowHandle(Object)>>subclassResponsibility Receiver: an OSNullWindowHandle Arguments and temporary variables: Receiver's instance variables: osWindow: nil renderer: nil attributes: an OSWindowAttributes OSNullWindowHandle(OSWindowHandle)>>title: Receiver: an OSNullWindowHandle Arguments and temporary variables: aTitle: 'Wizard Battle Arena' Receiver's instance variables: osWindow: nil renderer: nil attributes: an OSWindowAttributes OSWindow>>title: Receiver: an OSWindow Arguments and temporary variables: aString: 'Wizard Battle Arena' Receiver's instance variables: handle: an OSNullWindowHandle initialAttributes: an OSWindowAttributes eventHandler: nil animated: false WBAScreen>>openWindow Receiver: a WBAScreen Arguments and temporary variables: Receiver's instance variables: model: nil window: an OSWindow surface: nil scheduler: nil WBAScreen>>initialize Receiver: a WBAScreen Arguments and temporary variables: Receiver's instance variables: model: nil window: an OSWindow surface: nil scheduler: nil WBAScreen class(Behavior)>>new Receiver: WBAScreen Arguments and temporary variables: Receiver's instance variables: superclass: Object methodDict: a MethodDictionary(#createSurface->WBAScreen>>#createSurface #event...etc... format: 138 layout: a FixedLayout instanceVariables: #(#model #window #surface #scheduler) organization: a ClassOrganization subclasses: nil name: #WBAScreen classPool: a Dictionary() sharedPools: an OrderedCollection() environment: a SystemDictionary(lots of globals) category: #'Wizard-Battle-Arena-Game-Core' traitComposition: {} localSelectors: nil WizardBattleArena class>>start Receiver: WizardBattleArena Arguments and temporary variables: Receiver's instance variables: superclass: Object methodDict: a MethodDictionary() format: 2 layout: a FixedLayout instanceVariables: #() organization: a ClassOrganization subclasses: nil name: #WizardBattleArena classPool: a Dictionary() sharedPools: an OrderedCollection() environment: a SystemDictionary(lots of globals) category: #'Wizard-Battle-Arena-Front-End' traitComposition: {} localSelectors: nil UndefinedObject>>DoIt Receiver: nil Arguments and temporary variables: Receiver's instance variables: nil OpalCompiler>>evaluate Receiver: an OpalCompiler Arguments and temporary variables: value: nil selectedSource: a ReadStream itsSelection: a Text for '' itsSelectionString: '' Receiver's instance variables: ast: DoIt ^ WizardBattleArena start source: a ReadStream context: nil receiver: nil compilationContext: a CompilationContext compilationContextClass: nil useFaultyForParsing: false RubSmalltalkEditor>>evaluate:andDo: Receiver: a RubSmalltalkEditor Arguments and temporary variables: t1: a ReadStream t2: [ :result | aBlock value: result ] t3: nil t4: nil t5: nil Receiver's instance variables: defaultKeymappingIndex: an IdentityDictionary(#command->#(#noop: #cursorHome: #...etc... textArea: a RubEditingArea(1015283712) selectorChooser: nil notificationStrategy: a GLMPopperNotificationStrategy RubSmalltalkEditor>>highlightEvaluateAndDo: Receiver: a RubSmalltalkEditor Arguments and temporary variables: aBlock: [ :result | ] Receiver's instance variables: defaultKeymappingIndex: an IdentityDictionary(#command->#(#noop: #cursorHome: #...etc... textArea: a RubEditingArea(1015283712) selectorChooser: nil notificationStrategy: a GLMPopperNotificationStrategy [ textMorph textArea editor highlightEvaluateAndDo: ann action. textMorph shoutStyler style: textMorph text ] in [ textMorph textArea handleEdit: [ textMorph textArea editor highlightEvaluateAndDo: ann action. textMorph shoutStyler style: textMorph text ] ] in GLMMorphicPharoPlaygroundRenderer(GLMMorphicPharoCodeRenderer)>>actOnHighlightAndEvaluate: Receiver: a GLMMorphicPharoPlaygroundRenderer Arguments and temporary variables: ann: a GLMHighlightAndEvaluate Receiver's instance variables: renderer: a GLMMorphicRenderer textMorph: a RubScrolledTextMorph(343146496) textModel: a GLMRubricSmalltalkTextModel RubEditingArea(RubAbstractTextArea)>>handleEdit: Receiver: a RubEditingArea(1015283712) Arguments and temporary variables: editBlock: [ textMorph textArea editor highlightEvaluateAndDo: ann action. tex...etc... Receiver's instance variables: bounds: (0@0) corner: (580@50) owner: a TransformWithLayoutMorph(435159040) submorphs: an Array(a RubPrimarySelectionMorph(255590400) a RubCursor(414449664...etc... fullBounds: (0@0) corner: (580@50) color: Color transparent extension: a MorphExtension (440139776) [other: (announcer -> an Announcer) (k...etc... model: a GLMRubricSmalltalkTextModel paragraph: a RubShoutStylerDecorator editor: a RubSmalltalkEditor scrollPane: a RubTextScrollPane(414711808) editingState: a RubEditingState textStyle: a TextStyle Source Code Pro textColor: Color black margins: (6@6) corner: (6@6) readOnly: false menuAllowed: true editingMode: a RubSmalltalkScriptingMode cursor: a RubCursor(414449664) segments: an OrderedCollection(a RubHighlightSegmentMorph(967049216)) getMenuPolicy: a RubEditingArea(1015283712) wrapped: true editorClass: RubSmalltalkEditor [ textMorph textArea handleEdit: [ textMorph textArea editor highlightEvaluateAndDo: ann action. textMorph shoutStyler style: textMorph text ] ] in GLMMorphicPharoPlaygroundRenderer(GLMMorphicPharoCodeRenderer)>>actOnHighlightAndEvaluate: Receiver: a GLMMorphicPharoPlaygroundRenderer Arguments and temporary variables: ann: a GLMHighlightAndEvaluate Receiver's instance variables: renderer: a GLMMorphicRenderer textMorph: a RubScrolledTextMorph(343146496) textModel: a GLMRubricSmalltalkTextModel WorldState>>runStepMethodsIn: Receiver: a WorldState Arguments and temporary variables: aWorld: a WorldMorph(511705088) [world] queue: WaitfreeQueue with 0 items nextInQueue: [ textMorph textArea handleEdit: [ textMorph textArea editor ...etc... Receiver's instance variables: hands: an Array(a HandMorph(760479744)) viewBox: (0@0) corner: (936@662) canvas: a FormCanvas on: DisplayScreen(936x662x32) damageRecorder: a DamageRecorder stepList: a Heap() lastStepTime: 20448 lastStepMessage: nil lastCycleTime: 8402 alarms: a Heap(MorphicAlarm(#hideShow -> a RubCursor(414449664))) lastAlarmTime: 8402 menuBuilder: a PragmaMenuBuilder ( nil ) WorldMorph>>runStepMethods Receiver: a WorldMorph(511705088) [world] Arguments and temporary variables: Receiver's instance variables: bounds: (0@0) corner: (936@662) owner: nil submorphs: an Array(a TaskbarMorph(984088576) a GLMSystemWindow(458752000) an I...etc... fullBounds: (0@0) corner: (936@662) color: (Color r: 0.937 g: 0.937 b: 0.937 alpha: 1.0) extension: a MorphExtension (552861696) [other: (dragEnabled -> true) (dropEna...etc... borderWidth: 0 borderColor: (Color r: 0.063 g: 0.063 b: 0.063 alpha: 1.0) backgroundMorph: nil worldState: a WorldState griddingOn: nil osWindow: nil session: nil WorldState>>doOneCycleNowFor: Receiver: a WorldState Arguments and temporary variables: aWorld: a WorldMorph(511705088) [world] Receiver's instance variables: hands: an Array(a HandMorph(760479744)) viewBox: (0@0) corner: (936@662) canvas: a FormCanvas on: DisplayScreen(936x662x32) damageRecorder: a DamageRecorder stepList: a Heap() lastStepTime: 20448 lastStepMessage: nil lastCycleTime: 8402 alarms: a Heap(MorphicAlarm(#hideShow -> a RubCursor(414449664))) lastAlarmTime: 8402 menuBuilder: a PragmaMenuBuilder ( nil ) WorldState>>doOneCycleFor: Receiver: a WorldState Arguments and temporary variables: aWorld: a WorldMorph(511705088) [world] Receiver's instance variables: hands: an Array(a HandMorph(760479744)) viewBox: (0@0) corner: (936@662) canvas: a FormCanvas on: DisplayScreen(936x662x32) damageRecorder: a DamageRecorder stepList: a Heap() lastStepTime: 20448 lastStepMessage: nil lastCycleTime: 8402 alarms: a Heap(MorphicAlarm(#hideShow -> a RubCursor(414449664))) lastAlarmTime: 8402 menuBuilder: a PragmaMenuBuilder ( nil ) WorldMorph>>doOneCycle Receiver: a WorldMorph(511705088) [world] Arguments and temporary variables: Receiver's instance variables: bounds: (0@0) corner: (936@662) owner: nil submorphs: an Array(a TaskbarMorph(984088576) a GLMSystemWindow(458752000) an I...etc... fullBounds: (0@0) corner: (936@662) color: (Color r: 0.937 g: 0.937 b: 0.937 alpha: 1.0) extension: a MorphExtension (552861696) [other: (dragEnabled -> true) (dropEna...etc... borderWidth: 0 borderColor: (Color r: 0.063 g: 0.063 b: 0.063 alpha: 1.0) backgroundMorph: nil worldState: a WorldState griddingOn: nil osWindow: nil session: nil [ [ World doOneCycle. Processor yield. false ] whileFalse: [ ] ] in MorphicUIManager>>spawnNewProcess Receiver: a MorphicUIManager Arguments and temporary variables: Receiver's instance variables: interactiveParser: nil activeTranscript: Transcript [ self value. Processor terminateActive ] in BlockClosure>>newProcess Receiver: [ [ World doOneCycle. Processor yield. false ] whileFalse: [ ] ] Arguments and temporary variables: Receiver's instance variables: outerContext: MorphicUIManager>>spawnNewProcess startpc: 65 numArgs: 0 --- The full stack --- OSNullWindowHandle(Object)>>subclassResponsibility OSNullWindowHandle(OSWindowHandle)>>title: OSWindow>>title: WBAScreen>>openWindow WBAScreen>>initialize WBAScreen class(Behavior)>>new WizardBattleArena class>>start UndefinedObject>>DoIt OpalCompiler>>evaluate RubSmalltalkEditor>>evaluate:andDo: RubSmalltalkEditor>>highlightEvaluateAndDo: [ textMorph textArea editor highlightEvaluateAndDo: ann action. textMorph shoutStyler style: textMorph text ] in [ textMorph textArea handleEdit: [ textMorph textArea editor highlightEvaluateAndDo: ann action. textMorph shoutStyler style: textMorph text ] ] in GLMMorphicPharoPlaygroundRenderer(GLMMorphicPharoCodeRenderer)>>actOnHighlightAndEvaluate: RubEditingArea(RubAbstractTextArea)>>handleEdit: [ textMorph textArea handleEdit: [ textMorph textArea editor highlightEvaluateAndDo: ann action. textMorph shoutStyler style: textMorph text ] ] in GLMMorphicPharoPlaygroundRenderer(GLMMorphicPharoCodeRenderer)>>actOnHighlightAndEvaluate: WorldState>>runStepMethodsIn: WorldMorph>>runStepMethods WorldState>>doOneCycleNowFor: WorldState>>doOneCycleFor: WorldMorph>>doOneCycle [ [ World doOneCycle. Processor yield. false ] whileFalse: [ ] ] in MorphicUIManager>>spawnNewProcess [ self value. Processor terminateActive ] in BlockClosure>>newProcess ------------------------------------------------------------------------------- THERE_BE_DRAGONS_HERE MessageNotUnderstood: OSNullWindowHandle>>handle 24 September 2017 8:13:02.996223 pm VM: unix - i686 - linux-gnu - NBCoInterpreter NativeBoost-CogPlugin-EstebanLorenzano.21 uuid: 4d9b9bdf-2dfa-4c0b-99eb-5b110dadc697 Nov 12 2015 NBCogit NativeBoost-CogPlugin-EstebanLorenzano.21 uuid: 4d9b9bdf-2dfa-4c0b-99eb-5b110dadc697 Nov 12 2015 https://github.com/pharo-project/pharo-vm.git Commit: 28d077d8df494ce050ca42c97c892471e8b8740c Date: 2015-10-16 12:02:43 +0200 By: Esteban Lorenzano <esteba...@gmail.com> Jenkins build #15015 Image: Pharo5.0 [Latest update: #50155] OSNullWindowHandle(Object)>>doesNotUnderstand: #handle Receiver: an OSNullWindowHandle Arguments and temporary variables: aMessage: handle exception: MessageNotUnderstood: OSNullWindowHandle>>handle resumeValue: nil Receiver's instance variables: osWindow: nil renderer: nil attributes: an OSWindowAttributes WBAScreen>>createSurface Receiver: a WBAScreen Arguments and temporary variables: Receiver's instance variables: model: nil window: an OSWindow surface: nil scheduler: a WBARenderingScheduler WBAScreen>>extent: Receiver: a WBAScreen Arguments and temporary variables: extent: (760@480) Receiver's instance variables: model: nil window: an OSWindow surface: nil scheduler: a WBARenderingScheduler WBANumberPlayerSelectScreenModel(WBAMenuScreenModel)>>display Receiver: a WBANumberPlayerSelectScreenModel Arguments and temporary variables: Receiver's instance variables: screen: a WBAScreen startingGame: a WBAGame currentChoice: 1 arrowWidget: nil titleWidget: nil playersWidget: nil WizardBattleArena class>>start Receiver: WizardBattleArena Arguments and temporary variables: Receiver's instance variables: superclass: Object methodDict: a MethodDictionary() format: 2 layout: a FixedLayout instanceVariables: #() organization: a ClassOrganization subclasses: nil name: #WizardBattleArena classPool: a Dictionary() sharedPools: an OrderedCollection() environment: a SystemDictionary(lots of globals) category: #'Wizard-Battle-Arena-Front-End' traitComposition: {} localSelectors: nil UndefinedObject>>DoIt Receiver: nil Arguments and temporary variables: Receiver's instance variables: nil OpalCompiler>>evaluate Receiver: an OpalCompiler Arguments and temporary variables: value: nil selectedSource: a ReadStream itsSelection: a Text for '' itsSelectionString: '' Receiver's instance variables: ast: DoIt ^ WizardBattleArena start source: a ReadStream context: nil receiver: nil compilationContext: a CompilationContext compilationContextClass: nil useFaultyForParsing: false RubSmalltalkEditor>>evaluate:andDo: Receiver: a RubSmalltalkEditor Arguments and temporary variables: t1: a ReadStream t2: [ :result | aBlock value: result ] t3: nil t4: nil t5: nil Receiver's instance variables: defaultKeymappingIndex: an IdentityDictionary(#command->#(#noop: #cursorHome: #...etc... textArea: a RubEditingArea(1015283712) selectorChooser: nil notificationStrategy: a GLMPopperNotificationStrategy RubSmalltalkEditor>>highlightEvaluateAndDo: Receiver: a RubSmalltalkEditor Arguments and temporary variables: aBlock: [ :result | ] Receiver's instance variables: defaultKeymappingIndex: an IdentityDictionary(#command->#(#noop: #cursorHome: #...etc... textArea: a RubEditingArea(1015283712) selectorChooser: nil notificationStrategy: a GLMPopperNotificationStrategy [ textMorph textArea editor highlightEvaluateAndDo: ann action. textMorph shoutStyler style: textMorph text ] in [ textMorph textArea handleEdit: [ textMorph textArea editor highlightEvaluateAndDo: ann action. textMorph shoutStyler style: textMorph text ] ] in GLMMorphicPharoPlaygroundRenderer(GLMMorphicPharoCodeRenderer)>>actOnHighlightAndEvaluate: Receiver: a GLMMorphicPharoPlaygroundRenderer Arguments and temporary variables: ann: a GLMHighlightAndEvaluate Receiver's instance variables: renderer: a GLMMorphicRenderer textMorph: a RubScrolledTextMorph(343146496) textModel: a GLMRubricSmalltalkTextModel RubEditingArea(RubAbstractTextArea)>>handleEdit: Receiver: a RubEditingArea(1015283712) Arguments and temporary variables: editBlock: [ textMorph textArea editor highlightEvaluateAndDo: ann action. tex...etc... Receiver's instance variables: bounds: (0@0) corner: (580@50) owner: a TransformWithLayoutMorph(435159040) submorphs: an Array(a RubPrimarySelectionMorph(255590400) a RubCursor(414449664...etc... fullBounds: nil color: Color transparent extension: a MorphExtension (440139776) [other: (announcer -> an Announcer) (k...etc... model: a GLMRubricSmalltalkTextModel paragraph: a RubShoutStylerDecorator editor: a RubSmalltalkEditor scrollPane: a RubTextScrollPane(414711808) editingState: a RubEditingState textStyle: a TextStyle Source Code Pro textColor: Color black margins: (6@6) corner: (6@6) readOnly: false menuAllowed: true editingMode: a RubSmalltalkScriptingMode cursor: a RubCursor(414449664) segments: an OrderedCollection(a RubHighlightSegmentMorph(918290432)) getMenuPolicy: a RubEditingArea(1015283712) wrapped: true editorClass: RubSmalltalkEditor [ textMorph textArea handleEdit: [ textMorph textArea editor highlightEvaluateAndDo: ann action. textMorph shoutStyler style: textMorph text ] ] in GLMMorphicPharoPlaygroundRenderer(GLMMorphicPharoCodeRenderer)>>actOnHighlightAndEvaluate: Receiver: a GLMMorphicPharoPlaygroundRenderer Arguments and temporary variables: ann: a GLMHighlightAndEvaluate Receiver's instance variables: renderer: a GLMMorphicRenderer textMorph: a RubScrolledTextMorph(343146496) textModel: a GLMRubricSmalltalkTextModel WorldState>>runStepMethodsIn: Receiver: a WorldState Arguments and temporary variables: aWorld: a WorldMorph(511705088) [world] queue: WaitfreeQueue with 0 items nextInQueue: [ textMorph textArea handleEdit: [ textMorph textArea editor ...etc... Receiver's instance variables: hands: an Array(a HandMorph(760479744)) viewBox: (0@0) corner: (936@662) canvas: a FormCanvas on: DisplayScreen(936x662x32) damageRecorder: a DamageRecorder stepList: a Heap() lastStepTime: 193628 lastStepMessage: nil lastCycleTime: 199454 alarms: a Heap(MorphicAlarm(#hideShow -> a RubCursor(414449664))) lastAlarmTime: 199432 menuBuilder: a PragmaMenuBuilder ( nil ) WorldMorph>>runStepMethods Receiver: a WorldMorph(511705088) [world] Arguments and temporary variables: Receiver's instance variables: bounds: (0@0) corner: (936@662) owner: nil submorphs: an Array(a TaskbarMorph(984088576) a GLMSystemWindow(458752000) an I...etc... fullBounds: (0@0) corner: (936@662) color: (Color r: 0.937 g: 0.937 b: 0.937 alpha: 1.0) extension: a MorphExtension (552861696) [other: (dragEnabled -> true) (dropEna...etc... borderWidth: 0 borderColor: (Color r: 0.063 g: 0.063 b: 0.063 alpha: 1.0) backgroundMorph: nil worldState: a WorldState griddingOn: nil osWindow: nil session: nil WorldState>>doOneCycleNowFor: Receiver: a WorldState Arguments and temporary variables: aWorld: a WorldMorph(511705088) [world] Receiver's instance variables: hands: an Array(a HandMorph(760479744)) viewBox: (0@0) corner: (936@662) canvas: a FormCanvas on: DisplayScreen(936x662x32) damageRecorder: a DamageRecorder stepList: a Heap() lastStepTime: 193628 lastStepMessage: nil lastCycleTime: 199454 alarms: a Heap(MorphicAlarm(#hideShow -> a RubCursor(414449664))) lastAlarmTime: 199432 menuBuilder: a PragmaMenuBuilder ( nil ) WorldState>>doOneCycleFor: Receiver: a WorldState Arguments and temporary variables: aWorld: a WorldMorph(511705088) [world] Receiver's instance variables: hands: an Array(a HandMorph(760479744)) viewBox: (0@0) corner: (936@662) canvas: a FormCanvas on: DisplayScreen(936x662x32) damageRecorder: a DamageRecorder stepList: a Heap() lastStepTime: 193628 lastStepMessage: nil lastCycleTime: 199454 alarms: a Heap(MorphicAlarm(#hideShow -> a RubCursor(414449664))) lastAlarmTime: 199432 menuBuilder: a PragmaMenuBuilder ( nil ) WorldMorph>>doOneCycle Receiver: a WorldMorph(511705088) [world] Arguments and temporary variables: Receiver's instance variables: bounds: (0@0) corner: (936@662) owner: nil submorphs: an Array(a TaskbarMorph(984088576) a GLMSystemWindow(458752000) an I...etc... fullBounds: (0@0) corner: (936@662) color: (Color r: 0.937 g: 0.937 b: 0.937 alpha: 1.0) extension: a MorphExtension (552861696) [other: (dragEnabled -> true) (dropEna...etc... borderWidth: 0 borderColor: (Color r: 0.063 g: 0.063 b: 0.063 alpha: 1.0) backgroundMorph: nil worldState: a WorldState griddingOn: nil osWindow: nil session: nil [ [ World doOneCycle. Processor yield. false ] whileFalse: [ ] ] in MorphicUIManager>>spawnNewProcess Receiver: a MorphicUIManager Arguments and temporary variables: Receiver's instance variables: interactiveParser: nil activeTranscript: Transcript [ self value. Processor terminateActive ] in BlockClosure>>newProcess Receiver: [ [ World doOneCycle. Processor yield. false ] whileFalse: [ ] ] Arguments and temporary variables: Receiver's instance variables: outerContext: MorphicUIManager>>spawnNewProcess startpc: 65 numArgs: 0 --- The full stack --- OSNullWindowHandle(Object)>>doesNotUnderstand: #handle WBAScreen>>createSurface WBAScreen>>extent: WBANumberPlayerSelectScreenModel(WBAMenuScreenModel)>>display WizardBattleArena class>>start UndefinedObject>>DoIt OpalCompiler>>evaluate RubSmalltalkEditor>>evaluate:andDo: RubSmalltalkEditor>>highlightEvaluateAndDo: [ textMorph textArea editor highlightEvaluateAndDo: ann action. textMorph shoutStyler style: textMorph text ] in [ textMorph textArea handleEdit: [ textMorph textArea editor highlightEvaluateAndDo: ann action. textMorph shoutStyler style: textMorph text ] ] in GLMMorphicPharoPlaygroundRenderer(GLMMorphicPharoCodeRenderer)>>actOnHighlightAndEvaluate: RubEditingArea(RubAbstractTextArea)>>handleEdit: [ textMorph textArea handleEdit: [ textMorph textArea editor highlightEvaluateAndDo: ann action. textMorph shoutStyler style: textMorph text ] ] in GLMMorphicPharoPlaygroundRenderer(GLMMorphicPharoCodeRenderer)>>actOnHighlightAndEvaluate: WorldState>>runStepMethodsIn: WorldMorph>>runStepMethods WorldState>>doOneCycleNowFor: WorldState>>doOneCycleFor: WorldMorph>>doOneCycle [ [ World doOneCycle. Processor yield. false ] whileFalse: [ ] ] in MorphicUIManager>>spawnNewProcess [ self value. Processor terminateActive ] in BlockClosure>>newProcess ------------------------------------------------------------------------------- THERE_BE_DRAGONS_HERE MessageNotUnderstood: receiver of "drawDuring:" is nil 24 September 2017 8:13:03.099865 pm VM: unix - i686 - linux-gnu - NBCoInterpreter NativeBoost-CogPlugin-EstebanLorenzano.21 uuid: 4d9b9bdf-2dfa-4c0b-99eb-5b110dadc697 Nov 12 2015 NBCogit NativeBoost-CogPlugin-EstebanLorenzano.21 uuid: 4d9b9bdf-2dfa-4c0b-99eb-5b110dadc697 Nov 12 2015 https://github.com/pharo-project/pharo-vm.git Commit: 28d077d8df494ce050ca42c97c892471e8b8740c Date: 2015-10-16 12:02:43 +0200 By: Esteban Lorenzano <esteba...@gmail.com> Jenkins build #15015 Image: Pharo5.0 [Latest update: #50155] UndefinedObject(Object)>>doesNotUnderstand: #drawDuring: Receiver: nil Arguments and temporary variables: aMessage: drawDuring: [ :canvas | model renderOn: canvas ] exception: MessageNotUnderstood: receiver of "drawDuring:" is nil resumeValue: nil Receiver's instance variables: nil WBAScreen>>render Receiver: a WBAScreen Arguments and temporary variables: Receiver's instance variables: model: nil window: an OSWindow surface: nil scheduler: a WBARenderingScheduler [ screen render ] in WBARenderingScheduler>>initialize Receiver: a WBARenderingScheduler Arguments and temporary variables: Receiver's instance variables: process: a Process in nil screen: a WBAScreen [ | time delay | time := DateAndTime now. aBlock value. delay := duration - (DateAndTime now - time). delay negative ifFalse: [ delay wait ] ifTrue: [ "slowing process" ] ] in [ [ | time delay | time := DateAndTime now. aBlock value. delay := duration - (DateAndTime now - time). delay negative ifFalse: [ delay wait ] ifTrue: [ "slowing process" ] ] repeat ] in WBARenderingScheduler(WBAAbstractScheduler)>>newProcessAt:do:every: Receiver: a WBARenderingScheduler Arguments and temporary variables: priority: 30 aBlock: [ screen render ] duration: 0:00:00:00.02 time: 2017-09-24T20:13:03.089621-04:00 delay: nil Receiver's instance variables: process: a Process in nil screen: a WBAScreen BlockClosure>>repeat Receiver: [ | time delay | time := DateAndTime now. aBlock value. delay := duration - (DateAndTime ...etc... Arguments and temporary variables: Receiver's instance variables: outerContext: [ [ | time delay | time := DateAndTime now. aBlock value. delay...etc... startpc: 53 numArgs: 0 [ [ | time delay | time := DateAndTime now. aBlock value. delay := duration - (DateAndTime now - time). delay negative ifFalse: [ delay wait ] ifTrue: [ "slowing process" ] ] repeat ] in WBARenderingScheduler(WBAAbstractScheduler)>>newProcessAt:do:every: Receiver: a WBARenderingScheduler Arguments and temporary variables: priority: 30 aBlock: [ screen render ] duration: 0:00:00:00.02 Receiver's instance variables: process: a Process in nil screen: a WBAScreen [ self value. Processor terminateActive ] in BlockClosure>>newProcess Receiver: [ [ | time delay | time := DateAndTime now. aBlock value. delay := duration - (DateAndTi...etc... Arguments and temporary variables: Receiver's instance variables: outerContext: WBARenderingScheduler(WBAAbstractScheduler)>>newProcessAt:do:ever...etc... startpc: 47 numArgs: 0 --- The full stack --- UndefinedObject(Object)>>doesNotUnderstand: #drawDuring: WBAScreen>>render [ screen render ] in WBARenderingScheduler>>initialize [ | time delay | time := DateAndTime now. aBlock value. delay := duration - (DateAndTime now - time). delay negative ifFalse: [ delay wait ] ifTrue: [ "slowing process" ] ] in [ [ | time delay | time := DateAndTime now. aBlock value. delay := duration - (DateAndTime now - time). delay negative ifFalse: [ delay wait ] ifTrue: [ "slowing process" ] ] repeat ] in WBARenderingScheduler(WBAAbstractScheduler)>>newProcessAt:do:every: BlockClosure>>repeat [ [ | time delay | time := DateAndTime now. aBlock value. delay := duration - (DateAndTime now - time). delay negative ifFalse: [ delay wait ] ifTrue: [ "slowing process" ] ] repeat ] in WBARenderingScheduler(WBAAbstractScheduler)>>newProcessAt:do:every: [ self value. Processor terminateActive ] in BlockClosure>>newProcess ------------------------------------------------------------------------------- THERE_BE_DRAGONS_HERE ==== Startup Error: SubclassResponsibility: OSNullWindowHandle had the subclass responsibility to implement #title: 24 September 2017 8:30:01.620563 pm VM: unix - i686 - linux-gnu - NBCoInterpreter NativeBoost-CogPlugin-EstebanLorenzano.21 uuid: 4d9b9bdf-2dfa-4c0b-99eb-5b110dadc697 Nov 12 2015 NBCogit NativeBoost-CogPlugin-EstebanLorenzano.21 uuid: 4d9b9bdf-2dfa-4c0b-99eb-5b110dadc697 Nov 12 2015 https://github.com/pharo-project/pharo-vm.git Commit: 28d077d8df494ce050ca42c97c892471e8b8740c Date: 2015-10-16 12:02:43 +0200 By: Esteban Lorenzano <esteba...@gmail.com> Jenkins build #15015 Image: Pharo5.0 [Latest update: #50155] OSNullWindowHandle(Object)>>subclassResponsibility Receiver: an OSNullWindowHandle Arguments and temporary variables: Receiver's instance variables: osWindow: nil renderer: nil attributes: an OSWindowAttributes OSNullWindowHandle(OSWindowHandle)>>title: Receiver: an OSNullWindowHandle Arguments and temporary variables: aTitle: 'Wizard Battle Arena' Receiver's instance variables: osWindow: nil renderer: nil attributes: an OSWindowAttributes OSWindow>>title: Receiver: an OSWindow Arguments and temporary variables: aString: 'Wizard Battle Arena' Receiver's instance variables: handle: an OSNullWindowHandle initialAttributes: an OSWindowAttributes eventHandler: nil animated: false WBAScreen>>openWindow Receiver: a WBAScreen Arguments and temporary variables: Receiver's instance variables: model: nil window: an OSWindow surface: nil scheduler: nil WBAScreen>>initialize Receiver: a WBAScreen Arguments and temporary variables: Receiver's instance variables: model: nil window: an OSWindow surface: nil scheduler: nil WBAScreen class(Behavior)>>new Receiver: WBAScreen Arguments and temporary variables: Receiver's instance variables: superclass: Object methodDict: a MethodDictionary(#createSurface->WBAScreen>>#createSurface #event...etc... format: 138 layout: a FixedLayout instanceVariables: #(#model #window #surface #scheduler) organization: a ClassOrganization subclasses: nil name: #WBAScreen classPool: a Dictionary() sharedPools: an OrderedCollection() environment: a SystemDictionary(lots of globals) category: #'Wizard-Battle-Arena-Game-Core' traitComposition: {} localSelectors: nil WizardBattleArena class>>start Receiver: WizardBattleArena Arguments and temporary variables: Receiver's instance variables: superclass: Object methodDict: a MethodDictionary() format: 2 layout: a FixedLayout instanceVariables: #() organization: a ClassOrganization subclasses: nil name: #WizardBattleArena classPool: a Dictionary() sharedPools: an OrderedCollection() environment: a SystemDictionary(lots of globals) category: #'Wizard-Battle-Arena-Front-End' traitComposition: {} localSelectors: nil UndefinedObject>>DoIt Receiver: nil Arguments and temporary variables: Receiver's instance variables: nil OpalCompiler>>evaluate Receiver: an OpalCompiler Arguments and temporary variables: value: nil selectedSource: a ReadStream itsSelection: nil itsSelectionString: nil Receiver's instance variables: ast: DoIt ^ WizardBattleArena start source: a ReadStream context: nil receiver: nil compilationContext: a CompilationContext compilationContextClass: nil useFaultyForParsing: false OpalCompiler(AbstractCompiler)>>evaluate: Receiver: an OpalCompiler Arguments and temporary variables: textOrString: 'WizardBattleArena start' Receiver's instance variables: ast: DoIt ^ WizardBattleArena start source: a ReadStream context: nil receiver: nil compilationContext: a CompilationContext compilationContextClass: nil useFaultyForParsing: false SmalltalkImage>>evaluate: Receiver: Smalltalk Arguments and temporary variables: aString: 'WizardBattleArena start' Receiver's instance variables: globals: a SystemDictionary(lots of globals) deferredStartupActions: an OrderedCollection() specialObjectsArray: an Array(nil false true #Processor->Processor Bitmap Small...etc... session: an Object vm: a VirtualMachine [ result := Smalltalk evaluate: aStream. self hasSessionChanged ifFalse: [ self stdout print: result; lf ] ] in EvaluateCommandLineHandler>>evaluate: Receiver: an EvaluateCommandLineHandler Arguments and temporary variables: aStream: 'WizardBattleArena start' exceptionClassToUse: OCSemanticWarning result: nil Receiver's instance variables: commandLine: a CommandLineArguments session: a Session stdout: a VTermOutputDriver stderr: a VTermOutputDriver sourceFiles: nil BlockClosure>>on:do: Receiver: [ result := Smalltalk evaluate: aStream. self hasSessionChanged ifFalse: [ self stdou...etc... Arguments and temporary variables: exception: an ExceptionSet handlerAction: [ :error | self handleError: error ] Receiver's instance variables: outerContext: EvaluateCommandLineHandler>>evaluate: startpc: 106 numArgs: 0 EvaluateCommandLineHandler>>evaluate: Receiver: an EvaluateCommandLineHandler Arguments and temporary variables: result: nil aStream: 'WizardBattleArena start' exceptionClassToUse: OCSemanticWarning Receiver's instance variables: commandLine: a CommandLineArguments session: a Session stdout: a VTermOutputDriver stderr: a VTermOutputDriver sourceFiles: nil EvaluateCommandLineHandler>>evaluateArguments Receiver: an EvaluateCommandLineHandler Arguments and temporary variables: argumentString: 'WizardBattleArena start' Receiver's instance variables: commandLine: a CommandLineArguments session: a Session stdout: a VTermOutputDriver stderr: a VTermOutputDriver sourceFiles: nil EvaluateCommandLineHandler>>activate Receiver: an EvaluateCommandLineHandler Arguments and temporary variables: Receiver's instance variables: commandLine: a CommandLineArguments session: a Session stdout: a VTermOutputDriver stderr: a VTermOutputDriver sourceFiles: nil EvaluateCommandLineHandler class(CommandLineHandler class)>>activateWith: Receiver: EvaluateCommandLineHandler Arguments and temporary variables: aCommandLine: a CommandLineArguments Receiver's instance variables: superclass: STCommandLineHandler methodDict: a MethodDictionary(#activate->EvaluateCommandLineHandler>>#activate...etc... format: 140 layout: a FixedLayout instanceVariables: #() organization: a ClassOrganization subclasses: nil name: #EvaluateCommandLineHandler classPool: a Dictionary() sharedPools: an OrderedCollection() environment: a SystemDictionary(lots of globals) category: #'CodeImport-CommandLineHandlers' traitComposition: {} localSelectors: nil [ aCommandLinehandler activateWith: commandLine ] in PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand: Receiver: a PharoCommandLineHandler Arguments and temporary variables: aCommandLinehandler: EvaluateCommandLineHandler Receiver's instance variables: commandLine: a CommandLineArguments session: a Session stdout: a VTermOutputDriver stderr: a VTermOutputDriver BlockClosure>>on:do: Receiver: [ aCommandLinehandler activateWith: commandLine ] Arguments and temporary variables: exception: Exit handlerAction: [ :exit | ^ self handleExit: exit for: aCommandLinehandler ] Receiver's instance variables: outerContext: PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubComm...etc... startpc: 34 numArgs: 0 PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand: Receiver: a PharoCommandLineHandler Arguments and temporary variables: aCommandLinehandler: EvaluateCommandLineHandler Receiver's instance variables: commandLine: a CommandLineArguments session: a Session stdout: a VTermOutputDriver stderr: a VTermOutputDriver PharoCommandLineHandler(BasicCommandLineHandler)>>handleSubcommand Receiver: a PharoCommandLineHandler Arguments and temporary variables: handlers: an OrderedCollection(EvaluateCommandLineHandler) Receiver's instance variables: commandLine: a CommandLineArguments session: a Session stdout: a VTermOutputDriver stderr: a VTermOutputDriver PharoCommandLineHandler(BasicCommandLineHandler)>>handleArgument: Receiver: a PharoCommandLineHandler Arguments and temporary variables: aString: 'eval' Receiver's instance variables: commandLine: a CommandLineArguments session: a Session stdout: a VTermOutputDriver stderr: a VTermOutputDriver [ self handleArgument: (self arguments ifEmpty: [ '' ] ifNotEmpty: [ :arguments | arguments first ]) ] in PharoCommandLineHandler(BasicCommandLineHandler)>>activate Receiver: a PharoCommandLineHandler Arguments and temporary variables: Receiver's instance variables: commandLine: a CommandLineArguments session: a Session stdout: a VTermOutputDriver stderr: a VTermOutputDriver BlockClosure>>on:do: Receiver: [ self handleArgument: (self arguments ifEmpty: [ '' ] ifNotEmpty: [ :arguments | argument...etc... Arguments and temporary variables: exception: Exit handlerAction: [ :exit | ^ self handleExit: exit ] Receiver's instance variables: outerContext: PharoCommandLineHandler(BasicCommandLineHandler)>>activate startpc: 49 numArgs: 0 PharoCommandLineHandler(BasicCommandLineHandler)>>activate Receiver: a PharoCommandLineHandler Arguments and temporary variables: Receiver's instance variables: commandLine: a CommandLineArguments session: a Session stdout: a VTermOutputDriver stderr: a VTermOutputDriver PharoCommandLineHandler>>activate Receiver: a PharoCommandLineHandler Arguments and temporary variables: Receiver's instance variables: commandLine: a CommandLineArguments session: a Session stdout: a VTermOutputDriver stderr: a VTermOutputDriver PharoCommandLineHandler class(CommandLineHandler class)>>activateWith: Receiver: PharoCommandLineHandler Arguments and temporary variables: aCommandLine: a CommandLineArguments Receiver's instance variables: superclass: BasicCommandLineHandler methodDict: a MethodDictionary(#activate->PharoCommandLineHandler>>#activate #c...etc... format: 138 layout: a FixedLayout instanceVariables: nil organization: a ClassOrganization subclasses: nil name: #PharoCommandLineHandler classPool: a Dictionary() sharedPools: an OrderedCollection() environment: a SystemDictionary(lots of globals) category: #'System-CommandLineHandler' traitComposition: {} localSelectors: nil [ super activateWith: aCommandLine ] in PharoCommandLineHandler class>>activateWith: Receiver: PharoCommandLineHandler Arguments and temporary variables: aCommandLine: a CommandLineArguments Receiver's instance variables: superclass: BasicCommandLineHandler methodDict: a MethodDictionary(#activate->PharoCommandLineHandler>>#activate #c...etc... format: 138 layout: a FixedLayout instanceVariables: nil organization: a ClassOrganization subclasses: nil name: #PharoCommandLineHandler classPool: a Dictionary() sharedPools: an OrderedCollection() environment: a SystemDictionary(lots of globals) category: #'System-CommandLineHandler' traitComposition: {} localSelectors: nil NonInteractiveUIManager(UIManager)>>defer: Receiver: a NonInteractiveUIManager Arguments and temporary variables: aBlock: [ super activateWith: aCommandLine ] Receiver's instance variables: doNotQuitOnRestart: false uiManager: a MorphicUIManager PharoCommandLineHandler class>>activateWith: Receiver: PharoCommandLineHandler Arguments and temporary variables: aCommandLine: a CommandLineArguments Receiver's instance variables: superclass: BasicCommandLineHandler methodDict: a MethodDictionary(#activate->PharoCommandLineHandler>>#activate #c...etc... format: 138 layout: a FixedLayout instanceVariables: nil organization: a ClassOrganization subclasses: nil name: #PharoCommandLineHandler classPool: a Dictionary() sharedPools: an OrderedCollection() environment: a SystemDictionary(lots of globals) category: #'System-CommandLineHandler' traitComposition: {} localSelectors: nil [ aCommandLinehandler activateWith: commandLine ] in BasicCommandLineHandler>>activateSubCommand: Receiver: a BasicCommandLineHandler Arguments and temporary variables: aCommandLinehandler: PharoCommandLineHandler Receiver's instance variables: commandLine: a CommandLineArguments session: a Session stdout: a VTermOutputDriver stderr: a VTermOutputDriver BlockClosure>>on:do: Receiver: [ aCommandLinehandler activateWith: commandLine ] Arguments and temporary variables: exception: Exit handlerAction: [ :exit | ^ self handleExit: exit for: aCommandLinehandler ] Receiver's instance variables: outerContext: BasicCommandLineHandler>>activateSubCommand: startpc: 34 numArgs: 0 BasicCommandLineHandler>>activateSubCommand: Receiver: a BasicCommandLineHandler Arguments and temporary variables: aCommandLinehandler: PharoCommandLineHandler Receiver's instance variables: commandLine: a CommandLineArguments session: a Session stdout: a VTermOutputDriver stderr: a VTermOutputDriver BasicCommandLineHandler>>handleSubcommand Receiver: a BasicCommandLineHandler Arguments and temporary variables: handlers: an OrderedCollection(PharoCommandLineHandler EvaluateCommandLineHandl...etc... Receiver's instance variables: commandLine: a CommandLineArguments session: a Session stdout: a VTermOutputDriver stderr: a VTermOutputDriver BasicCommandLineHandler>>handleArgument: Receiver: a BasicCommandLineHandler Arguments and temporary variables: aString: 'eval' Receiver's instance variables: commandLine: a CommandLineArguments session: a Session stdout: a VTermOutputDriver stderr: a VTermOutputDriver [ self handleArgument: (self arguments ifEmpty: [ '' ] ifNotEmpty: [ :arguments | arguments first ]) ] in BasicCommandLineHandler>>activate Receiver: a BasicCommandLineHandler Arguments and temporary variables: Receiver's instance variables: commandLine: a CommandLineArguments session: a Session stdout: a VTermOutputDriver stderr: a VTermOutputDriver BlockClosure>>on:do: Receiver: [ self handleArgument: (self arguments ifEmpty: [ '' ] ifNotEmpty: [ :arguments | argument...etc... Arguments and temporary variables: exception: Exit handlerAction: [ :exit | ^ self handleExit: exit ] Receiver's instance variables: outerContext: BasicCommandLineHandler>>activate startpc: 49 numArgs: 0 BasicCommandLineHandler>>activate Receiver: a BasicCommandLineHandler Arguments and temporary variables: Receiver's instance variables: commandLine: a CommandLineArguments session: a Session stdout: a VTermOutputDriver stderr: a VTermOutputDriver [ self new activate ] in BasicCommandLineHandler class>>startUp: Receiver: BasicCommandLineHandler Arguments and temporary variables: resuming: true Receiver's instance variables: superclass: CommandLineHandler methodDict: a MethodDictionary(#activate->BasicCommandLineHandler>>#activate #a...etc... format: 138 layout: a FixedLayout instanceVariables: nil organization: a ClassOrganization subclasses: {PharoCommandLineHandler} name: #BasicCommandLineHandler classPool: a Dictionary() sharedPools: an OrderedCollection() environment: a SystemDictionary(lots of globals) category: #'System-CommandLineHandler' traitComposition: {} localSelectors: nil --- The full stack --- OSNullWindowHandle(Object)>>subclassResponsibility OSNullWindowHandle(OSWindowHandle)>>title: OSWindow>>title: WBAScreen>>openWindow WBAScreen>>initialize WBAScreen class(Behavior)>>new WizardBattleArena class>>start UndefinedObject>>DoIt OpalCompiler>>evaluate OpalCompiler(AbstractCompiler)>>evaluate: SmalltalkImage>>evaluate: [ result := Smalltalk evaluate: aStream. self hasSessionChanged ifFalse: [ self stdout print: result; lf ] ] in EvaluateCommandLineHandler>>evaluate: BlockClosure>>on:do: EvaluateCommandLineHandler>>evaluate: EvaluateCommandLineHandler>>evaluateArguments EvaluateCommandLineHandler>>activate EvaluateCommandLineHandler class(CommandLineHandler class)>>activateWith: [ aCommandLinehandler activateWith: commandLine ] in PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand: BlockClosure>>on:do: PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand: PharoCommandLineHandler(BasicCommandLineHandler)>>handleSubcommand PharoCommandLineHandler(BasicCommandLineHandler)>>handleArgument: [ self handleArgument: (self arguments ifEmpty: [ '' ] ifNotEmpty: [ :arguments | arguments first ]) ] in PharoCommandLineHandler(BasicCommandLineHandler)>>activate BlockClosure>>on:do: PharoCommandLineHandler(BasicCommandLineHandler)>>activate PharoCommandLineHandler>>activate PharoCommandLineHandler class(CommandLineHandler class)>>activateWith: [ super activateWith: aCommandLine ] in PharoCommandLineHandler class>>activateWith: NonInteractiveUIManager(UIManager)>>defer: PharoCommandLineHandler class>>activateWith: [ aCommandLinehandler activateWith: commandLine ] in BasicCommandLineHandler>>activateSubCommand: BlockClosure>>on:do: BasicCommandLineHandler>>activateSubCommand: BasicCommandLineHandler>>handleSubcommand BasicCommandLineHandler>>handleArgument: [ self handleArgument: (self arguments ifEmpty: [ '' ] ifNotEmpty: [ :arguments | arguments first ]) ] in BasicCommandLineHandler>>activate BlockClosure>>on:do: BasicCommandLineHandler>>activate [ self new activate ] in BasicCommandLineHandler class>>startUp: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BlockClosure>>cull: [ action cull: resuming ] in SmalltalkImage>>executeDeferredStartupActions: BlockClosure>>on:do: SmalltalkImage>>logStartUpErrorDuring:into:tryDebugger: SmalltalkImage>>executeDeferredStartupActions: SmalltalkImage>>startupImage:snapshotWorked: SmalltalkImage>>snapshot:andQuit: [ Smalltalk snapshot: true andQuit: true ] in WorldState class>>saveAndQuit BlockClosure>>ensure: CursorWithMask(Cursor)>>showWhile: WorldState class>>saveAndQuit [ | selArgCount | "show cursor in case item opens a new MVC window" (selArgCount := selector numArgs) = 0 ifTrue: [ target perform: selector ] ifFalse: [ selArgCount = arguments size ifTrue: [ target perform: selector withArguments: arguments ] ifFalse: [ target perform: selector withArguments: (arguments copyWith: evt) ] ]. self changed ] in ToggleMenuItemMorph(MenuItemMorph)>>invokeWithEvent: BlockClosure>>ensure: CursorWithMask(Cursor)>>showWhile: ToggleMenuItemMorph(MenuItemMorph)>>invokeWithEvent: ToggleMenuItemMorph(MenuItemMorph)>>mouseUp: ToggleMenuItemMorph(MenuItemMorph)>>handleMouseUp: MouseButtonEvent>>sentTo: ToggleMenuItemMorph(Morph)>>handleEvent: MorphicEventDispatcher>>dispatchDefault:with: MorphicEventDispatcher>>handleMouseUp: MouseButtonEvent>>sentTo: [ ^ anEvent sentTo: self ] in MorphicEventDispatcher>>dispatchEvent:with: BlockClosure>>ensure: MorphicEventDispatcher>>dispatchEvent:with: ToggleMenuItemMorph(Morph)>>processEvent:using: MorphicEventDispatcher>>dispatchDefault:with: MorphicEventDispatcher>>handleMouseUp: MouseButtonEvent>>sentTo: [ ^ anEvent sentTo: self ] in MorphicEventDispatcher>>dispatchEvent:with: BlockClosure>>ensure: MorphicEventDispatcher>>dispatchEvent:with: MenuMorph(Morph)>>processEvent:using: MenuMorph(Morph)>>processEvent: MenuMorph>>handleFocusEvent: [ ActiveHand := self. ActiveEvent := anEvent. result := focusHolder handleFocusEvent: (anEvent transformedBy: (focusHolder transformedFrom: self)) ] in HandMorph>>sendFocusEvent:to:clear: BlockClosure>>on:do: WorldMorph(PasteUpMorph)>>becomeActiveDuring: HandMorph>>sendFocusEvent:to:clear: HandMorph>>sendEvent:focus:clear: HandMorph>>sendMouseEvent: HandMorph>>handleEvent: HandMorph>>processEvents [ :h | ActiveHand := h. h processEvents. ActiveHand := nil ] in WorldState>>doOneCycleNowFor: Array(SequenceableCollection)>>do: WorldState>>handsDo: WorldState>>doOneCycleNowFor: WorldState>>doOneCycleFor: WorldMorph>>doOneCycle [ [ World doOneCycle. Processor yield. false ] whileFalse: [ ] ] in MorphicUIManager>>spawnNewProcess [ self value. Processor terminateActive ] in BlockClosure>>newProcess ------------------------------------------------------------------------------- THERE_BE_DRAGONS_HERE Got startup errors: ------------------------------------------------------------------------------- THERE_BE_DRAGONS_HERE SubclassResponsibility: OSNullWindowHandle had the subclass responsibility to implement #title: -------------------------------------------------------------------------------