[Pkg] The Trunk: Morphic-dtl.1373.mcz
commits at source.squeak.org
commits at source.squeak.org
Fri Nov 24 23:03:04 UTC 2017
David T. Lewis uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/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 Packages
mailing list