Hi all,
I am really enjoying the latest versions of Squeak. In trying out 6.0-alpha with trunk updates, I found a DNU when doing normal Morphic tasks. Sorry if this has already been reported. Should be repeatable: - open fresh image - make flaps appear (open a new Morphic project, or World menu -> flaps -> show shared tabs) - click Widgets - drag out an Object Catalog - click Multimedia Something is going on within the Event Theatre item's initialization. Seems to be that the "tutorial" Event Theatre Worldlet has a worldState instance variable which is nil, but it is being sent #displayWorld:submorphs: by PasteUpMorph>>#displayWorld. Interestingly, Worldlet's class comments specifically suggest instances don't have their own worldState. :D Other buttons in the Object Catalog did not result in a DNU for me. ...stack follows: UndefinedObject(Object)>>doesNotUnderstand: #displayWorld:submorphs: Worldlet(PasteUpMorph)>>displayWorld [] in Worldlet>>installFlaps OrderedCollection>>do: Worldlet>>installFlaps EventRecordingSpace>>addSuppliesFlap EventRecordingSpace>>initialize EventRecordingSpace(Morph)>>initializeToStandAlone EventRecordingSpace class(Morph class)>>newStandAlone PartsBin class>>thumbnailForQuad:color: [] in PartsBin>>listDirection:quadList:buttonClass: OrderedCollection>>do: PartsBin>>listDirection:quadList:buttonClass: PartsBin>>listDirection:quadList: ObjectsTool>>installQuads:fromButton: [] in ObjectsTool>>showCategory:fromButton: BlockClosure>>ensure: CursorWithMask(Cursor)>>showWhile: ObjectsTool>>showCategory:fromButton: SimpleButtonMorph>>doButtonAction SimpleButtonMorph>>mouseDown: SimpleButtonMorph(Morph)>>handleMouseDown: MouseButtonEvent>>sentTo: SimpleButtonMorph(Morph)>>handleEvent: MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: [] in MorphicEventDispatcher>>dispatchMouseDown:with: BlockClosure>>ensure: MorphicEventDispatcher>>dispatchMouseDown:with: MorphicEventDispatcher>>dispatchEvent:with: SimpleButtonMorph(Morph)>>processEvent:using: [] in MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: Array(SequenceableCollection)>>do: AlignmentMorph(Morph)>>submorphsDo: MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: [] in MorphicEventDispatcher>>dispatchMouseDown:with: BlockClosure>>ensure: MorphicEventDispatcher>>dispatchMouseDown:with: MorphicEventDispatcher>>dispatchEvent:with: AlignmentMorph(Morph)>>processEvent:using: [] in MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: Array(SequenceableCollection)>>do: ObjectsTool(Morph)>>submorphsDo: MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: [] in MorphicEventDispatcher>>dispatchMouseDown:with: BlockClosure>>ensure: MorphicEventDispatcher>>dispatchMouseDown:with: MorphicEventDispatcher>>dispatchEvent:with: ObjectsTool(Morph)>>processEvent:using: [] in MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: Array(SequenceableCollection)>>do: PasteUpMorph(Morph)>>submorphsDo: MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: [] in MorphicEventDispatcher>>dispatchMouseDown:with: BlockClosure>>ensure: MorphicEventDispatcher>>dispatchMouseDown:with: MorphicEventDispatcher>>dispatchEvent:with: PasteUpMorph(Morph)>>processEvent:using: [] in PasteUpMorph>>processEvent:using: BlockClosure>>ensure: PasteUpMorph>>processEvent:using: PasteUpMorph(Morph)>>processEvent: [] in [] in [] in HandMorph>>sendEvent:focus:clear: BlockClosure>>ensure: MouseButtonEvent(MorphicEvent)>>becomeActiveDuring: [] in [] in HandMorph>>sendEvent:focus:clear: BlockClosure>>ensure: HandMorph>>becomeActiveDuring: [] in HandMorph>>sendEvent:focus:clear: BlockClosure>>ensure: PasteUpMorph>>becomeActiveDuring: HandMorph>>sendEvent:focus:clear: HandMorph>>sendMouseEvent: HandMorph>>handleEvent: HandMorph>>processEvents [] in WorldState>>doOneCycleNowFor: Array(SequenceableCollection)>>do: WorldState>>handsDo: WorldState>>doOneCycleNowFor: WorldState>>doOneCycleFor: PasteUpMorph>>doOneCycle [] in MorphicProject>>spawnNewProcess [] in BlockClosure>>newProcess Thanks, Tim |
This is an interesting one.
We have EventRecordingSpace class>>newStandalone that is trying to create a new instance "capable of standing by itself as a usable morph." This makes an instance with a contentArea that is a Worldlet. Presumabaly that Wordlet is supposed to be and "independent" thing too. But then we get to Worldlet(PasteUpMorph)>>displayWorld, in which the Worldlet tries to use its worldState to display submorphs, but it has no worldState, so boom. It may be necessary to look at an older image to figure out where this is going wrong. Dave p.s. Tim, thanks for posting this question :-) On Sat, Feb 17, 2018 at 11:27:53AM -0800, Tm Jhnsn wrote: > Hi all, > > I am really enjoying the latest versions of Squeak. > > In trying out 6.0-alpha with trunk updates, I found a DNU when doing normal Morphic tasks. Sorry if this has already been reported. > > Should be repeatable: > > - open fresh image > - make flaps appear (open a new Morphic project, or World menu -> flaps -> show shared tabs) > - click Widgets > - drag out an Object Catalog > - click Multimedia > > Something is going on within the Event Theatre item's initialization. > > Seems to be that the "tutorial" Event Theatre Worldlet has a worldState instance variable which is nil, but it is being sent #displayWorld:submorphs: by PasteUpMorph>>#displayWorld. Interestingly, Worldlet's class comments specifically suggest instances don't have their own worldState. :D > > Other buttons in the Object Catalog did not result in a DNU for me. > > ...stack follows: > > UndefinedObject(Object)>>doesNotUnderstand: #displayWorld:submorphs: > Worldlet(PasteUpMorph)>>displayWorld > [] in Worldlet>>installFlaps > OrderedCollection>>do: > Worldlet>>installFlaps > EventRecordingSpace>>addSuppliesFlap > EventRecordingSpace>>initialize > EventRecordingSpace(Morph)>>initializeToStandAlone > EventRecordingSpace class(Morph class)>>newStandAlone > PartsBin class>>thumbnailForQuad:color: > [] in PartsBin>>listDirection:quadList:buttonClass: > OrderedCollection>>do: > PartsBin>>listDirection:quadList:buttonClass: > PartsBin>>listDirection:quadList: > ObjectsTool>>installQuads:fromButton: > [] in ObjectsTool>>showCategory:fromButton: > BlockClosure>>ensure: > CursorWithMask(Cursor)>>showWhile: > ObjectsTool>>showCategory:fromButton: > SimpleButtonMorph>>doButtonAction > SimpleButtonMorph>>mouseDown: > SimpleButtonMorph(Morph)>>handleMouseDown: > MouseButtonEvent>>sentTo: > SimpleButtonMorph(Morph)>>handleEvent: > MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: > [] in MorphicEventDispatcher>>dispatchMouseDown:with: > BlockClosure>>ensure: > MorphicEventDispatcher>>dispatchMouseDown:with: > MorphicEventDispatcher>>dispatchEvent:with: > SimpleButtonMorph(Morph)>>processEvent:using: > [] in MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > Array(SequenceableCollection)>>do: > AlignmentMorph(Morph)>>submorphsDo: > MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: > [] in MorphicEventDispatcher>>dispatchMouseDown:with: > BlockClosure>>ensure: > MorphicEventDispatcher>>dispatchMouseDown:with: > MorphicEventDispatcher>>dispatchEvent:with: > AlignmentMorph(Morph)>>processEvent:using: > [] in MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > Array(SequenceableCollection)>>do: > ObjectsTool(Morph)>>submorphsDo: > MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: > [] in MorphicEventDispatcher>>dispatchMouseDown:with: > BlockClosure>>ensure: > MorphicEventDispatcher>>dispatchMouseDown:with: > MorphicEventDispatcher>>dispatchEvent:with: > ObjectsTool(Morph)>>processEvent:using: > [] in MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > Array(SequenceableCollection)>>do: > PasteUpMorph(Morph)>>submorphsDo: > MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: > [] in MorphicEventDispatcher>>dispatchMouseDown:with: > BlockClosure>>ensure: > MorphicEventDispatcher>>dispatchMouseDown:with: > MorphicEventDispatcher>>dispatchEvent:with: > PasteUpMorph(Morph)>>processEvent:using: > [] in PasteUpMorph>>processEvent:using: > BlockClosure>>ensure: > PasteUpMorph>>processEvent:using: > PasteUpMorph(Morph)>>processEvent: > [] in [] in [] in HandMorph>>sendEvent:focus:clear: > BlockClosure>>ensure: > MouseButtonEvent(MorphicEvent)>>becomeActiveDuring: > [] in [] in HandMorph>>sendEvent:focus:clear: > BlockClosure>>ensure: > HandMorph>>becomeActiveDuring: > [] in HandMorph>>sendEvent:focus:clear: > BlockClosure>>ensure: > PasteUpMorph>>becomeActiveDuring: > HandMorph>>sendEvent:focus:clear: > HandMorph>>sendMouseEvent: > HandMorph>>handleEvent: > HandMorph>>processEvents > [] in WorldState>>doOneCycleNowFor: > Array(SequenceableCollection)>>do: > WorldState>>handsDo: > WorldState>>doOneCycleNowFor: > WorldState>>doOneCycleFor: > PasteUpMorph>>doOneCycle > [] in MorphicProject>>spawnNewProcess > [] in BlockClosure>>newProcess > > > Thanks, > Tim > > |
PasteUpMorph used to say:
displayWorld
which would work if you remove the "self deprecated" from #privateOuterDisplayWorld On 2/17/18 5:05 PM, David T. Lewis
wrote:
This is an interesting one. We have EventRecordingSpace class>>newStandalone that is trying to create a new instance "capable of standing by itself as a usable morph." This makes an instance with a contentArea that is a Worldlet. Presumabaly that Wordlet is supposed to be and "independent" thing too. But then we get to Worldlet(PasteUpMorph)>>displayWorld, in which the Worldlet tries to use its worldState to display submorphs, but it has no worldState, so boom. It may be necessary to look at an older image to figure out where this is going wrong. Dave p.s. Tim, thanks for posting this question :-) On Sat, Feb 17, 2018 at 11:27:53AM -0800, Tm Jhnsn wrote:Hi all, I am really enjoying the latest versions of Squeak. In trying out 6.0-alpha with trunk updates, I found a DNU when doing normal Morphic tasks. Sorry if this has already been reported. Should be repeatable: - open fresh image - make flaps appear (open a new Morphic project, or World menu -> flaps -> show shared tabs) - click Widgets - drag out an Object Catalog - click Multimedia Something is going on within the Event Theatre item's initialization. Seems to be that the "tutorial" Event Theatre Worldlet has a worldState instance variable which is nil, but it is being sent #displayWorld:submorphs: by PasteUpMorph>>#displayWorld. Interestingly, Worldlet's class comments specifically suggest instances don't have their own worldState. :D Other buttons in the Object Catalog did not result in a DNU for me. ...stack follows: UndefinedObject(Object)>>doesNotUnderstand: #displayWorld:submorphs: Worldlet(PasteUpMorph)>>displayWorld [] in Worldlet>>installFlaps OrderedCollection>>do: Worldlet>>installFlaps EventRecordingSpace>>addSuppliesFlap EventRecordingSpace>>initialize EventRecordingSpace(Morph)>>initializeToStandAlone EventRecordingSpace class(Morph class)>>newStandAlone PartsBin class>>thumbnailForQuad:color: [] in PartsBin>>listDirection:quadList:buttonClass: OrderedCollection>>do: PartsBin>>listDirection:quadList:buttonClass: PartsBin>>listDirection:quadList: ObjectsTool>>installQuads:fromButton: [] in ObjectsTool>>showCategory:fromButton: BlockClosure>>ensure: CursorWithMask(Cursor)>>showWhile: ObjectsTool>>showCategory:fromButton: SimpleButtonMorph>>doButtonAction SimpleButtonMorph>>mouseDown: SimpleButtonMorph(Morph)>>handleMouseDown: MouseButtonEvent>>sentTo: SimpleButtonMorph(Morph)>>handleEvent: MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: [] in MorphicEventDispatcher>>dispatchMouseDown:with: BlockClosure>>ensure: MorphicEventDispatcher>>dispatchMouseDown:with: MorphicEventDispatcher>>dispatchEvent:with: SimpleButtonMorph(Morph)>>processEvent:using: [] in MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: Array(SequenceableCollection)>>do: AlignmentMorph(Morph)>>submorphsDo: MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: [] in MorphicEventDispatcher>>dispatchMouseDown:with: BlockClosure>>ensure: MorphicEventDispatcher>>dispatchMouseDown:with: MorphicEventDispatcher>>dispatchEvent:with: AlignmentMorph(Morph)>>processEvent:using: [] in MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: Array(SequenceableCollection)>>do: ObjectsTool(Morph)>>submorphsDo: MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: [] in MorphicEventDispatcher>>dispatchMouseDown:with: BlockClosure>>ensure: MorphicEventDispatcher>>dispatchMouseDown:with: MorphicEventDispatcher>>dispatchEvent:with: ObjectsTool(Morph)>>processEvent:using: [] in MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: Array(SequenceableCollection)>>do: PasteUpMorph(Morph)>>submorphsDo: MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: [] in MorphicEventDispatcher>>dispatchMouseDown:with: BlockClosure>>ensure: MorphicEventDispatcher>>dispatchMouseDown:with: MorphicEventDispatcher>>dispatchEvent:with: PasteUpMorph(Morph)>>processEvent:using: [] in PasteUpMorph>>processEvent:using: BlockClosure>>ensure: PasteUpMorph>>processEvent:using: PasteUpMorph(Morph)>>processEvent: [] in [] in [] in HandMorph>>sendEvent:focus:clear: BlockClosure>>ensure: MouseButtonEvent(MorphicEvent)>>becomeActiveDuring: [] in [] in HandMorph>>sendEvent:focus:clear: BlockClosure>>ensure: HandMorph>>becomeActiveDuring: [] in HandMorph>>sendEvent:focus:clear: BlockClosure>>ensure: PasteUpMorph>>becomeActiveDuring: HandMorph>>sendEvent:focus:clear: HandMorph>>sendMouseEvent: HandMorph>>handleEvent: HandMorph>>processEvents [] in WorldState>>doOneCycleNowFor: Array(SequenceableCollection)>>do: WorldState>>handsDo: WorldState>>doOneCycleNowFor: WorldState>>doOneCycleFor: PasteUpMorph>>doOneCycle [] in MorphicProject>>spawnNewProcess [] in BlockClosure>>newProcess Thanks, Tim |
Thanks Bob,
I see now the deprecated method, but I think something else is going wrong. The original logic from privateOuterDisplayWorld is still present in the most recent version of PasteUpMorph>>displayWorld. But worldState is nil when this is called, and that seems to be the cause of the error. I can't follow up on it tonight, but I think I'll try to dig back through some earlier versions of the trunk image and see if I can figure out where it started failing. Dave On Sat, Feb 17, 2018 at 09:36:25PM -0500, Bob Arning wrote: > PasteUpMorph used to say: > > > displayWorld > > ?????? self outermostWorldMorph privateOuterDisplayWorld > > > which would work if you remove the "self deprecated" from > #privateOuterDisplayWorld > > > On 2/17/18 5:05 PM, David T. Lewis wrote: > >This is an interesting one. > > > >We have EventRecordingSpace class>>newStandalone that is trying to create > >a new > >instance "capable of standing by itself as a usable morph." > > > >This makes an instance with a contentArea that is a Worldlet. Presumabaly > >that > >Wordlet is supposed to be and "independent" thing too. But then we get to > >Worldlet(PasteUpMorph)>>displayWorld, in which the Worldlet tries to use > >its > >worldState to display submorphs, but it has no worldState, so boom. > > > >It may be necessary to look at an older image to figure out where this is > >going wrong. > > > >Dave > > > >p.s. Tim, thanks for posting this question :-) > > > > > >On Sat, Feb 17, 2018 at 11:27:53AM -0800, Tm Jhnsn wrote: > >>Hi all, > >> > >>I am really enjoying the latest versions of Squeak. > >> > >>In trying out 6.0-alpha with trunk updates, I found a DNU when doing > >>normal Morphic tasks. Sorry if this has already been reported. > >> > >>Should be repeatable: > >> > >>- open fresh image > >>- make flaps appear (open a new Morphic project, or World menu -> flaps > >>-> show shared tabs) > >>- click Widgets > >>- drag out an Object Catalog > >>- click Multimedia > >> > >>Something is going on within the Event Theatre item's initialization. > >> > >>Seems to be that the "tutorial" Event Theatre Worldlet has a worldState > >>instance variable which is nil, but it is being sent > >>#displayWorld:submorphs: by PasteUpMorph>>#displayWorld. Interestingly, > >>Worldlet's class comments specifically suggest instances don't have their > >>own worldState. :D > >> > >>Other buttons in the Object Catalog did not result in a DNU for me. > >> > >>...stack follows: > >> > >>UndefinedObject(Object)>>doesNotUnderstand: #displayWorld:submorphs: > >>Worldlet(PasteUpMorph)>>displayWorld > >>[] in Worldlet>>installFlaps > >>OrderedCollection>>do: > >>Worldlet>>installFlaps > >>EventRecordingSpace>>addSuppliesFlap > >>EventRecordingSpace>>initialize > >>EventRecordingSpace(Morph)>>initializeToStandAlone > >>EventRecordingSpace class(Morph class)>>newStandAlone > >>PartsBin class>>thumbnailForQuad:color: > >>[] in PartsBin>>listDirection:quadList:buttonClass: > >>OrderedCollection>>do: > >>PartsBin>>listDirection:quadList:buttonClass: > >>PartsBin>>listDirection:quadList: > >>ObjectsTool>>installQuads:fromButton: > >>[] in ObjectsTool>>showCategory:fromButton: > >>BlockClosure>>ensure: > >>CursorWithMask(Cursor)>>showWhile: > >>ObjectsTool>>showCategory:fromButton: > >>SimpleButtonMorph>>doButtonAction > >>SimpleButtonMorph>>mouseDown: > >>SimpleButtonMorph(Morph)>>handleMouseDown: > >>MouseButtonEvent>>sentTo: > >>SimpleButtonMorph(Morph)>>handleEvent: > >>MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: > >>[] in MorphicEventDispatcher>>dispatchMouseDown:with: > >>BlockClosure>>ensure: > >>MorphicEventDispatcher>>dispatchMouseDown:with: > >>MorphicEventDispatcher>>dispatchEvent:with: > >>SimpleButtonMorph(Morph)>>processEvent:using: > >>[] in MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > >>Array(SequenceableCollection)>>do: > >>AlignmentMorph(Morph)>>submorphsDo: > >>MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > >>MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: > >>[] in MorphicEventDispatcher>>dispatchMouseDown:with: > >>BlockClosure>>ensure: > >>MorphicEventDispatcher>>dispatchMouseDown:with: > >>MorphicEventDispatcher>>dispatchEvent:with: > >>AlignmentMorph(Morph)>>processEvent:using: > >>[] in MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > >>Array(SequenceableCollection)>>do: > >>ObjectsTool(Morph)>>submorphsDo: > >>MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > >>MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: > >>[] in MorphicEventDispatcher>>dispatchMouseDown:with: > >>BlockClosure>>ensure: > >>MorphicEventDispatcher>>dispatchMouseDown:with: > >>MorphicEventDispatcher>>dispatchEvent:with: > >>ObjectsTool(Morph)>>processEvent:using: > >>[] in MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > >>Array(SequenceableCollection)>>do: > >>PasteUpMorph(Morph)>>submorphsDo: > >>MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > >>MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: > >>[] in MorphicEventDispatcher>>dispatchMouseDown:with: > >>BlockClosure>>ensure: > >>MorphicEventDispatcher>>dispatchMouseDown:with: > >>MorphicEventDispatcher>>dispatchEvent:with: > >>PasteUpMorph(Morph)>>processEvent:using: > >>[] in PasteUpMorph>>processEvent:using: > >>BlockClosure>>ensure: > >>PasteUpMorph>>processEvent:using: > >>PasteUpMorph(Morph)>>processEvent: > >>[] in [] in [] in HandMorph>>sendEvent:focus:clear: > >>BlockClosure>>ensure: > >>MouseButtonEvent(MorphicEvent)>>becomeActiveDuring: > >>[] in [] in HandMorph>>sendEvent:focus:clear: > >>BlockClosure>>ensure: > >>HandMorph>>becomeActiveDuring: > >>[] in HandMorph>>sendEvent:focus:clear: > >>BlockClosure>>ensure: > >>PasteUpMorph>>becomeActiveDuring: > >>HandMorph>>sendEvent:focus:clear: > >>HandMorph>>sendMouseEvent: > >>HandMorph>>handleEvent: > >>HandMorph>>processEvents > >>[] in WorldState>>doOneCycleNowFor: > >>Array(SequenceableCollection)>>do: > >>WorldState>>handsDo: > >>WorldState>>doOneCycleNowFor: > >>WorldState>>doOneCycleFor: > >>PasteUpMorph>>doOneCycle > >>[] in MorphicProject>>spawnNewProcess > >>[] in BlockClosure>>newProcess > >> > >> > >>Thanks, > >>Tim > >> > >> > > |
Except that #outermostWorldMorph for the
Worldlet will return the World where the <worldState> will
be fine. On 2/17/18 10:54 PM, David T. Lewis
wrote:
Thanks Bob, I see now the deprecated method, but I think something else is going wrong. The original logic from privateOuterDisplayWorld is still present in the most recent version of PasteUpMorph>>displayWorld. But worldState is nil when this is called, and that seems to be the cause of the error. I can't follow up on it tonight, but I think I'll try to dig back through some earlier versions of the trunk image and see if I can figure out where it started failing. Dave On Sat, Feb 17, 2018 at 09:36:25PM -0500, Bob Arning wrote:PasteUpMorph used to say: displayWorld ?????? self outermostWorldMorph privateOuterDisplayWorld which would work if you remove the "self deprecated" from #privateOuterDisplayWorld On 2/17/18 5:05 PM, David T. Lewis wrote:This is an interesting one. We have EventRecordingSpace class>>newStandalone that is trying to create a new instance "capable of standing by itself as a usable morph." This makes an instance with a contentArea that is a Worldlet. Presumabaly that Wordlet is supposed to be and "independent" thing too. But then we get to Worldlet(PasteUpMorph)>>displayWorld, in which the Worldlet tries to use its worldState to display submorphs, but it has no worldState, so boom. It may be necessary to look at an older image to figure out where this is going wrong. Dave p.s. Tim, thanks for posting this question :-) On Sat, Feb 17, 2018 at 11:27:53AM -0800, Tm Jhnsn wrote:Hi all, I am really enjoying the latest versions of Squeak. In trying out 6.0-alpha with trunk updates, I found a DNU when doing normal Morphic tasks. Sorry if this has already been reported. Should be repeatable: - open fresh image - make flaps appear (open a new Morphic project, or World menu -> flaps -> show shared tabs) - click Widgets - drag out an Object Catalog - click Multimedia Something is going on within the Event Theatre item's initialization. Seems to be that the "tutorial" Event Theatre Worldlet has a worldState instance variable which is nil, but it is being sent #displayWorld:submorphs: by PasteUpMorph>>#displayWorld. Interestingly, Worldlet's class comments specifically suggest instances don't have their own worldState. :D Other buttons in the Object Catalog did not result in a DNU for me. ...stack follows: UndefinedObject(Object)>>doesNotUnderstand: #displayWorld:submorphs: Worldlet(PasteUpMorph)>>displayWorld [] in Worldlet>>installFlaps OrderedCollection>>do: Worldlet>>installFlaps EventRecordingSpace>>addSuppliesFlap EventRecordingSpace>>initialize EventRecordingSpace(Morph)>>initializeToStandAlone EventRecordingSpace class(Morph class)>>newStandAlone PartsBin class>>thumbnailForQuad:color: [] in PartsBin>>listDirection:quadList:buttonClass: OrderedCollection>>do: PartsBin>>listDirection:quadList:buttonClass: PartsBin>>listDirection:quadList: ObjectsTool>>installQuads:fromButton: [] in ObjectsTool>>showCategory:fromButton: BlockClosure>>ensure: CursorWithMask(Cursor)>>showWhile: ObjectsTool>>showCategory:fromButton: SimpleButtonMorph>>doButtonAction SimpleButtonMorph>>mouseDown: SimpleButtonMorph(Morph)>>handleMouseDown: MouseButtonEvent>>sentTo: SimpleButtonMorph(Morph)>>handleEvent: MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: [] in MorphicEventDispatcher>>dispatchMouseDown:with: BlockClosure>>ensure: MorphicEventDispatcher>>dispatchMouseDown:with: MorphicEventDispatcher>>dispatchEvent:with: SimpleButtonMorph(Morph)>>processEvent:using: [] in MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: Array(SequenceableCollection)>>do: AlignmentMorph(Morph)>>submorphsDo: MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: [] in MorphicEventDispatcher>>dispatchMouseDown:with: BlockClosure>>ensure: MorphicEventDispatcher>>dispatchMouseDown:with: MorphicEventDispatcher>>dispatchEvent:with: AlignmentMorph(Morph)>>processEvent:using: [] in MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: Array(SequenceableCollection)>>do: ObjectsTool(Morph)>>submorphsDo: MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: [] in MorphicEventDispatcher>>dispatchMouseDown:with: BlockClosure>>ensure: MorphicEventDispatcher>>dispatchMouseDown:with: MorphicEventDispatcher>>dispatchEvent:with: ObjectsTool(Morph)>>processEvent:using: [] in MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: Array(SequenceableCollection)>>do: PasteUpMorph(Morph)>>submorphsDo: MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: [] in MorphicEventDispatcher>>dispatchMouseDown:with: BlockClosure>>ensure: MorphicEventDispatcher>>dispatchMouseDown:with: MorphicEventDispatcher>>dispatchEvent:with: PasteUpMorph(Morph)>>processEvent:using: [] in PasteUpMorph>>processEvent:using: BlockClosure>>ensure: PasteUpMorph>>processEvent:using: PasteUpMorph(Morph)>>processEvent: [] in [] in [] in HandMorph>>sendEvent:focus:clear: BlockClosure>>ensure: MouseButtonEvent(MorphicEvent)>>becomeActiveDuring: [] in [] in HandMorph>>sendEvent:focus:clear: BlockClosure>>ensure: HandMorph>>becomeActiveDuring: [] in HandMorph>>sendEvent:focus:clear: BlockClosure>>ensure: PasteUpMorph>>becomeActiveDuring: HandMorph>>sendEvent:focus:clear: HandMorph>>sendMouseEvent: HandMorph>>handleEvent: HandMorph>>processEvents [] in WorldState>>doOneCycleNowFor: Array(SequenceableCollection)>>do: WorldState>>handsDo: WorldState>>doOneCycleNowFor: WorldState>>doOneCycleFor: PasteUpMorph>>doOneCycle [] in MorphicProject>>spawnNewProcess [] in BlockClosure>>newProcess Thanks, Tim |
I think I'm getting a bit lost on this, but here are my notes from things
I looked at this morning: I found that opening the Sugar navigator bar ('Show Sugar navigator bar' preference) makes the failure go away, but only because that preference removes the global flaps. The failure can be be easily reproduced with "EventRecordingSpace open" with or without Sugar navigator bar open. The underlying issue seems to be that Worldlet new (called from EventRecordingSpace>>initialize) does not initialize the worldState instance variable, which is required for later flap initialization. Checking in an Etoys image, Worldlet new also answers an instance with nil worldState, so the solution is not to change that initialization. Unfortunately, evaluating EventRecordingSpace open in my Etoys image crashes my VM, presumably because I am running a 64-bit VM and some plugin for GSMCodec may not be updated for 64-bit. I'll need to either use SqueakJS, or build a 32-bit interpreter VM, in order to step through this further and see what is different in Squeak trunk versus Etoys development image. Dave On Sun, Feb 18, 2018 at 06:58:14AM -0500, Bob Arning wrote: > Except that #outermostWorldMorph for the Worldlet will return the World > where the <worldState> will be fine. > > > On 2/17/18 10:54 PM, David T. Lewis wrote: > >Thanks Bob, > > > >I see now the deprecated method, but I think something else is going wrong. > >The original logic from privateOuterDisplayWorld is still present in the > >most recent version of PasteUpMorph>>displayWorld. But worldState is nil > >when this is called, and that seems to be the cause of the error. > > > >I can't follow up on it tonight, but I think I'll try to dig back through > >some earlier versions of the trunk image and see if I can figure out where > >it started failing. > > > >Dave > > > > > >On Sat, Feb 17, 2018 at 09:36:25PM -0500, Bob Arning wrote: > >>PasteUpMorph used to say: > >> > >> > >>displayWorld > >> > >>?????? self outermostWorldMorph privateOuterDisplayWorld > >> > >> > >>which would work if you remove the "self deprecated" from > >>#privateOuterDisplayWorld > >> > >> > >>On 2/17/18 5:05 PM, David T. Lewis wrote: > >>>This is an interesting one. > >>> > >>>We have EventRecordingSpace class>>newStandalone that is trying to create > >>>a new > >>>instance "capable of standing by itself as a usable morph." > >>> > >>>This makes an instance with a contentArea that is a Worldlet. Presumabaly > >>>that > >>>Wordlet is supposed to be and "independent" thing too. But then we get to > >>>Worldlet(PasteUpMorph)>>displayWorld, in which the Worldlet tries to use > >>>its > >>>worldState to display submorphs, but it has no worldState, so boom. > >>> > >>>It may be necessary to look at an older image to figure out where this is > >>>going wrong. > >>> > >>>Dave > >>> > >>>p.s. Tim, thanks for posting this question :-) > >>> > >>> > >>>On Sat, Feb 17, 2018 at 11:27:53AM -0800, Tm Jhnsn wrote: > >>>>Hi all, > >>>> > >>>>I am really enjoying the latest versions of Squeak. > >>>> > >>>>In trying out 6.0-alpha with trunk updates, I found a DNU when doing > >>>>normal Morphic tasks. Sorry if this has already been reported. > >>>> > >>>>Should be repeatable: > >>>> > >>>>- open fresh image > >>>>- make flaps appear (open a new Morphic project, or World menu -> flaps > >>>>-> show shared tabs) > >>>>- click Widgets > >>>>- drag out an Object Catalog > >>>>- click Multimedia > >>>> > >>>>Something is going on within the Event Theatre item's initialization. > >>>> > >>>>Seems to be that the "tutorial" Event Theatre Worldlet has a worldState > >>>>instance variable which is nil, but it is being sent > >>>>#displayWorld:submorphs: by PasteUpMorph>>#displayWorld. Interestingly, > >>>>Worldlet's class comments specifically suggest instances don't have > >>>>their > >>>>own worldState. :D > >>>> > >>>>Other buttons in the Object Catalog did not result in a DNU for me. > >>>> > >>>>...stack follows: > >>>> > >>>>UndefinedObject(Object)>>doesNotUnderstand: #displayWorld:submorphs: > >>>>Worldlet(PasteUpMorph)>>displayWorld > >>>>[] in Worldlet>>installFlaps > >>>>OrderedCollection>>do: > >>>>Worldlet>>installFlaps > >>>>EventRecordingSpace>>addSuppliesFlap > >>>>EventRecordingSpace>>initialize > >>>>EventRecordingSpace(Morph)>>initializeToStandAlone > >>>>EventRecordingSpace class(Morph class)>>newStandAlone > >>>>PartsBin class>>thumbnailForQuad:color: > >>>>[] in PartsBin>>listDirection:quadList:buttonClass: > >>>>OrderedCollection>>do: > >>>>PartsBin>>listDirection:quadList:buttonClass: > >>>>PartsBin>>listDirection:quadList: > >>>>ObjectsTool>>installQuads:fromButton: > >>>>[] in ObjectsTool>>showCategory:fromButton: > >>>>BlockClosure>>ensure: > >>>>CursorWithMask(Cursor)>>showWhile: > >>>>ObjectsTool>>showCategory:fromButton: > >>>>SimpleButtonMorph>>doButtonAction > >>>>SimpleButtonMorph>>mouseDown: > >>>>SimpleButtonMorph(Morph)>>handleMouseDown: > >>>>MouseButtonEvent>>sentTo: > >>>>SimpleButtonMorph(Morph)>>handleEvent: > >>>>MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: > >>>>[] in MorphicEventDispatcher>>dispatchMouseDown:with: > >>>>BlockClosure>>ensure: > >>>>MorphicEventDispatcher>>dispatchMouseDown:with: > >>>>MorphicEventDispatcher>>dispatchEvent:with: > >>>>SimpleButtonMorph(Morph)>>processEvent:using: > >>>>[] in MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > >>>>Array(SequenceableCollection)>>do: > >>>>AlignmentMorph(Morph)>>submorphsDo: > >>>>MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > >>>>MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: > >>>>[] in MorphicEventDispatcher>>dispatchMouseDown:with: > >>>>BlockClosure>>ensure: > >>>>MorphicEventDispatcher>>dispatchMouseDown:with: > >>>>MorphicEventDispatcher>>dispatchEvent:with: > >>>>AlignmentMorph(Morph)>>processEvent:using: > >>>>[] in MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > >>>>Array(SequenceableCollection)>>do: > >>>>ObjectsTool(Morph)>>submorphsDo: > >>>>MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > >>>>MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: > >>>>[] in MorphicEventDispatcher>>dispatchMouseDown:with: > >>>>BlockClosure>>ensure: > >>>>MorphicEventDispatcher>>dispatchMouseDown:with: > >>>>MorphicEventDispatcher>>dispatchEvent:with: > >>>>ObjectsTool(Morph)>>processEvent:using: > >>>>[] in MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > >>>>Array(SequenceableCollection)>>do: > >>>>PasteUpMorph(Morph)>>submorphsDo: > >>>>MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > >>>>MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: > >>>>[] in MorphicEventDispatcher>>dispatchMouseDown:with: > >>>>BlockClosure>>ensure: > >>>>MorphicEventDispatcher>>dispatchMouseDown:with: > >>>>MorphicEventDispatcher>>dispatchEvent:with: > >>>>PasteUpMorph(Morph)>>processEvent:using: > >>>>[] in PasteUpMorph>>processEvent:using: > >>>>BlockClosure>>ensure: > >>>>PasteUpMorph>>processEvent:using: > >>>>PasteUpMorph(Morph)>>processEvent: > >>>>[] in [] in [] in HandMorph>>sendEvent:focus:clear: > >>>>BlockClosure>>ensure: > >>>>MouseButtonEvent(MorphicEvent)>>becomeActiveDuring: > >>>>[] in [] in HandMorph>>sendEvent:focus:clear: > >>>>BlockClosure>>ensure: > >>>>HandMorph>>becomeActiveDuring: > >>>>[] in HandMorph>>sendEvent:focus:clear: > >>>>BlockClosure>>ensure: > >>>>PasteUpMorph>>becomeActiveDuring: > >>>>HandMorph>>sendEvent:focus:clear: > >>>>HandMorph>>sendMouseEvent: > >>>>HandMorph>>handleEvent: > >>>>HandMorph>>processEvents > >>>>[] in WorldState>>doOneCycleNowFor: > >>>>Array(SequenceableCollection)>>do: > >>>>WorldState>>handsDo: > >>>>WorldState>>doOneCycleNowFor: > >>>>WorldState>>doOneCycleFor: > >>>>PasteUpMorph>>doOneCycle > >>>>[] in MorphicProject>>spawnNewProcess > >>>>[] in BlockClosure>>newProcess > >>>> > >>>> > >>>>Thanks, > >>>>Tim > >>>> > >>>> > > > > |
Ugh, I am blind, I see it now. Thanks Bob.
Dave On Sun, Feb 18, 2018 at 11:23:46AM -0500, David T. Lewis wrote: > I think I'm getting a bit lost on this, but here are my notes from things > I looked at this morning: > > I found that opening the Sugar navigator bar ('Show Sugar navigator bar' > preference) makes the failure go away, but only because that preference > removes the global flaps. > > The failure can be be easily reproduced with "EventRecordingSpace open" > with or without Sugar navigator bar open. > > The underlying issue seems to be that Worldlet new (called from > EventRecordingSpace>>initialize) does not initialize the worldState instance > variable, which is required for later flap initialization. > > Checking in an Etoys image, Worldlet new also answers an instance with > nil worldState, so the solution is not to change that initialization. > > Unfortunately, evaluating EventRecordingSpace open in my Etoys image > crashes my VM, presumably because I am running a 64-bit VM and some plugin > for GSMCodec may not be updated for 64-bit. I'll need to either use SqueakJS, > or build a 32-bit interpreter VM, in order to step through this further > and see what is different in Squeak trunk versus Etoys development image. > > Dave > > > On Sun, Feb 18, 2018 at 06:58:14AM -0500, Bob Arning wrote: > > Except that #outermostWorldMorph for the Worldlet will return the World > > where the <worldState> will be fine. > > > > > > On 2/17/18 10:54 PM, David T. Lewis wrote: > > >Thanks Bob, > > > > > >I see now the deprecated method, but I think something else is going wrong. > > >The original logic from privateOuterDisplayWorld is still present in the > > >most recent version of PasteUpMorph>>displayWorld. But worldState is nil > > >when this is called, and that seems to be the cause of the error. > > > > > >I can't follow up on it tonight, but I think I'll try to dig back through > > >some earlier versions of the trunk image and see if I can figure out where > > >it started failing. > > > > > >Dave > > > > > > > > >On Sat, Feb 17, 2018 at 09:36:25PM -0500, Bob Arning wrote: > > >>PasteUpMorph used to say: > > >> > > >> > > >>displayWorld > > >> > > >>?????? self outermostWorldMorph privateOuterDisplayWorld > > >> > > >> > > >>which would work if you remove the "self deprecated" from > > >>#privateOuterDisplayWorld > > >> > > >> > > >>On 2/17/18 5:05 PM, David T. Lewis wrote: > > >>>This is an interesting one. > > >>> > > >>>We have EventRecordingSpace class>>newStandalone that is trying to create > > >>>a new > > >>>instance "capable of standing by itself as a usable morph." > > >>> > > >>>This makes an instance with a contentArea that is a Worldlet. Presumabaly > > >>>that > > >>>Wordlet is supposed to be and "independent" thing too. But then we get to > > >>>Worldlet(PasteUpMorph)>>displayWorld, in which the Worldlet tries to use > > >>>its > > >>>worldState to display submorphs, but it has no worldState, so boom. > > >>> > > >>>It may be necessary to look at an older image to figure out where this is > > >>>going wrong. > > >>> > > >>>Dave > > >>> > > >>>p.s. Tim, thanks for posting this question :-) > > >>> > > >>> > > >>>On Sat, Feb 17, 2018 at 11:27:53AM -0800, Tm Jhnsn wrote: > > >>>>Hi all, > > >>>> > > >>>>I am really enjoying the latest versions of Squeak. > > >>>> > > >>>>In trying out 6.0-alpha with trunk updates, I found a DNU when doing > > >>>>normal Morphic tasks. Sorry if this has already been reported. > > >>>> > > >>>>Should be repeatable: > > >>>> > > >>>>- open fresh image > > >>>>- make flaps appear (open a new Morphic project, or World menu -> flaps > > >>>>-> show shared tabs) > > >>>>- click Widgets > > >>>>- drag out an Object Catalog > > >>>>- click Multimedia > > >>>> > > >>>>Something is going on within the Event Theatre item's initialization. > > >>>> > > >>>>Seems to be that the "tutorial" Event Theatre Worldlet has a worldState > > >>>>instance variable which is nil, but it is being sent > > >>>>#displayWorld:submorphs: by PasteUpMorph>>#displayWorld. Interestingly, > > >>>>Worldlet's class comments specifically suggest instances don't have > > >>>>their > > >>>>own worldState. :D > > >>>> > > >>>>Other buttons in the Object Catalog did not result in a DNU for me. > > >>>> > > >>>>...stack follows: > > >>>> > > >>>>UndefinedObject(Object)>>doesNotUnderstand: #displayWorld:submorphs: > > >>>>Worldlet(PasteUpMorph)>>displayWorld > > >>>>[] in Worldlet>>installFlaps > > >>>>OrderedCollection>>do: > > >>>>Worldlet>>installFlaps > > >>>>EventRecordingSpace>>addSuppliesFlap > > >>>>EventRecordingSpace>>initialize > > >>>>EventRecordingSpace(Morph)>>initializeToStandAlone > > >>>>EventRecordingSpace class(Morph class)>>newStandAlone > > >>>>PartsBin class>>thumbnailForQuad:color: > > >>>>[] in PartsBin>>listDirection:quadList:buttonClass: > > >>>>OrderedCollection>>do: > > >>>>PartsBin>>listDirection:quadList:buttonClass: > > >>>>PartsBin>>listDirection:quadList: > > >>>>ObjectsTool>>installQuads:fromButton: > > >>>>[] in ObjectsTool>>showCategory:fromButton: > > >>>>BlockClosure>>ensure: > > >>>>CursorWithMask(Cursor)>>showWhile: > > >>>>ObjectsTool>>showCategory:fromButton: > > >>>>SimpleButtonMorph>>doButtonAction > > >>>>SimpleButtonMorph>>mouseDown: > > >>>>SimpleButtonMorph(Morph)>>handleMouseDown: > > >>>>MouseButtonEvent>>sentTo: > > >>>>SimpleButtonMorph(Morph)>>handleEvent: > > >>>>MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: > > >>>>[] in MorphicEventDispatcher>>dispatchMouseDown:with: > > >>>>BlockClosure>>ensure: > > >>>>MorphicEventDispatcher>>dispatchMouseDown:with: > > >>>>MorphicEventDispatcher>>dispatchEvent:with: > > >>>>SimpleButtonMorph(Morph)>>processEvent:using: > > >>>>[] in MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > > >>>>Array(SequenceableCollection)>>do: > > >>>>AlignmentMorph(Morph)>>submorphsDo: > > >>>>MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > > >>>>MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: > > >>>>[] in MorphicEventDispatcher>>dispatchMouseDown:with: > > >>>>BlockClosure>>ensure: > > >>>>MorphicEventDispatcher>>dispatchMouseDown:with: > > >>>>MorphicEventDispatcher>>dispatchEvent:with: > > >>>>AlignmentMorph(Morph)>>processEvent:using: > > >>>>[] in MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > > >>>>Array(SequenceableCollection)>>do: > > >>>>ObjectsTool(Morph)>>submorphsDo: > > >>>>MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > > >>>>MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: > > >>>>[] in MorphicEventDispatcher>>dispatchMouseDown:with: > > >>>>BlockClosure>>ensure: > > >>>>MorphicEventDispatcher>>dispatchMouseDown:with: > > >>>>MorphicEventDispatcher>>dispatchEvent:with: > > >>>>ObjectsTool(Morph)>>processEvent:using: > > >>>>[] in MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > > >>>>Array(SequenceableCollection)>>do: > > >>>>PasteUpMorph(Morph)>>submorphsDo: > > >>>>MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > > >>>>MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: > > >>>>[] in MorphicEventDispatcher>>dispatchMouseDown:with: > > >>>>BlockClosure>>ensure: > > >>>>MorphicEventDispatcher>>dispatchMouseDown:with: > > >>>>MorphicEventDispatcher>>dispatchEvent:with: > > >>>>PasteUpMorph(Morph)>>processEvent:using: > > >>>>[] in PasteUpMorph>>processEvent:using: > > >>>>BlockClosure>>ensure: > > >>>>PasteUpMorph>>processEvent:using: > > >>>>PasteUpMorph(Morph)>>processEvent: > > >>>>[] in [] in [] in HandMorph>>sendEvent:focus:clear: > > >>>>BlockClosure>>ensure: > > >>>>MouseButtonEvent(MorphicEvent)>>becomeActiveDuring: > > >>>>[] in [] in HandMorph>>sendEvent:focus:clear: > > >>>>BlockClosure>>ensure: > > >>>>HandMorph>>becomeActiveDuring: > > >>>>[] in HandMorph>>sendEvent:focus:clear: > > >>>>BlockClosure>>ensure: > > >>>>PasteUpMorph>>becomeActiveDuring: > > >>>>HandMorph>>sendEvent:focus:clear: > > >>>>HandMorph>>sendMouseEvent: > > >>>>HandMorph>>handleEvent: > > >>>>HandMorph>>processEvents > > >>>>[] in WorldState>>doOneCycleNowFor: > > >>>>Array(SequenceableCollection)>>do: > > >>>>WorldState>>handsDo: > > >>>>WorldState>>doOneCycleNowFor: > > >>>>WorldState>>doOneCycleFor: > > >>>>PasteUpMorph>>doOneCycle > > >>>>[] in MorphicProject>>spawnNewProcess > > >>>>[] in BlockClosure>>newProcess > > >>>> > > >>>> > > >>>>Thanks, > > >>>>Tim > > >>>> > > >>>> > > > > > > > > > > |
Here is my understanding of what is wrong, and what needs to be done to
make it right. What is wrong: 1) PasteUpMorph>>displayWorld no longer recognizes the possibility of a world in a world (such as a Worldlet). This happened through some minor refactorings such that we no longer delegate to the outermostWordDisplayWorld, but instead assume that a PasteUpMorph is always going to be the outer world. 2) In addition to the above, I broke Morph>>outermostWorldMorph logic for the case of a morph that does not know its owner, such as a new Worldlet. This was done when I changed direct references to global World to be (for morphs) self world. Arguably the initialization code for "EventRecordingSpace open" could be (should be?) reorganized so that this would not be a problem, but it is probably easier to let Morph>>outermostWorldMorph default to "Project current world" if it cannot otherwise figure out its owner and world. I'm going to tinker around with this a bit before posting anything, but a reasonable set of changes to resolve this seems to be: 1) Un-revert privateOuterDisplay world, and give it the same logic as the current implementation of displayWorld: PasteUpMorph>>privateOuterDisplayWorld (self valueOfProperty: #shouldDisplayWorld ifAbsent: [true]) ifTrue: [worldState displayWorld: self submorphs: submorphs]. 2) Revert displayWorld back to its earlier implementation: PasteUpMorph>>displayWorld self outermostWorldMorph privateOuterDisplayWorld 3) Change outermostWorldMorph so that it defaults to the current project world if it is not otherwise able to find an outer world (but being careful not to break the MVC fallback, see #arNote): Morph>>outermostWorldMorph | outer | self world ifNotNil: [ :world |^world]. Project current world ifNotNil: [ :world | world isWorldMorph ifTrue: [^world]]. self flag: #arNote. "stuff below is really only for MVC" outer := self outermostMorphThat: [ :x | x isWorldMorph]. outer ifNotNil: [^outer]. self isWorldMorph ifTrue: [^self]. ^nil Dave On Sun, Feb 18, 2018 at 11:53:02AM -0500, David T. Lewis wrote: > Ugh, I am blind, I see it now. Thanks Bob. > > Dave > > > On Sun, Feb 18, 2018 at 11:23:46AM -0500, David T. Lewis wrote: > > I think I'm getting a bit lost on this, but here are my notes from things > > I looked at this morning: > > > > I found that opening the Sugar navigator bar ('Show Sugar navigator bar' > > preference) makes the failure go away, but only because that preference > > removes the global flaps. > > > > The failure can be be easily reproduced with "EventRecordingSpace open" > > with or without Sugar navigator bar open. > > > > The underlying issue seems to be that Worldlet new (called from > > EventRecordingSpace>>initialize) does not initialize the worldState instance > > variable, which is required for later flap initialization. > > > > Checking in an Etoys image, Worldlet new also answers an instance with > > nil worldState, so the solution is not to change that initialization. > > > > Unfortunately, evaluating EventRecordingSpace open in my Etoys image > > crashes my VM, presumably because I am running a 64-bit VM and some plugin > > for GSMCodec may not be updated for 64-bit. I'll need to either use SqueakJS, > > or build a 32-bit interpreter VM, in order to step through this further > > and see what is different in Squeak trunk versus Etoys development image. > > > > Dave > > > > > > On Sun, Feb 18, 2018 at 06:58:14AM -0500, Bob Arning wrote: > > > Except that #outermostWorldMorph for the Worldlet will return the World > > > where the <worldState> will be fine. > > > > > > > > > On 2/17/18 10:54 PM, David T. Lewis wrote: > > > >Thanks Bob, > > > > > > > >I see now the deprecated method, but I think something else is going wrong. > > > >The original logic from privateOuterDisplayWorld is still present in the > > > >most recent version of PasteUpMorph>>displayWorld. But worldState is nil > > > >when this is called, and that seems to be the cause of the error. > > > > > > > >I can't follow up on it tonight, but I think I'll try to dig back through > > > >some earlier versions of the trunk image and see if I can figure out where > > > >it started failing. > > > > > > > >Dave > > > > > > > > > > > >On Sat, Feb 17, 2018 at 09:36:25PM -0500, Bob Arning wrote: > > > >>PasteUpMorph used to say: > > > >> > > > >> > > > >>displayWorld > > > >> > > > >>?????? self outermostWorldMorph privateOuterDisplayWorld > > > >> > > > >> > > > >>which would work if you remove the "self deprecated" from > > > >>#privateOuterDisplayWorld > > > >> > > > >> > > > >>On 2/17/18 5:05 PM, David T. Lewis wrote: > > > >>>This is an interesting one. > > > >>> > > > >>>We have EventRecordingSpace class>>newStandalone that is trying to create > > > >>>a new > > > >>>instance "capable of standing by itself as a usable morph." > > > >>> > > > >>>This makes an instance with a contentArea that is a Worldlet. Presumabaly > > > >>>that > > > >>>Wordlet is supposed to be and "independent" thing too. But then we get to > > > >>>Worldlet(PasteUpMorph)>>displayWorld, in which the Worldlet tries to use > > > >>>its > > > >>>worldState to display submorphs, but it has no worldState, so boom. > > > >>> > > > >>>It may be necessary to look at an older image to figure out where this is > > > >>>going wrong. > > > >>> > > > >>>Dave > > > >>> > > > >>>p.s. Tim, thanks for posting this question :-) > > > >>> > > > >>> > > > >>>On Sat, Feb 17, 2018 at 11:27:53AM -0800, Tm Jhnsn wrote: > > > >>>>Hi all, > > > >>>> > > > >>>>I am really enjoying the latest versions of Squeak. > > > >>>> > > > >>>>In trying out 6.0-alpha with trunk updates, I found a DNU when doing > > > >>>>normal Morphic tasks. Sorry if this has already been reported. > > > >>>> > > > >>>>Should be repeatable: > > > >>>> > > > >>>>- open fresh image > > > >>>>- make flaps appear (open a new Morphic project, or World menu -> flaps > > > >>>>-> show shared tabs) > > > >>>>- click Widgets > > > >>>>- drag out an Object Catalog > > > >>>>- click Multimedia > > > >>>> > > > >>>>Something is going on within the Event Theatre item's initialization. > > > >>>> > > > >>>>Seems to be that the "tutorial" Event Theatre Worldlet has a worldState > > > >>>>instance variable which is nil, but it is being sent > > > >>>>#displayWorld:submorphs: by PasteUpMorph>>#displayWorld. Interestingly, > > > >>>>Worldlet's class comments specifically suggest instances don't have > > > >>>>their > > > >>>>own worldState. :D > > > >>>> > > > >>>>Other buttons in the Object Catalog did not result in a DNU for me. > > > >>>> > > > >>>>...stack follows: > > > >>>> > > > >>>>UndefinedObject(Object)>>doesNotUnderstand: #displayWorld:submorphs: > > > >>>>Worldlet(PasteUpMorph)>>displayWorld > > > >>>>[] in Worldlet>>installFlaps > > > >>>>OrderedCollection>>do: > > > >>>>Worldlet>>installFlaps > > > >>>>EventRecordingSpace>>addSuppliesFlap > > > >>>>EventRecordingSpace>>initialize > > > >>>>EventRecordingSpace(Morph)>>initializeToStandAlone > > > >>>>EventRecordingSpace class(Morph class)>>newStandAlone > > > >>>>PartsBin class>>thumbnailForQuad:color: > > > >>>>[] in PartsBin>>listDirection:quadList:buttonClass: > > > >>>>OrderedCollection>>do: > > > >>>>PartsBin>>listDirection:quadList:buttonClass: > > > >>>>PartsBin>>listDirection:quadList: > > > >>>>ObjectsTool>>installQuads:fromButton: > > > >>>>[] in ObjectsTool>>showCategory:fromButton: > > > >>>>BlockClosure>>ensure: > > > >>>>CursorWithMask(Cursor)>>showWhile: > > > >>>>ObjectsTool>>showCategory:fromButton: > > > >>>>SimpleButtonMorph>>doButtonAction > > > >>>>SimpleButtonMorph>>mouseDown: > > > >>>>SimpleButtonMorph(Morph)>>handleMouseDown: > > > >>>>MouseButtonEvent>>sentTo: > > > >>>>SimpleButtonMorph(Morph)>>handleEvent: > > > >>>>MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: > > > >>>>[] in MorphicEventDispatcher>>dispatchMouseDown:with: > > > >>>>BlockClosure>>ensure: > > > >>>>MorphicEventDispatcher>>dispatchMouseDown:with: > > > >>>>MorphicEventDispatcher>>dispatchEvent:with: > > > >>>>SimpleButtonMorph(Morph)>>processEvent:using: > > > >>>>[] in MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > > > >>>>Array(SequenceableCollection)>>do: > > > >>>>AlignmentMorph(Morph)>>submorphsDo: > > > >>>>MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > > > >>>>MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: > > > >>>>[] in MorphicEventDispatcher>>dispatchMouseDown:with: > > > >>>>BlockClosure>>ensure: > > > >>>>MorphicEventDispatcher>>dispatchMouseDown:with: > > > >>>>MorphicEventDispatcher>>dispatchEvent:with: > > > >>>>AlignmentMorph(Morph)>>processEvent:using: > > > >>>>[] in MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > > > >>>>Array(SequenceableCollection)>>do: > > > >>>>ObjectsTool(Morph)>>submorphsDo: > > > >>>>MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > > > >>>>MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: > > > >>>>[] in MorphicEventDispatcher>>dispatchMouseDown:with: > > > >>>>BlockClosure>>ensure: > > > >>>>MorphicEventDispatcher>>dispatchMouseDown:with: > > > >>>>MorphicEventDispatcher>>dispatchEvent:with: > > > >>>>ObjectsTool(Morph)>>processEvent:using: > > > >>>>[] in MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > > > >>>>Array(SequenceableCollection)>>do: > > > >>>>PasteUpMorph(Morph)>>submorphsDo: > > > >>>>MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > > > >>>>MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: > > > >>>>[] in MorphicEventDispatcher>>dispatchMouseDown:with: > > > >>>>BlockClosure>>ensure: > > > >>>>MorphicEventDispatcher>>dispatchMouseDown:with: > > > >>>>MorphicEventDispatcher>>dispatchEvent:with: > > > >>>>PasteUpMorph(Morph)>>processEvent:using: > > > >>>>[] in PasteUpMorph>>processEvent:using: > > > >>>>BlockClosure>>ensure: > > > >>>>PasteUpMorph>>processEvent:using: > > > >>>>PasteUpMorph(Morph)>>processEvent: > > > >>>>[] in [] in [] in HandMorph>>sendEvent:focus:clear: > > > >>>>BlockClosure>>ensure: > > > >>>>MouseButtonEvent(MorphicEvent)>>becomeActiveDuring: > > > >>>>[] in [] in HandMorph>>sendEvent:focus:clear: > > > >>>>BlockClosure>>ensure: > > > >>>>HandMorph>>becomeActiveDuring: > > > >>>>[] in HandMorph>>sendEvent:focus:clear: > > > >>>>BlockClosure>>ensure: > > > >>>>PasteUpMorph>>becomeActiveDuring: > > > >>>>HandMorph>>sendEvent:focus:clear: > > > >>>>HandMorph>>sendMouseEvent: > > > >>>>HandMorph>>handleEvent: > > > >>>>HandMorph>>processEvents > > > >>>>[] in WorldState>>doOneCycleNowFor: > > > >>>>Array(SequenceableCollection)>>do: > > > >>>>WorldState>>handsDo: > > > >>>>WorldState>>doOneCycleNowFor: > > > >>>>WorldState>>doOneCycleFor: > > > >>>>PasteUpMorph>>doOneCycle > > > >>>>[] in MorphicProject>>spawnNewProcess > > > >>>>[] in BlockClosure>>newProcess > > > >>>> > > > >>>> > > > >>>>Thanks, > > > >>>>Tim > > > >>>> > > > >>>> > > > > > > > > > > > > > > > > > |
To follow up on my summary below, issue #2 (Morph>>outermostWorldMorph)
goes away if EventRecordingSpace class>>open is reorganized a bit. So this is not a problem after all, and no change to outermostWorldMorph will be needed. Dave I think that the PasteUpMorph>>displayWorld change is all that will really be needed outside of Etoys. On Sun, Feb 18, 2018 at 02:12:34PM -0500, David T. Lewis wrote: > Here is my understanding of what is wrong, and what needs to be done to > make it right. > > What is wrong: > > 1) PasteUpMorph>>displayWorld no longer recognizes the possibility of a > world in a world (such as a Worldlet). This happened through some minor > refactorings such that we no longer delegate to the outermostWordDisplayWorld, > but instead assume that a PasteUpMorph is always going to be the outer world. > > 2) In addition to the above, I broke Morph>>outermostWorldMorph logic for > the case of a morph that does not know its owner, such as a new Worldlet. > This was done when I changed direct references to global World to be (for morphs) > self world. Arguably the initialization code for "EventRecordingSpace open" > could be (should be?) reorganized so that this would not be a problem, but > it is probably easier to let Morph>>outermostWorldMorph default to > "Project current world" if it cannot otherwise figure out its owner and world. > > I'm going to tinker around with this a bit before posting anything, but a > reasonable set of changes to resolve this seems to be: > > 1) Un-revert privateOuterDisplay world, and give it the same logic as the > current implementation of displayWorld: > > PasteUpMorph>>privateOuterDisplayWorld > (self valueOfProperty: #shouldDisplayWorld ifAbsent: [true]) > ifTrue: [worldState displayWorld: self submorphs: submorphs]. > > 2) Revert displayWorld back to its earlier implementation: > > PasteUpMorph>>displayWorld > self outermostWorldMorph privateOuterDisplayWorld > > 3) Change outermostWorldMorph so that it defaults to the current project world > if it is not otherwise able to find an outer world (but being careful not > to break the MVC fallback, see #arNote): > > Morph>>outermostWorldMorph > | outer | > self world ifNotNil: [ :world |^world]. > Project current world ifNotNil: [ :world | world isWorldMorph ifTrue: [^world]]. > self flag: #arNote. "stuff below is really only for MVC" > outer := self outermostMorphThat: [ :x | x isWorldMorph]. > outer ifNotNil: [^outer]. > self isWorldMorph ifTrue: [^self]. > ^nil > > Dave > > > On Sun, Feb 18, 2018 at 11:53:02AM -0500, David T. Lewis wrote: > > Ugh, I am blind, I see it now. Thanks Bob. > > > > Dave > > > > > > On Sun, Feb 18, 2018 at 11:23:46AM -0500, David T. Lewis wrote: > > > I think I'm getting a bit lost on this, but here are my notes from things > > > I looked at this morning: > > > > > > I found that opening the Sugar navigator bar ('Show Sugar navigator bar' > > > preference) makes the failure go away, but only because that preference > > > removes the global flaps. > > > > > > The failure can be be easily reproduced with "EventRecordingSpace open" > > > with or without Sugar navigator bar open. > > > > > > The underlying issue seems to be that Worldlet new (called from > > > EventRecordingSpace>>initialize) does not initialize the worldState instance > > > variable, which is required for later flap initialization. > > > > > > Checking in an Etoys image, Worldlet new also answers an instance with > > > nil worldState, so the solution is not to change that initialization. > > > > > > Unfortunately, evaluating EventRecordingSpace open in my Etoys image > > > crashes my VM, presumably because I am running a 64-bit VM and some plugin > > > for GSMCodec may not be updated for 64-bit. I'll need to either use SqueakJS, > > > or build a 32-bit interpreter VM, in order to step through this further > > > and see what is different in Squeak trunk versus Etoys development image. > > > > > > Dave > > > > > > > > > On Sun, Feb 18, 2018 at 06:58:14AM -0500, Bob Arning wrote: > > > > Except that #outermostWorldMorph for the Worldlet will return the World > > > > where the <worldState> will be fine. > > > > > > > > > > > > On 2/17/18 10:54 PM, David T. Lewis wrote: > > > > >Thanks Bob, > > > > > > > > > >I see now the deprecated method, but I think something else is going wrong. > > > > >The original logic from privateOuterDisplayWorld is still present in the > > > > >most recent version of PasteUpMorph>>displayWorld. But worldState is nil > > > > >when this is called, and that seems to be the cause of the error. > > > > > > > > > >I can't follow up on it tonight, but I think I'll try to dig back through > > > > >some earlier versions of the trunk image and see if I can figure out where > > > > >it started failing. > > > > > > > > > >Dave > > > > > > > > > > > > > > >On Sat, Feb 17, 2018 at 09:36:25PM -0500, Bob Arning wrote: > > > > >>PasteUpMorph used to say: > > > > >> > > > > >> > > > > >>displayWorld > > > > >> > > > > >>?????? self outermostWorldMorph privateOuterDisplayWorld > > > > >> > > > > >> > > > > >>which would work if you remove the "self deprecated" from > > > > >>#privateOuterDisplayWorld > > > > >> > > > > >> > > > > >>On 2/17/18 5:05 PM, David T. Lewis wrote: > > > > >>>This is an interesting one. > > > > >>> > > > > >>>We have EventRecordingSpace class>>newStandalone that is trying to create > > > > >>>a new > > > > >>>instance "capable of standing by itself as a usable morph." > > > > >>> > > > > >>>This makes an instance with a contentArea that is a Worldlet. Presumabaly > > > > >>>that > > > > >>>Wordlet is supposed to be and "independent" thing too. But then we get to > > > > >>>Worldlet(PasteUpMorph)>>displayWorld, in which the Worldlet tries to use > > > > >>>its > > > > >>>worldState to display submorphs, but it has no worldState, so boom. > > > > >>> > > > > >>>It may be necessary to look at an older image to figure out where this is > > > > >>>going wrong. > > > > >>> > > > > >>>Dave > > > > >>> > > > > >>>p.s. Tim, thanks for posting this question :-) > > > > >>> > > > > >>> > > > > >>>On Sat, Feb 17, 2018 at 11:27:53AM -0800, Tm Jhnsn wrote: > > > > >>>>Hi all, > > > > >>>> > > > > >>>>I am really enjoying the latest versions of Squeak. > > > > >>>> > > > > >>>>In trying out 6.0-alpha with trunk updates, I found a DNU when doing > > > > >>>>normal Morphic tasks. Sorry if this has already been reported. > > > > >>>> > > > > >>>>Should be repeatable: > > > > >>>> > > > > >>>>- open fresh image > > > > >>>>- make flaps appear (open a new Morphic project, or World menu -> flaps > > > > >>>>-> show shared tabs) > > > > >>>>- click Widgets > > > > >>>>- drag out an Object Catalog > > > > >>>>- click Multimedia > > > > >>>> > > > > >>>>Something is going on within the Event Theatre item's initialization. > > > > >>>> > > > > >>>>Seems to be that the "tutorial" Event Theatre Worldlet has a worldState > > > > >>>>instance variable which is nil, but it is being sent > > > > >>>>#displayWorld:submorphs: by PasteUpMorph>>#displayWorld. Interestingly, > > > > >>>>Worldlet's class comments specifically suggest instances don't have > > > > >>>>their > > > > >>>>own worldState. :D > > > > >>>> > > > > >>>>Other buttons in the Object Catalog did not result in a DNU for me. > > > > >>>> > > > > >>>>...stack follows: > > > > >>>> > > > > >>>>UndefinedObject(Object)>>doesNotUnderstand: #displayWorld:submorphs: > > > > >>>>Worldlet(PasteUpMorph)>>displayWorld > > > > >>>>[] in Worldlet>>installFlaps > > > > >>>>OrderedCollection>>do: > > > > >>>>Worldlet>>installFlaps > > > > >>>>EventRecordingSpace>>addSuppliesFlap > > > > >>>>EventRecordingSpace>>initialize > > > > >>>>EventRecordingSpace(Morph)>>initializeToStandAlone > > > > >>>>EventRecordingSpace class(Morph class)>>newStandAlone > > > > >>>>PartsBin class>>thumbnailForQuad:color: > > > > >>>>[] in PartsBin>>listDirection:quadList:buttonClass: > > > > >>>>OrderedCollection>>do: > > > > >>>>PartsBin>>listDirection:quadList:buttonClass: > > > > >>>>PartsBin>>listDirection:quadList: > > > > >>>>ObjectsTool>>installQuads:fromButton: > > > > >>>>[] in ObjectsTool>>showCategory:fromButton: > > > > >>>>BlockClosure>>ensure: > > > > >>>>CursorWithMask(Cursor)>>showWhile: > > > > >>>>ObjectsTool>>showCategory:fromButton: > > > > >>>>SimpleButtonMorph>>doButtonAction > > > > >>>>SimpleButtonMorph>>mouseDown: > > > > >>>>SimpleButtonMorph(Morph)>>handleMouseDown: > > > > >>>>MouseButtonEvent>>sentTo: > > > > >>>>SimpleButtonMorph(Morph)>>handleEvent: > > > > >>>>MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: > > > > >>>>[] in MorphicEventDispatcher>>dispatchMouseDown:with: > > > > >>>>BlockClosure>>ensure: > > > > >>>>MorphicEventDispatcher>>dispatchMouseDown:with: > > > > >>>>MorphicEventDispatcher>>dispatchEvent:with: > > > > >>>>SimpleButtonMorph(Morph)>>processEvent:using: > > > > >>>>[] in MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > > > > >>>>Array(SequenceableCollection)>>do: > > > > >>>>AlignmentMorph(Morph)>>submorphsDo: > > > > >>>>MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > > > > >>>>MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: > > > > >>>>[] in MorphicEventDispatcher>>dispatchMouseDown:with: > > > > >>>>BlockClosure>>ensure: > > > > >>>>MorphicEventDispatcher>>dispatchMouseDown:with: > > > > >>>>MorphicEventDispatcher>>dispatchEvent:with: > > > > >>>>AlignmentMorph(Morph)>>processEvent:using: > > > > >>>>[] in MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > > > > >>>>Array(SequenceableCollection)>>do: > > > > >>>>ObjectsTool(Morph)>>submorphsDo: > > > > >>>>MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > > > > >>>>MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: > > > > >>>>[] in MorphicEventDispatcher>>dispatchMouseDown:with: > > > > >>>>BlockClosure>>ensure: > > > > >>>>MorphicEventDispatcher>>dispatchMouseDown:with: > > > > >>>>MorphicEventDispatcher>>dispatchEvent:with: > > > > >>>>ObjectsTool(Morph)>>processEvent:using: > > > > >>>>[] in MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > > > > >>>>Array(SequenceableCollection)>>do: > > > > >>>>PasteUpMorph(Morph)>>submorphsDo: > > > > >>>>MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > > > > >>>>MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: > > > > >>>>[] in MorphicEventDispatcher>>dispatchMouseDown:with: > > > > >>>>BlockClosure>>ensure: > > > > >>>>MorphicEventDispatcher>>dispatchMouseDown:with: > > > > >>>>MorphicEventDispatcher>>dispatchEvent:with: > > > > >>>>PasteUpMorph(Morph)>>processEvent:using: > > > > >>>>[] in PasteUpMorph>>processEvent:using: > > > > >>>>BlockClosure>>ensure: > > > > >>>>PasteUpMorph>>processEvent:using: > > > > >>>>PasteUpMorph(Morph)>>processEvent: > > > > >>>>[] in [] in [] in HandMorph>>sendEvent:focus:clear: > > > > >>>>BlockClosure>>ensure: > > > > >>>>MouseButtonEvent(MorphicEvent)>>becomeActiveDuring: > > > > >>>>[] in [] in HandMorph>>sendEvent:focus:clear: > > > > >>>>BlockClosure>>ensure: > > > > >>>>HandMorph>>becomeActiveDuring: > > > > >>>>[] in HandMorph>>sendEvent:focus:clear: > > > > >>>>BlockClosure>>ensure: > > > > >>>>PasteUpMorph>>becomeActiveDuring: > > > > >>>>HandMorph>>sendEvent:focus:clear: > > > > >>>>HandMorph>>sendMouseEvent: > > > > >>>>HandMorph>>handleEvent: > > > > >>>>HandMorph>>processEvents > > > > >>>>[] in WorldState>>doOneCycleNowFor: > > > > >>>>Array(SequenceableCollection)>>do: > > > > >>>>WorldState>>handsDo: > > > > >>>>WorldState>>doOneCycleNowFor: > > > > >>>>WorldState>>doOneCycleFor: > > > > >>>>PasteUpMorph>>doOneCycle > > > > >>>>[] in MorphicProject>>spawnNewProcess > > > > >>>>[] in BlockClosure>>newProcess > > > > >>>> > > > > >>>> > > > > >>>>Thanks, > > > > >>>>Tim > > > > >>>> > > > > >>>> > > > > > > > > > > > > > > > > > > > > > > > > > |
I put fixes into Etoys in trunk, and Morphic-dtl.1396 in the inbox. I'll
move that to trunk also if there are no problems with it. Next issue to look at: The Navigator and Supplies tabs in a EventRecordingSpace are not working. Do "EventRecordingSpace open", then click on one of the tabs, result is a MessageNotUnderstood: Rectangle>>innerBounds error. Dave On Sun, Feb 18, 2018 at 04:22:59PM -0500, David T. Lewis wrote: > To follow up on my summary below, issue #2 (Morph>>outermostWorldMorph) > goes away if EventRecordingSpace class>>open is reorganized a bit. So > this is not a problem after all, and no change to outermostWorldMorph > will be needed. > > Dave > > I think that the PasteUpMorph>>displayWorld change is all that will really be needed outside of Etoys. > > On Sun, Feb 18, 2018 at 02:12:34PM -0500, David T. Lewis wrote: > > Here is my understanding of what is wrong, and what needs to be done to > > make it right. > > > > What is wrong: > > > > 1) PasteUpMorph>>displayWorld no longer recognizes the possibility of a > > world in a world (such as a Worldlet). This happened through some minor > > refactorings such that we no longer delegate to the outermostWordDisplayWorld, > > but instead assume that a PasteUpMorph is always going to be the outer world. > > > > 2) In addition to the above, I broke Morph>>outermostWorldMorph logic for > > the case of a morph that does not know its owner, such as a new Worldlet. > > This was done when I changed direct references to global World to be (for morphs) > > self world. Arguably the initialization code for "EventRecordingSpace open" > > could be (should be?) reorganized so that this would not be a problem, but > > it is probably easier to let Morph>>outermostWorldMorph default to > > "Project current world" if it cannot otherwise figure out its owner and world. > > > > I'm going to tinker around with this a bit before posting anything, but a > > reasonable set of changes to resolve this seems to be: > > > > 1) Un-revert privateOuterDisplay world, and give it the same logic as the > > current implementation of displayWorld: > > > > PasteUpMorph>>privateOuterDisplayWorld > > (self valueOfProperty: #shouldDisplayWorld ifAbsent: [true]) > > ifTrue: [worldState displayWorld: self submorphs: submorphs]. > > > > 2) Revert displayWorld back to its earlier implementation: > > > > PasteUpMorph>>displayWorld > > self outermostWorldMorph privateOuterDisplayWorld > > > > 3) Change outermostWorldMorph so that it defaults to the current project world > > if it is not otherwise able to find an outer world (but being careful not > > to break the MVC fallback, see #arNote): > > > > Morph>>outermostWorldMorph > > | outer | > > self world ifNotNil: [ :world |^world]. > > Project current world ifNotNil: [ :world | world isWorldMorph ifTrue: [^world]]. > > self flag: #arNote. "stuff below is really only for MVC" > > outer := self outermostMorphThat: [ :x | x isWorldMorph]. > > outer ifNotNil: [^outer]. > > self isWorldMorph ifTrue: [^self]. > > ^nil > > > > Dave > > > > > > On Sun, Feb 18, 2018 at 11:53:02AM -0500, David T. Lewis wrote: > > > Ugh, I am blind, I see it now. Thanks Bob. > > > > > > Dave > > > > > > > > > On Sun, Feb 18, 2018 at 11:23:46AM -0500, David T. Lewis wrote: > > > > I think I'm getting a bit lost on this, but here are my notes from things > > > > I looked at this morning: > > > > > > > > I found that opening the Sugar navigator bar ('Show Sugar navigator bar' > > > > preference) makes the failure go away, but only because that preference > > > > removes the global flaps. > > > > > > > > The failure can be be easily reproduced with "EventRecordingSpace open" > > > > with or without Sugar navigator bar open. > > > > > > > > The underlying issue seems to be that Worldlet new (called from > > > > EventRecordingSpace>>initialize) does not initialize the worldState instance > > > > variable, which is required for later flap initialization. > > > > > > > > Checking in an Etoys image, Worldlet new also answers an instance with > > > > nil worldState, so the solution is not to change that initialization. > > > > > > > > Unfortunately, evaluating EventRecordingSpace open in my Etoys image > > > > crashes my VM, presumably because I am running a 64-bit VM and some plugin > > > > for GSMCodec may not be updated for 64-bit. I'll need to either use SqueakJS, > > > > or build a 32-bit interpreter VM, in order to step through this further > > > > and see what is different in Squeak trunk versus Etoys development image. > > > > > > > > Dave > > > > > > > > > > > > On Sun, Feb 18, 2018 at 06:58:14AM -0500, Bob Arning wrote: > > > > > Except that #outermostWorldMorph for the Worldlet will return the World > > > > > where the <worldState> will be fine. > > > > > > > > > > > > > > > On 2/17/18 10:54 PM, David T. Lewis wrote: > > > > > >Thanks Bob, > > > > > > > > > > > >I see now the deprecated method, but I think something else is going wrong. > > > > > >The original logic from privateOuterDisplayWorld is still present in the > > > > > >most recent version of PasteUpMorph>>displayWorld. But worldState is nil > > > > > >when this is called, and that seems to be the cause of the error. > > > > > > > > > > > >I can't follow up on it tonight, but I think I'll try to dig back through > > > > > >some earlier versions of the trunk image and see if I can figure out where > > > > > >it started failing. > > > > > > > > > > > >Dave > > > > > > > > > > > > > > > > > >On Sat, Feb 17, 2018 at 09:36:25PM -0500, Bob Arning wrote: > > > > > >>PasteUpMorph used to say: > > > > > >> > > > > > >> > > > > > >>displayWorld > > > > > >> > > > > > >>?????? self outermostWorldMorph privateOuterDisplayWorld > > > > > >> > > > > > >> > > > > > >>which would work if you remove the "self deprecated" from > > > > > >>#privateOuterDisplayWorld > > > > > >> > > > > > >> > > > > > >>On 2/17/18 5:05 PM, David T. Lewis wrote: > > > > > >>>This is an interesting one. > > > > > >>> > > > > > >>>We have EventRecordingSpace class>>newStandalone that is trying to create > > > > > >>>a new > > > > > >>>instance "capable of standing by itself as a usable morph." > > > > > >>> > > > > > >>>This makes an instance with a contentArea that is a Worldlet. Presumabaly > > > > > >>>that > > > > > >>>Wordlet is supposed to be and "independent" thing too. But then we get to > > > > > >>>Worldlet(PasteUpMorph)>>displayWorld, in which the Worldlet tries to use > > > > > >>>its > > > > > >>>worldState to display submorphs, but it has no worldState, so boom. > > > > > >>> > > > > > >>>It may be necessary to look at an older image to figure out where this is > > > > > >>>going wrong. > > > > > >>> > > > > > >>>Dave > > > > > >>> > > > > > >>>p.s. Tim, thanks for posting this question :-) > > > > > >>> > > > > > >>> > > > > > >>>On Sat, Feb 17, 2018 at 11:27:53AM -0800, Tm Jhnsn wrote: > > > > > >>>>Hi all, > > > > > >>>> > > > > > >>>>I am really enjoying the latest versions of Squeak. > > > > > >>>> > > > > > >>>>In trying out 6.0-alpha with trunk updates, I found a DNU when doing > > > > > >>>>normal Morphic tasks. Sorry if this has already been reported. > > > > > >>>> > > > > > >>>>Should be repeatable: > > > > > >>>> > > > > > >>>>- open fresh image > > > > > >>>>- make flaps appear (open a new Morphic project, or World menu -> flaps > > > > > >>>>-> show shared tabs) > > > > > >>>>- click Widgets > > > > > >>>>- drag out an Object Catalog > > > > > >>>>- click Multimedia > > > > > >>>> > > > > > >>>>Something is going on within the Event Theatre item's initialization. > > > > > >>>> > > > > > >>>>Seems to be that the "tutorial" Event Theatre Worldlet has a worldState > > > > > >>>>instance variable which is nil, but it is being sent > > > > > >>>>#displayWorld:submorphs: by PasteUpMorph>>#displayWorld. Interestingly, > > > > > >>>>Worldlet's class comments specifically suggest instances don't have > > > > > >>>>their > > > > > >>>>own worldState. :D > > > > > >>>> > > > > > >>>>Other buttons in the Object Catalog did not result in a DNU for me. > > > > > >>>> > > > > > >>>>...stack follows: > > > > > >>>> > > > > > >>>>UndefinedObject(Object)>>doesNotUnderstand: #displayWorld:submorphs: > > > > > >>>>Worldlet(PasteUpMorph)>>displayWorld > > > > > >>>>[] in Worldlet>>installFlaps > > > > > >>>>OrderedCollection>>do: > > > > > >>>>Worldlet>>installFlaps > > > > > >>>>EventRecordingSpace>>addSuppliesFlap > > > > > >>>>EventRecordingSpace>>initialize > > > > > >>>>EventRecordingSpace(Morph)>>initializeToStandAlone > > > > > >>>>EventRecordingSpace class(Morph class)>>newStandAlone > > > > > >>>>PartsBin class>>thumbnailForQuad:color: > > > > > >>>>[] in PartsBin>>listDirection:quadList:buttonClass: > > > > > >>>>OrderedCollection>>do: > > > > > >>>>PartsBin>>listDirection:quadList:buttonClass: > > > > > >>>>PartsBin>>listDirection:quadList: > > > > > >>>>ObjectsTool>>installQuads:fromButton: > > > > > >>>>[] in ObjectsTool>>showCategory:fromButton: > > > > > >>>>BlockClosure>>ensure: > > > > > >>>>CursorWithMask(Cursor)>>showWhile: > > > > > >>>>ObjectsTool>>showCategory:fromButton: > > > > > >>>>SimpleButtonMorph>>doButtonAction > > > > > >>>>SimpleButtonMorph>>mouseDown: > > > > > >>>>SimpleButtonMorph(Morph)>>handleMouseDown: > > > > > >>>>MouseButtonEvent>>sentTo: > > > > > >>>>SimpleButtonMorph(Morph)>>handleEvent: > > > > > >>>>MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: > > > > > >>>>[] in MorphicEventDispatcher>>dispatchMouseDown:with: > > > > > >>>>BlockClosure>>ensure: > > > > > >>>>MorphicEventDispatcher>>dispatchMouseDown:with: > > > > > >>>>MorphicEventDispatcher>>dispatchEvent:with: > > > > > >>>>SimpleButtonMorph(Morph)>>processEvent:using: > > > > > >>>>[] in MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > > > > > >>>>Array(SequenceableCollection)>>do: > > > > > >>>>AlignmentMorph(Morph)>>submorphsDo: > > > > > >>>>MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > > > > > >>>>MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: > > > > > >>>>[] in MorphicEventDispatcher>>dispatchMouseDown:with: > > > > > >>>>BlockClosure>>ensure: > > > > > >>>>MorphicEventDispatcher>>dispatchMouseDown:with: > > > > > >>>>MorphicEventDispatcher>>dispatchEvent:with: > > > > > >>>>AlignmentMorph(Morph)>>processEvent:using: > > > > > >>>>[] in MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > > > > > >>>>Array(SequenceableCollection)>>do: > > > > > >>>>ObjectsTool(Morph)>>submorphsDo: > > > > > >>>>MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > > > > > >>>>MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: > > > > > >>>>[] in MorphicEventDispatcher>>dispatchMouseDown:with: > > > > > >>>>BlockClosure>>ensure: > > > > > >>>>MorphicEventDispatcher>>dispatchMouseDown:with: > > > > > >>>>MorphicEventDispatcher>>dispatchEvent:with: > > > > > >>>>ObjectsTool(Morph)>>processEvent:using: > > > > > >>>>[] in MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > > > > > >>>>Array(SequenceableCollection)>>do: > > > > > >>>>PasteUpMorph(Morph)>>submorphsDo: > > > > > >>>>MorphicEventDispatcher>>dispatchEvent:toSubmorphsOf: > > > > > >>>>MorphicEventDispatcher>>dispatchEvent:withHandler:withMorph: > > > > > >>>>[] in MorphicEventDispatcher>>dispatchMouseDown:with: > > > > > >>>>BlockClosure>>ensure: > > > > > >>>>MorphicEventDispatcher>>dispatchMouseDown:with: > > > > > >>>>MorphicEventDispatcher>>dispatchEvent:with: > > > > > >>>>PasteUpMorph(Morph)>>processEvent:using: > > > > > >>>>[] in PasteUpMorph>>processEvent:using: > > > > > >>>>BlockClosure>>ensure: > > > > > >>>>PasteUpMorph>>processEvent:using: > > > > > >>>>PasteUpMorph(Morph)>>processEvent: > > > > > >>>>[] in [] in [] in HandMorph>>sendEvent:focus:clear: > > > > > >>>>BlockClosure>>ensure: > > > > > >>>>MouseButtonEvent(MorphicEvent)>>becomeActiveDuring: > > > > > >>>>[] in [] in HandMorph>>sendEvent:focus:clear: > > > > > >>>>BlockClosure>>ensure: > > > > > >>>>HandMorph>>becomeActiveDuring: > > > > > >>>>[] in HandMorph>>sendEvent:focus:clear: > > > > > >>>>BlockClosure>>ensure: > > > > > >>>>PasteUpMorph>>becomeActiveDuring: > > > > > >>>>HandMorph>>sendEvent:focus:clear: > > > > > >>>>HandMorph>>sendMouseEvent: > > > > > >>>>HandMorph>>handleEvent: > > > > > >>>>HandMorph>>processEvents > > > > > >>>>[] in WorldState>>doOneCycleNowFor: > > > > > >>>>Array(SequenceableCollection)>>do: > > > > > >>>>WorldState>>handsDo: > > > > > >>>>WorldState>>doOneCycleNowFor: > > > > > >>>>WorldState>>doOneCycleFor: > > > > > >>>>PasteUpMorph>>doOneCycle > > > > > >>>>[] in MorphicProject>>spawnNewProcess > > > > > >>>>[] in BlockClosure>>newProcess > > > > > >>>> > > > > > >>>> > > > > > >>>>Thanks, > > > > > >>>>Tim > > > > > >>>> > > > > > >>>> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > |
FlapTab has this... positionObject: anObject atEdgeOf: container while InteriorFlapTab has this... positionObject: anObject atEdgeOf: container which assumes <container> responds to #innerBounds and not
simply #left, #right, etc. Since some users are sending a
Rectangle rather than a Morph, you could add this to Rectangle... innerBounds and the flaps are working again. On 2/18/18 5:03 PM, David T. Lewis
wrote:
I put fixes into Etoys in trunk, and Morphic-dtl.1396 in the inbox. I'll move that to trunk also if there are no problems with it. Next issue to look at: The Navigator and Supplies tabs in a EventRecordingSpace are not working. Do "EventRecordingSpace open", then click on one of the tabs, result is a MessageNotUnderstood: Rectangle>>innerBounds error. |
Well that seems simple enough. I added Rectangle>>innerBounds to the inbox
(in Morphic-dtl.1397) and I'll move that to trunk also if no objections come up in a day or so. The flaps in an EventRecordingSpace are working now. Somehow I had expected this problem to be a symptom of some horribly broken refactorings, but maybe not :-) Dave On Sun, Feb 18, 2018 at 06:35:40PM -0500, Bob Arning wrote: > FlapTab has this... > > positionObject: anObject atEdgeOf: container > ?????????????? "anObject could be myself or my referent" > > ?????????????? edgeToAdhereTo == #left ifTrue: [^ anObject left: container > left]. > ?????????????? edgeToAdhereTo == #right ifTrue: [^ anObject right: > container right]. > ?????????????? edgeToAdhereTo == #top ifTrue: [^ anObject top: container > top]. > ?????????????? edgeToAdhereTo == #bottom ifTrue: [^ anObject bottom: > container bottom] > > while InteriorFlapTab has this... > > positionObject: anObject atEdgeOf: container > ?????????????? "anObject could be myself (the flap tab) or my referent (the > flap body)." > > ?????? anObject == self ifTrue: [^ super positionObject: anObject > atEdgeOf: container].?? "The tab itself" > > ?????? (#(top left) includes: edgeToAdhereTo) ifTrue: > ?????? ?????? [^ anObject topLeft: container innerBounds topLeft]. > > ?????? (edgeToAdhereTo = #bottom) ifTrue: > ?????? ?????? [^ anObject bottomLeft: container innerBounds bottomLeft]. > > ?????? anObject topRight: container innerBounds topRight > > which assumes <container> responds to #innerBounds and not simply #left, > #right, etc. Since some users are sending a Rectangle rather than a > Morph, you could add this to Rectangle... > > innerBounds > > ?????? ^self > > and the flaps are working again. > > > On 2/18/18 5:03 PM, David T. Lewis wrote: > >I put fixes into Etoys in trunk, and Morphic-dtl.1396 in the inbox. I'll > >move that to trunk also if there are no problems with it. > > > >Next issue to look at: The Navigator and Supplies tabs in a > >EventRecordingSpace > >are not working. Do "EventRecordingSpace open", then click on one of the > >tabs, result is a MessageNotUnderstood: Rectangle>>innerBounds error. > > |
Free forum by Nabble | Edit this page |