The Inbox: Morphic-dtl.1373.mcz

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

The Inbox: Morphic-dtl.1373.mcz

commits-2
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. !


Reply | Threaded
Open this post in threaded view
|

Re: The Inbox: Morphic-dtl.1373.mcz

David T. Lewis
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, [hidden email] 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. !
>
>