The Trunk: Morphic-mt.948.mcz

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

The Trunk: Morphic-mt.948.mcz

commits-2
Marcel Taeumel uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-mt.948.mcz

==================== Summary ====================

Name: Morphic-mt.948
Author: mt
Time: 29 April 2015, 6:08:09.041 pm
UUID: 5f2bc0e4-93cb-4841-b724-e03b107d5fcf
Ancestors: Morphic-kfr.947

Fixed several layouting issues regarding splitters, grips, panes, and windows.

=============== Diff against Morphic-kfr.947 ===============

Item was changed:
+ ----- Method: BorderedMorph>>addCornerGrips (in category 'resize handling') -----
- ----- Method: BorderedMorph>>addCornerGrips (in category 'lookenhancements') -----
  addCornerGrips
  self
  addMorphBack: (TopLeftGripMorph new target: self; position: self position).
  self
  addMorphBack: (TopRightGripMorph new target: self; position: self position).
  self
  addMorphBack: (BottomLeftGripMorph new target: self;position: self position).
  self
  addMorphBack: (BottomRightGripMorph new target: self;position: self position)!

Item was changed:
+ ----- Method: BorderedMorph>>addEdgeGrips (in category 'resize handling') -----
- ----- Method: BorderedMorph>>addEdgeGrips (in category 'lookenhancements') -----
  addEdgeGrips
  "Add resizers along the four edges of the receiver"
 
  self
  addMorphBack: (TopGripMorph new target: self;position: self position).
  self
  addMorphBack: (BottomGripMorph new target: self;position: self position).
  self
  addMorphBack: (RightGripMorph new target: self;position: self position).
  self
  addMorphBack: (LeftGripMorph new target: self;position: self position).!

Item was added:
+ ----- Method: BorderedMorph>>addMorph:fullFrame: (in category 'resize handling') -----
+ addMorph: aMorph fullFrame: aLayoutFrame
+ "Add aMorph according to aLayoutFrame."
+
+ self cellInset > 0 ifTrue: [
+ | left right bottom top spacing |
+
+ spacing := self cellInset.
+ left := aLayoutFrame leftOffset ifNil: [0].
+ right := aLayoutFrame rightOffset ifNil: [0].
+
+ bottom := aLayoutFrame bottomOffset ifNil: [0].
+ top := aLayoutFrame topOffset ifNil: [0].
+
+ "Add a spacing to the frame if it is not top or leftmost."
+ aLayoutFrame leftFraction = 0
+ ifFalse: [left := left + spacing]
+ ifTrue: [
+ "Expect another, resizable widget besides me if I have a fixed width."
+ aLayoutFrame hasFixedWidth ifTrue: [right := right - spacing]].
+ aLayoutFrame topFraction = 0
+ ifFalse: [top := top + spacing]
+ ifTrue: [
+ "Expect another, resizable widget besides me if I have a fixed height."
+ aLayoutFrame hasFixedHeight ifTrue: [bottom := bottom - spacing]].
+
+ aLayoutFrame
+ topOffset: top;
+ bottomOffset: bottom;
+ leftOffset: left;
+ rightOffset: right].
+
+ super addMorph: aMorph fullFrame: aLayoutFrame.
+
+ self wantsPaneSplitters ifTrue: [self addPaneSplitters].!

Item was changed:
+ ----- Method: BorderedMorph>>addPaneHSplitterBetween:and: (in category 'resize handling') -----
- ----- Method: BorderedMorph>>addPaneHSplitterBetween:and: (in category 'lookenhancements') -----
  addPaneHSplitterBetween: topMorph and: bottomMorphs
 
  | targetY minX maxX splitter |
  targetY := topMorph layoutFrame bottomFraction.
 
  minX := (bottomMorphs detectMin: [:each | each layoutFrame leftFraction]) layoutFrame leftFraction.
  maxX := (bottomMorphs detectMax: [:each | each layoutFrame rightFraction]) layoutFrame rightFraction.
  splitter := ProportionalSplitterMorph new beSplitsTopAndBottom; yourself.
  splitter layoutFrame: (LayoutFrame
  fractions: (minX @ targetY corner: maxX @ targetY)
+ offsets: (((topMorph layoutFrame leftOffset ifNil: [0]) @ 0
+ corner: (topMorph layoutFrame rightOffset ifNil: [0]) @ AbstractResizerMorph gripThickness)
+ translateBy: 0 @ (topMorph layoutFrame bottomOffset ifNil: [0]))).
- offsets: (((topMorph layoutFrame leftOffset ifNil: [0]) @ 0 corner: (topMorph layoutFrame rightOffset ifNil: [0]) @ AbstractResizerMorph gripThickness) translateBy: 0 @ (topMorph layoutFrame bottomOffset ifNil: [0]))).
 
  self addMorphBack: (splitter position: self position).!

Item was added:
+ ----- Method: BorderedMorph>>addPaneHSplitters (in category 'resize handling') -----
+ addPaneHSplitters
+
+ | remaining targetY sameY |
+ remaining := self paneMorphs reject: [:each |
+ each layoutFrame bottomFraction = 1
+ or: [each layoutFrame hasFixedHeight]].
+ [remaining notEmpty] whileTrue:
+ [targetY := remaining first layoutFrame bottomFraction.
+ sameY := self paneMorphs select: [:each | each layoutFrame bottomFraction = targetY].
+ self addPaneHSplitterBetween: remaining first and: sameY.
+ remaining := remaining copyWithoutAll: sameY]!

Item was changed:
+ ----- Method: BorderedMorph>>addPaneSplitters (in category 'resize handling') -----
- ----- Method: BorderedMorph>>addPaneSplitters (in category 'lookenhancements') -----
  addPaneSplitters
+
- | splitter remaining target targetX sameX minY maxY targetY sameY minX maxX |
  self removePaneSplitters.
+
+ self addPaneVSplitters.
+ self addPaneHSplitters.
- self removeCornerGrips.
 
+ self linkSubmorphsToSplitters!
- remaining := submorphs reject: [:each | each layoutFrame rightFraction = 1].
- [remaining notEmpty] whileTrue:
- [target := remaining first.
- targetX := target layoutFrame rightFraction.
- sameX := submorphs select: [:each | each layoutFrame rightFraction = targetX].
- minY := (sameX detectMin: [:each | each layoutFrame topFraction]) layoutFrame topFraction.
- maxY := (sameX detectMax: [:each | each layoutFrame bottomFraction]) layoutFrame bottomFraction.
- splitter := ProportionalSplitterMorph new.
- splitter layoutFrame: (LayoutFrame
- fractions: (targetX @ minY corner: targetX @ maxY)
- offsets: ((0 @ (target layoutFrame topOffset ifNil: [0]) corner: 4 @ (target layoutFrame bottomOffset ifNil: [0])) translateBy: (target layoutFrame rightOffset ifNil: [0]) @ 0)).
- self addMorphBack: (splitter position: self position).
- remaining := remaining copyWithoutAll: sameX].
-
- remaining := submorphs copy reject: [:each | each layoutFrame bottomFraction = 1].
- [remaining notEmpty]
- whileTrue: [target := remaining first.
- targetY := target layoutFrame bottomFraction.
- sameY := submorphs select: [:each | each layoutFrame bottomFraction = targetY].
- minX := (sameY detectMin: [:each | each layoutFrame leftFraction]) layoutFrame leftFraction.
- maxX := (sameY detectMax: [:each | each layoutFrame rightFraction]) layoutFrame rightFraction.
- splitter := ProportionalSplitterMorph new beSplitsTopAndBottom; yourself.
- splitter layoutFrame: (LayoutFrame
- fractions: (minX @ targetY corner: maxX @ targetY)
- offsets: (((target layoutFrame leftOffset ifNil: [0]) @ 0 corner: (target layoutFrame rightOffset ifNil: [0]) @ 4) translateBy: 0 @ (target layoutFrame bottomOffset ifNil: [0]))).
- self addMorphBack: (splitter position: self position).
- remaining := remaining copyWithoutAll: sameY].
-
- self linkSubmorphsToSplitters.
- self splitters do: [:each | each comeToFront].
- !

Item was changed:
+ ----- Method: BorderedMorph>>addPaneVSplitterBetween:and: (in category 'resize handling') -----
- ----- Method: BorderedMorph>>addPaneVSplitterBetween:and: (in category 'lookenhancements') -----
  addPaneVSplitterBetween: leftMorph and: rightMorphs
 
  | targetX minY maxY splitter |
  targetX := leftMorph layoutFrame rightFraction.
  minY := (rightMorphs detectMin: [:each | each layoutFrame topFraction]) layoutFrame topFraction.
  maxY := (rightMorphs detectMax: [:each | each layoutFrame bottomFraction]) layoutFrame bottomFraction.
 
  splitter := ProportionalSplitterMorph new.
  splitter layoutFrame: (LayoutFrame
  fractions: (targetX @ minY corner: targetX @ maxY)
  offsets: ((0 @ (leftMorph layoutFrame topOffset ifNil: [0]) corner: (AbstractResizerMorph gripThickness@ (leftMorph layoutFrame bottomOffset ifNil: [0]))) translateBy: (leftMorph layoutFrame rightOffset ifNil: [0]) @ 0)).
 
  self addMorphBack: (splitter position: self position).!

Item was added:
+ ----- Method: BorderedMorph>>addPaneVSplitters (in category 'resize handling') -----
+ addPaneVSplitters
+
+ | remaining targetX sameX |
+ remaining := self paneMorphs reject: [:each |
+ each layoutFrame rightFraction = 1
+ or: [each layoutFrame hasFixedWidth]].
+ [remaining notEmpty] whileTrue:
+ [targetX := remaining first layoutFrame rightFraction.
+ sameX := self paneMorphs select: [:each | each layoutFrame rightFraction = targetX].
+ self addPaneVSplitterBetween: remaining first and: sameX.
+ remaining := remaining copyWithoutAll: sameX]!

Item was changed:
+ ----- Method: BorderedMorph>>linkSubmorphsToSplitters (in category 'resize handling') -----
- ----- Method: BorderedMorph>>linkSubmorphsToSplitters (in category 'lookenhancements') -----
  linkSubmorphsToSplitters
 
+ self splitters do: [:splitter |
+ splitter splitsTopAndBottom ifTrue: [
+ self submorphsDo: [:morph |
+ ((morph ~= splitter
+ and: [morph layoutFrame bottomFraction = splitter layoutFrame topFraction])
+ and: [morph layoutFrame hasFixedHeight not
+ or: [(morph layoutFrame topOffset ifNil: [0]) < 0]])
+ ifTrue: [splitter addLeftOrTop: morph].
+ ((morph ~= splitter
+ and: [morph layoutFrame topFraction = splitter layoutFrame bottomFraction])
+ and: [morph layoutFrame hasFixedHeight not
+ or: [(morph layoutFrame bottomOffset ifNil: [0]) > 0]])
+ ifTrue: [splitter addRightOrBottom: morph]]].
+ splitter splitsLeftAndRight ifTrue: [
+ self submorphsDo: [:morph |
+ ((morph ~= splitter
+ and: [morph layoutFrame rightFraction = splitter layoutFrame leftFraction])
+ and: [morph layoutFrame hasFixedWidth not
+ or: [(morph layoutFrame leftOffset ifNil: [0]) < 0]])
+ ifTrue: [splitter addLeftOrTop: morph].
+ ((morph ~= splitter
+ and: [morph layoutFrame leftFraction = splitter layoutFrame rightFraction])
+ and: [morph layoutFrame hasFixedWidth not
+ or: [(morph layoutFrame rightOffset ifNil: [0]) > 0]])
+ ifTrue: [splitter addRightOrBottom: morph]]]]!
- self splitters do:
- [:each |
- each splitsTopAndBottom
- ifTrue:
- [self submorphsDo:
- [:eachMorph |
- (eachMorph ~= each and: [eachMorph layoutFrame bottomFraction = each layoutFrame topFraction]) ifTrue: [each addLeftOrTop: eachMorph].
- (eachMorph ~= each and: [eachMorph layoutFrame topFraction = each layoutFrame bottomFraction]) ifTrue: [each addRightOrBottom: eachMorph]]]
- ifFalse:
- [self submorphsDo:
- [:eachMorph |
- (eachMorph ~= each and: [eachMorph layoutFrame rightFraction = each layoutFrame leftFraction]) ifTrue: [each addLeftOrTop: eachMorph].
- (eachMorph ~= each and: [eachMorph layoutFrame leftFraction = each layoutFrame rightFraction]) ifTrue: [each addRightOrBottom: eachMorph]]]]!

Item was added:
+ ----- Method: BorderedMorph>>paneMorphs (in category 'resize handling') -----
+ paneMorphs
+
+ ^ self submorphs copyWithoutAll: self splitters!

Item was changed:
+ ----- Method: BorderedMorph>>removeCornerGrips (in category 'resize handling') -----
- ----- Method: BorderedMorph>>removeCornerGrips (in category 'lookenhancements') -----
  removeCornerGrips
 
  | corners |
  corners := self submorphsSatisfying: [:each | each isKindOf: CornerGripMorph].
  corners do: [:each | each delete]!

Item was changed:
+ ----- Method: BorderedMorph>>removePaneSplitters (in category 'resize handling') -----
- ----- Method: BorderedMorph>>removePaneSplitters (in category 'lookenhancements') -----
  removePaneSplitters
 
  self splitters do: [:each | each delete]!

Item was changed:
+ ----- Method: BorderedMorph>>splitters (in category 'resize handling') -----
- ----- Method: BorderedMorph>>splitters (in category 'lookenhancements') -----
  splitters
 
  ^ self submorphsSatisfying: [:each | each isKindOf: ProportionalSplitterMorph]!

Item was added:
+ ----- Method: BorderedMorph>>wantsPaneSplitters (in category 'resize handling') -----
+ wantsPaneSplitters
+
+ ^ self valueOfProperty: #allowPaneSplitters ifAbsent: [false]!

Item was added:
+ ----- Method: BorderedMorph>>wantsPaneSplitters: (in category 'resize handling') -----
+ wantsPaneSplitters: aBoolean
+
+ self setProperty: #allowPaneSplitters toValue: aBoolean.!

Item was changed:
  ----- Method: BottomGripMorph>>gripLayoutFrame (in category 'accessing') -----
  gripLayoutFrame
  ^ LayoutFrame
  fractions: (0 @ 1 corner: 1 @ 1)
+ offsets: (0 @ 0 negated corner: 0@ self defaultHeight)!
- offsets: (0 @ self defaultHeight negated corner: 0@ 0)!

Item was changed:
  ----- Method: BottomLeftGripMorph>>gripLayoutFrame (in category 'accessing') -----
  gripLayoutFrame
  ^ LayoutFrame
  fractions: (0 @ 1 corner: 0 @ 1)
+ offsets: (self class gripThickness negated @ (self defaultHeight negated + self class gripThickness)
+ corner: 0 @ 0)!
- offsets: (0 @ (0 - self defaultHeight) corner: self defaultWidth @ 0)!

Item was changed:
  ----- Method: BottomRightGripMorph>>gripLayoutFrame (in category 'accessing') -----
  gripLayoutFrame
  ^ LayoutFrame
  fractions: (1 @ 1 corner: 1 @ 1)
+ offsets: ((self defaultWidth negated + self class gripThickness) @ (self defaultHeight negated + self class gripThickness)
+ corner: 0@0)!
- offsets: (0 - self defaultWidth @ (0 - self defaultHeight) corner: 0 @ 0)!

Item was changed:
  ----- Method: LeftGripMorph>>gripLayoutFrame (in category 'accessing') -----
  gripLayoutFrame
  ^ LayoutFrame
  fractions: (0 @ 0 corner: 0 @ 1)
+ offsets: (self defaultWidth negated @ 0 corner: 0 @ 0)!
- offsets: (0 @ 0 negated corner: self defaultWidth @ 0)!

Item was changed:
  ----- Method: ProportionalLayout>>minExtentOf:in: (in category 'layout') -----
  minExtentOf: aMorph in: newBounds
  "Return the minimal size aMorph's children would require given the new bounds"
  | min |
  min := 0@0.
  aMorph submorphsDo:[:m| | extent frame |
  "Map the minimal size of the child through the layout frame.
  Note: This is done here and not in the child because its specific
  for proportional layouts. Perhaps we'll generalize this for table
  layouts but I'm not sure how and when."
  extent := m minExtent.
+ "frame := m layoutFrame.
+ frame ifNotNil:[extent := frame minExtentFrom: extent]."
- frame := m layoutFrame.
- frame ifNotNil:[extent := frame minExtentFrom: extent].
  min := min max: extent].
  ^min!

Item was changed:
  ----- Method: ProportionalSplitterMorph>>minimumHeightOf: (in category 'boundaries') -----
  minimumHeightOf: aCollection
+ "Answer the minimum height needed to display any of the morphs in aCollection.
+ See ProportionalLayout >> #minExtentOf:in:."
- "Answer the minimum height needed to display any of the morphs in aCollection."
 
  ^ aCollection inject: 0 into: [ :height :morph |
+ | minHeight |
+ minHeight := morph minHeight.
+ "morph layoutFrame ifNotNil: [:frame |
+ minHeight := frame minHeightFrom: minHeight]."
+ minHeight + self height max: height]!
- (morph minHeight + self height) max: height]!

Item was changed:
  ----- Method: ProportionalSplitterMorph>>minimumWidthOf: (in category 'boundaries') -----
  minimumWidthOf: aCollection
+ "Answer the minimum width needed to display any of the morphs in aCollection.
+ See ProportionalLayout >> #minExtentOf:in:."
+
- "Answer the minimum width needed to display any of the morphs in aCollection."
-
  ^ aCollection inject: 0 into: [ :width :morph |
+ | minWidth |
+ minWidth := morph minWidth.
+ "morph layoutFrame ifNotNil: [:frame |
+ minWidth := frame minWidthFrom: minWidth]."
+ minWidth + self width max: width]!
- (morph minWidth + self width) max: width]!

Item was changed:
  ----- Method: ProportionalSplitterMorph>>repositionBy: (in category 'layout') -----
  repositionBy: delta
  | selfTop selfBottom selfLeft selfRight |
  leftOrTop do:
+ [ : each | | firstRight firstBottom firstLeft firstTop |
- [ : each | | firstRight firstBottom |
  firstRight := each layoutFrame rightOffset ifNil: [ 0 ].
  firstBottom := each layoutFrame bottomOffset ifNil: [ 0 ].
  each layoutFrame rightOffset: firstRight + delta x.
+ each layoutFrame bottomOffset: firstBottom + delta y.
+ each layoutFrame hasFixedHeight ifTrue: [
+ firstTop := each layoutFrame topOffset ifNil: [ 0 ].
+ each layoutFrame topOffset: firstTop + delta y ].
+ each layoutFrame hasFixedWidth ifTrue: [
+ firstLeft := each layoutFrame leftOffset ifNil: [ 0 ].
+ each layoutFrame leftOffset: firstLeft + delta x. ] ].
- each layoutFrame bottomOffset: firstBottom + delta y ].
  rightOrBottom do:
+ [ : each | | secondLeft secondTop secondRight secondBottom |
- [ : each | | secondLeft secondTop |
  secondLeft := each layoutFrame leftOffset ifNil: [ 0 ].
  secondTop := each layoutFrame topOffset ifNil: [ 0 ].
  each layoutFrame leftOffset: secondLeft + delta x.
+ each layoutFrame topOffset: secondTop + delta y.
+ each layoutFrame hasFixedHeight ifTrue: [
+ secondBottom := each layoutFrame bottomOffset ifNil: [ 0 ].
+ each layoutFrame bottomOffset: secondBottom + delta y. ].
+ each layoutFrame hasFixedWidth ifTrue: [
+ secondRight := each layoutFrame rightOffset ifNil: [ 0 ].
+ each layoutFrame rightOffset: secondRight + delta x. ] ].
+
- each layoutFrame topOffset: secondTop + delta y ].
  selfTop := self layoutFrame topOffset ifNil: [ 0 ].
  selfBottom := self layoutFrame bottomOffset ifNil: [ 0 ].
  selfLeft := self layoutFrame leftOffset ifNil: [ 0 ].
  selfRight := self layoutFrame rightOffset ifNil: [ 0 ].
  self layoutFrame
  topOffset: selfTop + delta y ;
  bottomOffset: selfBottom + delta y ;
  leftOffset: selfLeft + delta x ;
  rightOffset: selfRight + delta x.
  self owner layoutChanged.
  self movements removeFirst; add: (splitsTopAndBottom ifTrue: [ delta y sign ] ifFalse: [ delta x sign ])!

Item was changed:
  ----- Method: ProportionalSplitterMorph>>rightBoundary (in category 'boundaries') -----
  rightBoundary
  "Answer the rightmost x position the receiver could be moved to."
 
  | splitter morphs |
  splitter := self splitterRight.
  morphs := self commonNeighbours: rightOrBottom with: splitter.
+
  ^ (splitter
  ifNil: [owner isSystemWindow ifTrue: [owner panelRect right]
  ifFalse: [owner innerBounds right]]
  ifNotNil: [splitter left])
  - (self minimumWidthOf: morphs)!

Item was added:
+ ----- Method: ProportionalSplitterMorph>>splitsLeftAndRight (in category 'direction') -----
+ splitsLeftAndRight
+
+ ^ self splitsTopAndBottom not!

Item was changed:
  ----- Method: ProportionalSplitterMorph>>topBoundary (in category 'boundaries') -----
  topBoundary
  "Answer the topmost x position the receiver could be moved to."
 
  | splitter morphs |
  splitter := self splitterAbove.
  morphs := self commonNeighbours: leftOrTop with: splitter.
+
  ^ (splitter
+ ifNil: [owner isSystemWindow ifTrue: [owner panelRect top]
- ifNil: [owner isSystemWindow ifTrue: [owner panelRect top + owner labelArea height + 3 ]
  ifFalse: [owner innerBounds top]]
  ifNotNil: [splitter bottom])
  + (self minimumHeightOf: morphs)!

Item was changed:
  ----- Method: RightGripMorph>>gripLayoutFrame (in category 'accessing') -----
  gripLayoutFrame
  ^ LayoutFrame
  fractions: (1 @ 0 corner: 1 @ 1)
+ offsets: (0 @ self defaultHeight negated corner: self defaultWidth @ 0)!
- offsets: (self defaultWidth negated @ self defaultHeight negated corner: 0@ 0)!

Item was changed:
  ----- Method: SystemWindow>>addMorph:fullFrame: (in category 'panes') -----
  addMorph: aMorph fullFrame: aLayoutFrame
  "Add aMorph according to aLayoutFrame."
- | windowBorderWidth |
- windowBorderWidth := self class borderWidth.
- "If the property #allowPaneSplitters is set to false, do *not* inset morphs by the borderWidth
- to make room for splitters.  This allows windows with non-traditional contents to avoid their
- component morphs from being clipped.  Do *NOT* remove this code please!!  Just because
- there may be no setters of allowPaneSplitters to false in the image doesn't mean they're not
- out there.  Thanks!!  eem 6/13/2013"
- (self valueOfProperty: #allowPaneSplitters ifAbsent: [true]) ifTrue:
- [| left right bottom top |
 
- left := aLayoutFrame leftOffset ifNil: [0].
- right := aLayoutFrame rightOffset ifNil: [0].
-
- bottom := aLayoutFrame bottomOffset ifNil: [0].
- top := aLayoutFrame topOffset ifNil: [0].
-
- aLayoutFrame rightFraction = 1 ifTrue: [aLayoutFrame rightOffset: right - windowBorderWidth].
- aLayoutFrame leftFraction = 0
- ifTrue: [aLayoutFrame leftOffset: left + windowBorderWidth]
- ifFalse: [aLayoutFrame leftOffset: left + ProportionalSplitterMorph gripThickness].
-
- aLayoutFrame bottomFraction = 1 ifTrue: [aLayoutFrame bottomOffset: bottom - windowBorderWidth].
- aLayoutFrame topFraction = 0
- ifTrue: [aLayoutFrame topOffset: top + windowBorderWidth]
- ifFalse: [aLayoutFrame topOffset: top + ProportionalSplitterMorph gripThickness]].
-
- "this code should not be here!!!!  As of 6/13/2013 there aren't even any users of BrowserCommentTextMorph."
- (aMorph class name = #BrowserCommentTextMorph) ifTrue:
- [aLayoutFrame rightOffset: windowBorderWidth negated.
- aLayoutFrame leftOffset: windowBorderWidth.
- aLayoutFrame bottomOffset: windowBorderWidth negated.
- aLayoutFrame topOffset: (windowBorderWidth negated) + 4].
-
  super addMorph: aMorph fullFrame: aLayoutFrame.
 
  paneMorphs := paneMorphs copyReplaceFrom: 1 to: 0 with: (Array with: aMorph).
  aMorph isImageMorph ifFalse: [aMorph adoptPaneColor: self paneColor].
  Preferences scrollBarsOnRight ifTrue:"reorder panes so flop-out right-side scrollbar is visible"
+ [self addMorphBack: aMorph].!
- [self addMorphBack: aMorph].
-
- self addPaneSplitters!

Item was removed:
- ----- Method: SystemWindow>>addPaneHSplitters (in category 'initialization') -----
- addPaneHSplitters
-
- | remaining targetY sameY |
- remaining := paneMorphs copy reject: [:each | each layoutFrame bottomFraction = 1].
- [remaining notEmpty] whileTrue:
- [targetY := remaining first layoutFrame bottomFraction.
- sameY := paneMorphs select: [:each | each layoutFrame bottomFraction = targetY].
- self addPaneHSplitterBetween: remaining first and: sameY.
- remaining := remaining copyWithoutAll: sameY]!

Item was changed:
  ----- Method: SystemWindow>>addPaneSplitters (in category 'initialization') -----
  addPaneSplitters
 
- self removePaneSplitters.
  self removeCornerGrips.
-
- self addCornerGrips.
- self addPaneVSplitters.
- self addPaneHSplitters.
 
+ super addPaneSplitters.
+
+ self addCornerGrips.!
- self linkSubmorphsToSplitters!

Item was removed:
- ----- Method: SystemWindow>>addPaneVSplitters (in category 'initialization') -----
- addPaneVSplitters
-
- | remaining targetX sameX |
- remaining := paneMorphs copy reject: [:each | each layoutFrame rightFraction = 1].
- [remaining notEmpty] whileTrue:
- [targetX := remaining first layoutFrame rightFraction.
- sameX := paneMorphs select: [:each | each layoutFrame rightFraction = targetX].
- self addPaneVSplitterBetween: remaining first and: sameX.
- remaining := remaining copyWithoutAll: sameX]!

Item was changed:
  ----- Method: SystemWindow>>setFramesForLabelArea (in category 'initialization') -----
  setFramesForLabelArea
  "an aid to converting old instances, but then I found  
  convertAlignment (jesse welton's note)"
+ | frame |
- | frame windowBorderWidth |
  labelArea ifNil: [^ self].
  labelArea
  layoutPolicy: TableLayout new;
  listDirection: #leftToRight;
  hResizing: #spaceFill;
  layoutInset: 0.
  label hResizing: #spaceFill.
  labelArea
  ifNotNil: [frame := LayoutFrame new.
  frame leftFraction: 0;
  topFraction: 0;
  rightFraction: 1;
  bottomFraction: 0;
  topOffset: self labelHeight negated.
- windowBorderWidth := self class borderWidth.
- frame leftOffset: windowBorderWidth;
- rightOffset: windowBorderWidth negated;
- topOffset: self labelHeight negated + windowBorderWidth;
- bottomOffset: windowBorderWidth negated.
  labelArea layoutFrame: frame]!

Item was changed:
  ----- Method: TopGripMorph>>gripLayoutFrame (in category 'accessing') -----
  gripLayoutFrame
  ^ LayoutFrame
  fractions: (0 @ 0 corner: 1 @ 0)
+ offsets: (0 @ (-40 - self defaultHeight)  corner: 0@ 0)!
- offsets: (0 @ -40  corner: 0@ 0)!

Item was changed:
  ----- Method: TopLeftGripMorph>>gripLayoutFrame (in category 'accessing') -----
  gripLayoutFrame
  ^ LayoutFrame
  fractions: (0 @ 0 corner: 0 @ 0)
+ offsets: (0 @ 0 corner: 0 @ 0)!
- offsets: (0 @ 0 corner: self defaultWidth @ 0)!

Item was changed:
  ----- Method: TopRightGripMorph>>gripLayoutFrame (in category 'accessing') -----
  gripLayoutFrame
  ^ LayoutFrame
+ fractions: (1 @ 0 corner: 1 @ 0)
+ offsets:  (0 @ 0 corner: 0 @ 0)!
- fractions: (1 @ 0 corner: 1 @ nil)
- offsets: (0 - self defaultWidth @ 0 corner: 0 @ nil)!

Item was changed:
  (PackageInfo named: 'Morphic') postscript: '"Initialize the key bindings and menus"
  Editor initialize.
 
  "apply the new icons"
  MenuIcons initializeIcons.
  TheWorldMainDockingBar updateInstances.
+
+ "Fix missing inset of open windows."
+ SystemWindow allSubInstancesDo: [:ea |
+ ea
+ wantsPaneSplitters: true;
+ layoutInset: ProportionalSplitterMorph gripThickness;
+ cellInset: ProportionalSplitterMorph gripThickness].'!
-
- "Update minimum extents."
- PluggableButtonMorph allSubInstancesDo: [:ea |
- ea updateMinimumExtent].'!