[squeak-dev] The Inbox: Morphic-dtl.1373.mcz
David T. Lewis
lewis at mail.msen.com
Wed Nov 22 15:28:36 UTC 2017
I seem to have developed a mental block that prevents me from doing
anything right with these particular methods, so they go in the inbox
this time.
Review appreciated, especially for Morph>>delete.
Thanks,
Dave
On Wed, Nov 22, 2017 at 03:26:13PM +0000, commits at source.squeak.org wrote:
> David T. Lewis uploaded a new version of Morphic to project The Inbox:
> http://source.squeak.org/inbox/Morphic-dtl.1373.mcz
>
> ==================== Summary ====================
>
> Name: Morphic-dtl.1373
> Author: dtl
> Time: 22 November 2017, 10:25:57.941315 am
> UUID: 2e41d807-bf5a-4f90-84aa-d0ac472bb023
> Ancestors: Morphic-dtl.1372
>
> Reorganize Morph>>delete for clarity, and remove reference to global World.
>
> MorphicProject>>finalExitActions and finalEnterActions remove explicit references to global World and allow World be be removed for testing purposes.
>
> =============== Diff against Morphic-dtl.1372 ===============
>
> Item was changed:
> ----- Method: Morph>>delete (in category 'submorphs-add/remove') -----
> delete
> "Remove the receiver as a submorph of its owner and make its
> new owner be nil."
> + | oldWorld |
> -
> - | aWorld |
> self removeHalo.
> + (oldWorld := self world) ifNotNil: [
> -
> - self isInWorld ifTrue: [
> self disableSubmorphFocusForHand: self activeHand.
> self activeHand
> releaseKeyboardFocus: self;
> releaseMouseFocus: self].
> + owner ifNotNil: [
> + self privateDelete. "remove from world"
> -
> - "Preserve world reference for player notificaiton. See below."
> - aWorld := self world ifNil: [World].
> -
> - owner ifNotNil:[
> - self privateDelete.
> self player ifNotNil: [:player |
> + oldWorld ifNotNil: [
> + player noteDeletionOf: self fromWorld: oldWorld]]].!
> - player noteDeletionOf: self fromWorld: aWorld]].!
>
> Item was added:
> + ----- Method: MorphicProject>>clearGlobalState (in category 'enter') -----
> + clearGlobalState
> + "Clean up global state. The global variables World, ActiveWorld, ActiveHand
> + and ActiveEvent provide convenient access to the state of the active project
> + in Morphic. Clear their prior values when leaving an active project. This
> + method may be removed if the use of global state variables is eliminated."
> +
> + "If global World is defined, clear it now. The value is expected to be set
> + again as a new project is entered."
> + Smalltalk globals at: #World
> + ifPresent: [ :w | Smalltalk globals at: #World put: nil ].
> + ActiveWorld := ActiveHand := ActiveEvent := nil.
> + !
>
> Item was changed:
> ----- Method: MorphicProject>>finalEnterActions: (in category 'enter') -----
> finalEnterActions: leavingProject
> "Perform the final actions necessary as the receiver project is entered"
>
> | navigator armsLengthCmd navType thingsToUnhibernate |
> + "If this image has a global World variable, update it now"
> + Smalltalk globals at: #World
> + ifPresent: [ :w | Smalltalk globals at: #World put: world ].
> - World := world. "Signifies Morphic"
> world install.
> world transferRemoteServerFrom: leavingProject world.
> "(revertFlag | saveForRevert | forceRevert) ifFalse: [
> (Preferences valueOfFlag: #projectsSentToDisk) ifTrue: [
> self storeSomeSegment]]."
>
> "Transfer event recorder to me."
> leavingProject isMorphic ifTrue: [
> leavingProject world pauseEventRecorder ifNotNil: [:rec |
> rec resumeIn: world]].
>
> world triggerOpeningScripts.
>
>
> self initializeMenus.
> self projectParameters
> at: #projectsToBeDeleted
> ifPresent: [ :projectsToBeDeleted |
> self removeParameter: #projectsToBeDeleted.
> projectsToBeDeleted do: [:each | each delete]].
>
> Locale switchAndInstallFontToID: self localeID.
>
> thingsToUnhibernate := world valueOfProperty: #thingsToUnhibernate ifAbsent: [#()].
> thingsToUnhibernate do: [:each | each unhibernate].
> world removeProperty: #thingsToUnhibernate.
>
> navType := ProjectNavigationMorph preferredNavigator.
> armsLengthCmd := self parameterAt: #armsLengthCmd ifAbsent: [nil].
> navigator := world findA: navType.
> (Preferences classicNavigatorEnabled and: [Preferences showProjectNavigator and: [navigator isNil]]) ifTrue:
> [(navigator := navType new)
> bottomLeft: world bottomLeft;
> openInWorld: world].
> navigator notNil & armsLengthCmd notNil ifTrue:
> [navigator color: Color lightBlue].
> armsLengthCmd notNil ifTrue:
> [Preferences showFlapsWhenPublishing
> ifFalse:
> [self flapsSuppressed: true.
> navigator ifNotNil: [navigator visible: false]].
> armsLengthCmd openInWorld: world].
> world reformulateUpdatingMenus.
> world presenter positionStandardPlayer.
> self assureMainDockingBarPresenceMatchesPreference.
>
> world repairEmbeddedWorlds.!
>
> Item was changed:
> ----- Method: MorphicProject>>finalExitActions: (in category 'enter') -----
> finalExitActions: enteringProject
>
> world triggerClosingScripts.
>
> "Pause sound players, subject to preference settings"
> (world hasProperty: #letTheMusicPlay)
> ifTrue: [world removeProperty: #letTheMusicPlay]
> ifFalse: [SoundService stop].
>
> world sleep.
> -
> (world findA: ProjectNavigationMorph)
> ifNotNil: [:navigator | navigator retractIfAppropriate].
> + self clearGlobalState.
> -
> - "Clean-up global state."
> - World := nil.
> - ActiveWorld := ActiveHand := ActiveEvent := nil.
> Sensor flushAllButDandDEvents. !
>
>
More information about the Squeak-dev
mailing list
|