[squeak-dev] PasteUpMorph>>#removeModalWindow has been deprecated --- what do we need to do?

H. Hirzel hannes.hirzel at gmail.com
Mon Oct 9 18:09:46 UTC 2017


On 10/9/17, Marcel Taeumel <marcel.taeumel at hpi.de> wrote:
> Hi Hannes,
>
> it is likely that you have to clean-up some event maps in your image (resp.
> via Monticello post-load scripts for all other images).
>
> Take a look at Object >> #actionMap. And in this case "PasteUpMorph
> allInstances collect: [:ea | ea actionMap]". In my image, it is the current
> world that has one action for "aboutToLeaveWorld" to #removeModalWindow.
>
> It's not in the code, it's in the image state.
>
> Best,
> Marcel


Thank you, Marcel,  for the explanation about the action map.
Yes, this is the source of the error.

In the loaded Etoys project I have a PasteUpMorph object as the desktop.

    Project current world a PasteUpMorph<world>(2880695) [world]


And this desktop object has an actionMap

    Project current world actionMap printString

'an IdentityDictionary(#aboutToLeaveWorld->WeakMessageSend(#removeModalWindow
-> a PasteUpMorph<world>(2880695) [world]) )'


If I do

    PasteUpMorph allInstances collect: [:ea | ea actionMap]

{an IdentityDictionary(#aboutToLeaveWorld->WeakMessageSend(#removeModalWindow
-> nil) ) . an IdentityDictionary() . an IdentityDictionary() . an
IdentityDictionary() . an IdentityDictionary() . an
IdentityDictionary() . an
IdentityDictionary(#aboutToLeaveWorld->WeakMessageSend(#removeModalWindow
-> a PasteUpMorph<world>(2880695) [world]) ) . an IdentityDictionary()
. an IdentityDictionary() . an IdentityDictionary() . an
IdentityDictionary()}


So most of the action maps are actually empty.

I am now looking for the proper place to remove the entry

     #aboutToLeaveWorld

from the action map of the currently loaded Etoys project.

That project is not loaded in a system window but occupies the whole desktop.

-- Hannes






Project current world actionMap printString 'an
IdentityDictionary(#aboutToLeaveWorld->WeakMessageSend(#removeModalWindow
-> a PasteUpMorph<world>(2880695) [world]) )'


> Am 09.10.2017 15:55:36 schrieb H. Hirzel <hannes.hirzel at gmail.com>:
> I need to do investigations how the Squeak 6 based etoys 2016 image by
> Tim Felgentreff does this.
>
> http://wiki.squeak.org/squeak/6531
>
> ...
>
> On 10/9/17, H. Hirzel wrote:
>> On 10/9/17, Bob Arning wrote:
>>>
>>>
>>> On 10/9/17 9:13 AM, H. Hirzel wrote:
>>>> Looking a bit further it seems that modal window probably are not the
>>>> issue here
>>>>
>>>> MorphicProject(Project)
>>>> enter: returningFlag revert: revertFlag saveForRevert: saveForRevert
>>>>
>>>> ....
>>>> CurrentProject world triggerEvent: #aboutToLeaveWorld.
>>>> ....
>>>>
>>>>
>>>> PasteUpMorph
>>>> triggerEvent: anEventSelector
>>>> "Evaluate all actions registered for . Return the
>>>> value of the last registered action."
>>>>
>>>> ^(self actionForEvent: anEventSelector) value
>>>>
>>>>
>>>> anEventSelector is #aboutToLeaveWorld
>>>> and this is not implemented in PasteUpMorph.
>>>>
>>>> We have an empty block and that causes #removeModalWindow in a way I
>>>> do not understand yet.
>>>>
>>>> But if we would have
>>>>
>>>> #aboutToLeaveWorld
>>>>
>>>> Then it we probably would not have this problem.
>>>>
>>>> I wonder #aboutToLeaveWorld where this comes form, Squeak 3.9 and
>>>> Squeak 5.0 do not have it either.
>>>
>>> It's not a method, it's an event selector:
>>>
>>> CurrentProject world triggerEvent: #aboutToLeaveWorld.
>>>
>>> WebCamMorph>>intoWorld: aWorld
>>>
>>>
>>> super intoWorld: aWorld.
>>> camIsOn ifTrue: [self on]
>>> ifFalse:[self off].
>>> self removeActionsForEvent: #aboutToEnterWorld.
>>> aWorld
>>> when: #aboutToLeaveWorld
>>> send: #outOfWorld:
>>> to: self
>>> with: aWorld.
>>>
>>> similar stuff removed in the intervening years
>>>
>>> B3DSceneMorph>>intoWorld: aWorld
>>>
>>> "The receiver is showing in the given world"
>>> aWorld ifNil:[^self].
>>> super intoWorld: aWorld.
>>> aWorld when: #aboutToLeaveWorld send: #suspendAcceleration to: self.
>>> aWorld when: #aboutToEnterWorld send: #restoreAcceleration to: self.
>>> self restoreAcceleration.
>>>
>>> also for WonderlandCameraMorph
>>>>
>>>> --Hannes
>>
>>
>> Thank you for pointing this out, Bob.
>>
>> In Squeak 6.0a WebCamMorph is the only morph sending
>>
>> #when:send:to:with:
>>
>>
>> And there are only a few senders of
>>
>> #triggerEvent:
>>
>> (see screen shot)
>>
>> So how would you, Bob, suggest to proceed?
>>
>>
>> --Hannes
>>
>>
>>
>>>>
>>>> On 10/9/17, Marcel Taeumel wrote:
>>>>> Hi Hannes,
>>>>>
>>>>> if you can manage to set-up the modal child (window), that removal
>>>>> should
>>>>> happen automatically. Use SystemWindow >> #modalLockTo:. Also see
>>>>> Morph
>>>>> >>
>>>>> #openModal:. For "control-flow-modality", instead, you should use a
>>>>> DialogWindow. See DialogWindow >> #getUserResponse.
>>>>>
>>>>> Best,
>>>>> Marcel
>>>>> Am 09.10.2017 11:53:04 schrieb H. Hirzel :
>>>>> Hello
>>>>>
>>>>> I start a separate thread for the issue brought up in the tread
>>>>>
>>>>> MorphicProject subclass: #EtoysProject
>>>>>
>>>>>
>>>>> To see it in action make sure
>>>>>
>>>>> EToys-hjh.308.mcz
>>>>>
>>>>> is loaded. It contains a fix for the menuTitleBorderColor which makes
>>>>> the following Etoys project load smoothly.
>>>>>
>>>>> Then drop the Etoys project file
>>>>>
>>>>> http://squeakland.org/content/articles/attach/FollowRoad.012.pr
>>>>>
>>>>> onto the desktop.
>>>>>
>>>>>
>>>>>
>>>>> When I choose 'World menu' -> 'Previous project', the following
>>>>> happens
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> ----------------------------------
>>>>> Project class
>>>>> ----------------------------------
>>>>>
>>>>> returnToPreviousProject
>>>>> "Return to the project from which this project was entered. Do
>>>>> nothing if the current project has no link to its previous project."
>>>>>
>>>>> | prevProj |
>>>>> prevProj := CurrentProject previousProject.
>>>>> prevProj ifNotNil: [prevProj enter: true revert: false
>>>>> saveForRevert: false].
>>>>>
>>>>>
>>>>>
>>>>> ---------------------
>>>>> MorphicProject(Project)
>>>>>
>>>>> enter: returningFlag revert: revertFlag saveForRevert: saveForRevert
>>>>> "Install my ChangeSet, Transcript, and scheduled views as current
>>>>> globals. If returningFlag is true, we will return to the project from
>>>>> whence the current project was entered; don't change its
>>>>> previousProject link in this case.
>>>>> If saveForRevert is true, save the ImageSegment of the project
>>>>> being left.
>>>>> If revertFlag is true, make stubs for the world of the project
>>>>> being left.
>>>>> If revertWithoutAsking is true in the project being left, then
>>>>> always revert."
>>>>>
>>>>> ......
>>>>> CurrentProject world triggerEvent: #aboutToLeaveWorld.
>>>>> .....
>>>>>
>>>>>
>>>>> ----------------
>>>>>
>>>>> PasteUpMorph
>>>>> --------------------
>>>>>
>>>>> triggerEvent: anEventSelector
>>>>> "Evaluate all actions registered for . Return the
>>>>> value of the last registered action."
>>>>>
>>>>> ^(self actionForEvent: anEventSelector) value
>>>>>
>>>>>
>>>>> ------------------------
>>>>> PasteUpMorph
>>>>> ------------------------
>>>>>
>>>>>
>>>>> removeModalWindow
>>>>> self deprecated: 'The global becomeModal is no longer supported, use
>>>>> e.g. a dialog window'.
>>>>> "self modalWindow: nil"
>>>>>
>>>>>
>>>>>
>>>>> As mentioned in the thread
>>>>> MorphicProject subclass: #EtoysProject
>>>>> the issue may be "resolved" by just commenting out the deprecation
>>>>> message.
>>>>>
>>>>>
>>>>>
>>>>> removeModalWindow
>>>>>
>>>>> "self deprecated: 'The global becomeModal is no longer supported, use
>>>>> e.g. a dialog window'. "
>>>>>
>>>>> self flag: #fixMe.
>>>>>
>>>>> "self modalWindow: nil"
>>>>>
>>>>>
>>>>>
>>>>> Should we do this for the moment until is is more clear how the
>>>>> navigation mechanism in Etoys works?
>>>>>
>>>>> Other suggestions?
>>>>>
>>>>>
>>>>> Kind regards
>>>>>
>>>>> Hannes Hirzel
>>>>>
>>>>>
>>>>>
>>>>>
>>>
>>>
>>
>
>


More information about the Squeak-dev mailing list