Event Theatre in Object Catalog sparks DNU in 6.0-trunk

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
12 messages Options
Reply | Threaded
Open this post in threaded view
|

Event Theatre in Object Catalog sparks DNU in 6.0-trunk

Tim Johnson-2
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


Reply | Threaded
Open this post in threaded view
|

Re: Event Theatre in Object Catalog sparks DNU in 6.0-trunk

David T. Lewis
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
>
>

Reply | Threaded
Open this post in threaded view
|

Re: Event Theatre in Object Catalog sparks DNU in 6.0-trunk

Bob Arning-2

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



    



Reply | Threaded
Open this post in threaded view
|

Re: Event Theatre in Object Catalog sparks DNU in 6.0-trunk

David T. Lewis
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
> >>
> >>
>

>


Reply | Threaded
Open this post in threaded view
|

Re: Event Theatre in Object Catalog sparks DNU in 6.0-trunk

Bob Arning-2

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



      

      

      




Reply | Threaded
Open this post in threaded view
|

Re: Event Theatre in Object Catalog sparks DNU in 6.0-trunk

David T. Lewis
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
> >>>>
> >>>>
> >
>

>


Reply | Threaded
Open this post in threaded view
|

Re: Event Theatre in Object Catalog sparks DNU in 6.0-trunk

David T. Lewis
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
> > >>>>
> > >>>>
> > >
> >
>
> >
>
>

Reply | Threaded
Open this post in threaded view
|

Re: Event Theatre in Object Catalog sparks DNU in 6.0-trunk

David T. Lewis
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
> > > >>>>
> > > >>>>
> > > >
> > >
> >
> > >
> >
> >
>

Reply | Threaded
Open this post in threaded view
|

Re: Event Theatre in Object Catalog sparks DNU in 6.0-trunk

David T. Lewis
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
> > > > >>>>
> > > > >>>>
> > > > >
> > > >
> > >
> > > >
> > >
> > >
> >
>

Reply | Threaded
Open this post in threaded view
|

Re: Event Theatre in Object Catalog sparks DNU in 6.0-trunk

David T. Lewis
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
> > > > > >>>>
> > > > > >>>>
> > > > > >
> > > > >
> > > >
> > > > >
> > > >
> > > >
> > >
> >
>

Reply | Threaded
Open this post in threaded view
|

Re: Event Theatre in Object Catalog sparks DNU in 6.0-trunk

Bob Arning-2

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.



Reply | Threaded
Open this post in threaded view
|

Re: Event Theatre in Object Catalog sparks DNU in 6.0-trunk

David T. Lewis
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.
>

>