[squeak-dev] The Trunk: Morphic-mt.1603.mcz

commits at source.squeak.org commits at source.squeak.org
Fri Dec 6 17:00:16 UTC 2019


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

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

Name: Morphic-mt.1603
Author: mt
Time: 6 December 2019, 6:00:07.36633 pm
UUID: 17d97c9d-3396-5648-bf6c-48edf00bf7fd
Ancestors: Morphic-mt.1600

Fixes some visual glitches regarding initial text selection in windows and a window's focus look.

Note that the instVar 'selectionInterval' in PluggableTextMorph is a cache because paragraphs and editors get replaced very frequently. The message #selectionInterval points to the editor, not that instVar. There are no senders of #selectionInterval: either. I will make that more clear in the future. There is a lot of inconsistent stuff lying around in our text-morph infrastructure.

Note that this is Morphic-mt.1603 because I have 1601 and 1602 in the inbox. :-)

=============== Diff against Morphic-mt.1600 ===============

Item was changed:
  ----- Method: Morph>>containingWindow (in category 'structure') -----
  containingWindow
  	"Answer a window that contains the receiver. Try to use the model to find the right window. If I do not have a model, use the model of one of my owners. We could also just use #isSystemWindow. This, however, gives system windows the chance to refrain from taking ownership of this morph."
  
  	| component |
  	component := self.
  	component model isNil ifTrue: [component := self firstOwnerSuchThat: [:m| m model notNil]].
  	^(component isNil or: [component isWindowForModel: component model])
  		ifTrue: [component]
+ 		ifFalse: [(component firstOwnerSuchThat: [:m | m isWindowForModel: component model])
+ 			"For models composed of models, we have to use #isSystemWindow."
+ 			ifNil: [component firstOwnerSuchThat: [:m | m isSystemWindow]]]!
- 		ifFalse: [component firstOwnerSuchThat:[:m| m isWindowForModel: component model]]!

Item was added:
+ ----- Method: PluggableTextMorph>>restoreSelectionInterval (in category 'editor access') -----
+ restoreSelectionInterval
+ 
+ 	selectionInterval ifNotNil: [
+ 		self selectionInterval: selectionInterval].!

Item was changed:
+ ----- Method: PluggableTextMorph>>selectionInterval (in category 'editor access') -----
- ----- Method: PluggableTextMorph>>selectionInterval (in category 'interactive error protocol') -----
  selectionInterval
  	^ textMorph editor selectionInterval!

Item was changed:
+ ----- Method: PluggableTextMorph>>selectionInterval: (in category 'editor access') -----
- ----- Method: PluggableTextMorph>>selectionInterval: (in category 'model access') -----
  selectionInterval: sel
+ 	textMorph editor selectInterval: sel.!
- 	selectionInterval := sel!

Item was changed:
  ----- Method: SystemWindow>>updateFocusLookForKeyboardFocus (in category 'focus') -----
  updateFocusLookForKeyboardFocus
+ 	"Ensure that the window holding the current keyboard focus looks focused. Note that the focus window is not necessarily the receiver of this message."
  
  	| f w |
  	(((f := self activeHand keyboardFocus) notNil and: [(w := f containingWindow) notNil])
  		and: [w isActive])
  			ifTrue: [
  				(self class windowsIn: self world) do: [:window |
  					w ~~ window ifTrue: [window lookUnfocused]].
+ 				w lookFocused]
+ 			ifFalse: [
+ 				"If there is no valid focus holder, we must not look focused even if we are the key window."
+ 				self lookUnfocused]!
- 				w lookFocused]!

Item was added:
+ ----- Method: TextMorphForEditView>>doLayoutIn: (in category 'layout') -----
+ doLayoutIn: layoutBounds
+ 
+ 	| shouldRestoreSelection |
+ 	self flag: #workaround. "mt: The combination of 'releaseParagraph; paragraph' resets the selection. We should find a better way for this in the future. Sigh...."
+ 	
+ 	shouldRestoreSelection := paragraph isNil.
+ 	
+ 	super doLayoutIn: layoutBounds.
+ 	
+ 	shouldRestoreSelection ifTrue: [
+ 		self editView ifNotNil: [:view |
+ 			view restoreSelectionInterval]].!



More information about the Squeak-dev mailing list