Marcel Taeumel uploaded a new version of ReleaseBuilder to project The Trunk:
http://source.squeak.org/trunk/ReleaseBuilder-mt.203.mcz
==================== Summary ====================
Name: ReleaseBuilder-mt.203
Author: mt
Time: 9 December 2019, 10:30:40.800701 am
UUID: b724e384-eaad-8d40-86ef-a503b8b229d8
Ancestors: ReleaseBuilder-mt.202
Feature freeze! Changes system version to 5.3beta. CI builds should now go to: http://files.squeak.org/5.3beta/
=============== Diff against ReleaseBuilder-mt.202 ===============
Item was changed:
----- Method: ReleaseBuilder class>>initialize (in category 'class initialization') -----
initialize
QAndA ifNil: [self clearQAndA].
"We have to be after AutoStart so that Morphic is up and running."
Smalltalk addToStartUpList: ReleaseBuilder after: AutoStart.
+ SystemVersion newVersion: 'Squeak5.3beta'!
- SystemVersion newVersion: 'Squeak5.3alpha'!
Marcel Taeumel uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-mt.1604.mcz
==================== Summary ====================
Name: Morphic-mt.1604
Author: mt
Time: 6 December 2019, 6:08:09.19933 pm
UUID: 4cd546eb-f09b-564a-9583-67eeed51a27c
Ancestors: Morphic-mt.1603
Partially revert that last commit. Sorry! All these different preferences around system windows make my head ache. :-)
If there is no current keyboard focus, this can mean you are dragging a window by its label. Especially when "keyboard focus on mouse over" is enabled. In that case, we do not want the window to suddenly look unfocused.
=============== Diff against Morphic-mt.1603 ===============
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]!
- w lookFocused]
- ifFalse: [
- "If there is no valid focus holder, we must not look focused even if we are the key window."
- self lookUnfocused]!
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]].!
Marcel Taeumel uploaded a new version of 60Deprecated to project The Trunk:
http://source.squeak.org/trunk/60Deprecated-mt.67.mcz
==================== Summary ====================
Name: 60Deprecated-mt.67
Author: mt
Time: 4 December 2019, 3:31:20.194613 pm
UUID: f029b4a1-fe78-4997-8ad1-7bef1bf1332a
Ancestors: 60Deprecated-mt.66
Complements HelpSystem-Core-mt.118
=============== Diff against 60Deprecated-mt.66 ===============
Item was changed:
SystemOrganization addCategory: #'60Deprecated-Collections-Streams'!
+ SystemOrganization addCategory: #'60Deprecated-HelpSystem-Core-Model'!
SystemOrganization addCategory: #'60Deprecated-Kernel-Methods'!
SystemOrganization addCategory: #'60Deprecated-Morphic-Widgets'!
SystemOrganization addCategory: #'60Deprecated-NSPlugin-System-Support'!
SystemOrganization addCategory: #'60Deprecated-System-Support'!
SystemOrganization addCategory: #'60Deprecated-Tools-Inspector'!
SystemOrganization addCategory: #'60Deprecated-Tools-Menus'!
Item was added:
+ HelpTopic subclass: #CodeStyledHelpTopic
+ instanceVariableNames: ''
+ classVariableNames: ''
+ poolDictionaries: ''
+ category: '60Deprecated-HelpSystem-Core-Model'!
+
+ !CodeStyledHelpTopic commentStamp: 'tpr 6/19/2018 19:27' prior: 0!
+ A CodeStyledHelpTopic is a simple way to make sure a help topic gets styled for code in a help browser. Once the help browser is able to code-style individual chunks instead of having to brute-force entire pages we can remove this class and simplify thngs!
Item was added:
+ ----- Method: CodeStyledHelpTopic>>usesCodeStyling (in category 'testing') -----
+ usesCodeStyling
+ "do I need a styled (ie with Shout) browser page?"
+ ^true!
Marcel Taeumel uploaded a new version of HelpSystem-Core to project The Trunk:
http://source.squeak.org/trunk/HelpSystem-Core-mt.118.mcz
==================== Summary ====================
Name: HelpSystem-Core-mt.118
Author: mt
Time: 4 December 2019, 3:30:57.037613 pm
UUID: cd6c15c1-6187-4d33-a558-8cfbc19dc968
Ancestors: HelpSystem-Core-mt.117
Fixes an intialization problem with the help browser. That problem occurred, for example, when opening the Terse Guide only through the help menu.
Deprecates CodeStyledHelpTopic.
=============== Diff against HelpSystem-Core-mt.117 ===============
Item was removed:
- HelpTopic subclass: #CodeStyledHelpTopic
- instanceVariableNames: ''
- classVariableNames: ''
- poolDictionaries: ''
- category: 'HelpSystem-Core-Model'!
-
- !CodeStyledHelpTopic commentStamp: 'tpr 6/19/2018 19:27' prior: 0!
- A CodeStyledHelpTopic is a simple way to make sure a help topic gets styled for code in a help browser. Once the help browser is able to code-style individual chunks instead of having to brute-force entire pages we can remove this class and simplify thngs!
Item was removed:
- ----- Method: CodeStyledHelpTopic>>usesCodeStyling (in category 'testing') -----
- usesCodeStyling
- "do I need a styled (ie with Shout) browser page?"
- ^true!
Item was changed:
----- Method: HelpBrowser>>aboutToStyle: (in category 'styling') -----
aboutToStyle: aStyler
+ ^ self currentTopic
+ ifNil: [false]
+ ifNotNil: [:topic | topic usesCodeStyling]!
- ^ (self currentTopic ifNil: [self currentParentTopic]) usesCodeStyling!
Marcel Taeumel uploaded a new version of ST80 to project The Trunk:
http://source.squeak.org/trunk/ST80-mt.247.mcz
==================== Summary ====================
Name: ST80-mt.247
Author: mt
Time: 4 December 2019, 3:10:14.872613 pm
UUID: e48e8277-c924-4f2a-b37d-a80aa5b0c251
Ancestors: ST80-mt.246
Complements the browse-it features from Morphic-mt.1600. Well, kind of. Needs polishing for the cases that open two browser at once.
=============== Diff against ST80-mt.246 ===============
Item was changed:
----- Method: ParagraphEditor>>browseIt (in category 'menu messages') -----
browseIt
+ "Launch a browser for the current selection, if appropriate."
- "Launch a browser for the current selection, if appropriate"
- | aSymbol |
- self flag: #yoCharCases.
-
Preferences alternativeBrowseIt ifTrue: [^ self browseClassFromIt].
+ self lineSelectAndEmptyCheck: [^ view flash].
- self lineSelectAndEmptyCheck: [^ self].
- (aSymbol := self selectedSymbol) isNil ifTrue: [^ view flash].
+ self terminateAndInitializeAround: [
+
+ self flag: #todo. "mt: Active controller process will terminate if any new tool is opened. Find a way to open two tools in this method."
+
+ "First, try to show all accesses to instance or class variables."
+ self selectedInstanceVariable ifNotNil:
+ [:nameToClass | self systemNavigation
+ browseAllAccessesTo: nameToClass key
+ from: nameToClass value].
+ self selectedClassVariable ifNotNil:
+ [:binding | self systemNavigation browseAllCallsOn: binding].
+
+ "Then, either browse the class (from a binding) or all implementors of a selector."
+ self selectedBinding ifNotNil:
+ [:binding | self systemNavigation browseClass: binding].
+ self selectedSelector ifNotNil:
+ [:selector | self systemNavigation browseAllImplementorsOf: selector].
+
+ ]!
- self terminateAndInitializeAround:
- [aSymbol first isUppercase
- ifTrue: [| anEntry |
- anEntry := (Smalltalk at: aSymbol
- ifAbsent: [ self systemNavigation browseAllImplementorsOf: aSymbol.
- ^ nil]).
- anEntry isNil ifTrue: [^ view flash].
- (anEntry isBehavior or: [ anEntry isTrait ])
- ifFalse: [ anEntry := anEntry class ].
- self systemNavigation browseClass: anEntry.
- ] ifFalse:[ self systemNavigation browseAllImplementorsOf: aSymbol]]!
Item was added:
+ ----- Method: ParagraphEditor>>selectedClassVariable (in category 'menu messages') -----
+ selectedClassVariable
+ "Try to make a class-variable binding out of the current text selection."
+
+ (model respondsTo: #selectedClassOrMetaClass) ifFalse: [ ^ nil ].
+
+ ^ self selectedSymbol ifNotNil:
+ [ :symbol | model selectedClassOrMetaClass ifNotNil:
+ [ :classOrMetaClass | (classOrMetaClass theNonMetaClass allClassVarNames includes: symbol)
+ ifTrue: [ classOrMetaClass bindingOf: symbol ]
+ ifFalse: [ nil ] ] ]!
Item was changed:
----- Method: ParagraphEditor>>selectedInstanceVariable (in category 'menu messages') -----
selectedInstanceVariable
+ "Try to make an association from an instance-variable name to the class where this variable is defined. Make the implementation robust for models that do not know about classes.
+
+ Note that inst-var names might not have symbol a representation, only via their accessors."
- "Try to make an association from an instance-variable name to the class where this variable is defined. Make the implementation robust for models that do not know about classes."
(model respondsTo: #selectedClassOrMetaClass) ifFalse: [ ^ nil ].
+ ^ self selection string ifNotNil:
- ^ self selection string ifNotNil:
[ :token | model selectedClassOrMetaClass ifNotNil:
[ :behavior |
(behavior instVarIndexFor: token ifAbsent: [ 0 ]) ~= 0
ifTrue: [ token -> behavior ]
ifFalse: [ nil ] ] ]!
Marcel Taeumel uploaded a new version of System to project The Trunk:
http://source.squeak.org/trunk/System-mt.1127.mcz
==================== Summary ====================
Name: System-mt.1127
Author: mt
Time: 4 December 2019, 3:04:58.090613 pm
UUID: 8c61fc56-bbd5-49e5-b735-c831e630323c
Ancestors: System-mt.1126
In system navigation, make #browseClass: work with (class) bindings. Note that there is alreay binding compatibility in #browseAllCallsOnClass:.
=============== Diff against System-mt.1126 ===============
Item was changed:
----- Method: SystemNavigation>>browseClass: (in category 'browse') -----
+ browseClass: aBehaviorOrBinding
+ "Browse the class (1) as given, (2) from its meta class, (3) from a class binding, (4) of a global variable as given, (5) of a global variable from its global binding."
+
+ | objectOrClass classOrMetaclass targetClass |
+ objectOrClass := aBehaviorOrBinding value.
+ classOrMetaclass := objectOrClass isBehavior
+ ifTrue: [objectOrClass]
+ ifFalse: [objectOrClass class].
+ targetClass := classOrMetaclass isMeta
+ ifTrue: [classOrMetaclass theNonMetaClass]
+ ifFalse: [classOrMetaclass].
+ ^ ToolSet browseClass: targetClass!
- browseClass: aBehavior
- | targetClass |
- targetClass := aBehavior isMeta
- ifTrue: [aBehavior theNonMetaClass]
- ifFalse: [aBehavior ].
- ^ ToolSet browse: targetClass selector: nil!