<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Exchange Server">
<!-- converted from text --><style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>
</head>
<body>
<meta content="text/html; charset=UTF-8">
<style type="text/css" style="">
<!--
p
        {margin-top:0;
        margin-bottom:0}
-->
</style>
<div dir="ltr">
<div id="x_divtagdefaultwrapper" dir="ltr" style="font-size:12pt; color:#000000; font-family:Calibri,Helvetica,sans-serif">
<img size="74857" id="x_img211029" tabindex="0" style="max-width:99.9%" src="cid:9261c929-cc4e-43c0-b87d-0130dbca7c0a"></div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="x_divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>Von:</b> Squeak-dev <squeak-dev-bounces@lists.squeakfoundation.org> im Auftrag von commits@source.squeak.org <commits@source.squeak.org><br>
<b>Gesendet:</b> Montag, 20. September 2021 20:33:54<br>
<b>An:</b> squeak-dev@lists.squeakfoundation.org<br>
<b>Betreff:</b> [squeak-dev] The Inbox: Morphic-ct.1781.mcz</font>
<div> </div>
</div>
</div>
<font size="2"><span style="font-size:10pt;">
<div class="PlainText">A new version of Morphic was added to project The Inbox:<br>
<a href="http://source.squeak.org/inbox/Morphic-ct.1781.mcz">http://source.squeak.org/inbox/Morphic-ct.1781.mcz</a><br>
<br>
==================== Summary ====================<br>
<br>
Name: Morphic-ct.1781<br>
Author: ct<br>
Time: 20 September 2021, 8:33:47.810659 pm<br>
UUID: aaa4f710-2270-7b48-8238-17f7634138d1<br>
Ancestors: Morphic-ul.1780<br>
<br>
Proposal: Rearrange items in the new changes menu of the docking bar so that static items will always appears at the top. Run construction of dynamic items asynchronously to keep the UI responsive.<br>
<br>
On my machine with slow file-system access, this increases the responsiveness of the docking bar *significantly*. You have no idea how often I have been moaning about this particular menu when I was just hitting Ctrl + 9 by accident and had to take a mandatory
 break ... :-)<br>
<br>
This resolves all the issues I have raised in <a href="http://lists.squeakfoundation.org/pipermail/squeak-dev/2021-April/215029.html">
http://lists.squeakfoundation.org/pipermail/squeak-dev/2021-April/215029.html</a> and
<a href="http://lists.squeakfoundation.org/pipermail/squeak-dev/2021-May/215314.html">
http://lists.squeakfoundation.org/pipermail/squeak-dev/2021-May/215314.html</a>. :-)<br>
<br>
=============== Diff against Morphic-ul.1780 ===============<br>
<br>
Item was changed:<br>
  ----- Method: TheWorldMainDockingBar>>listChangesOn: (in category 'submenu - changes') -----<br>
  listChangesOn: menu<br>
  <br>
+        menu defaultTarget: self.<br>
+        menu addTranslatedList: #(<br>
+                ('Simple Change Sorter'                         browseChanges)<br>
+                ('Dual Change Sorter'                                   browseChangesDual)<br>
+                ('Browse changed methods'               browseChangedMethods)).<br>
+        <br>
+        self flag: #hack. "To avoid relayout of static items when dynamic items with icons from below will added, add blank icons right now."<br>
+        menu addBlankIconsIfNecessary: (MenuIcons blankIconOfWidth: RealEstateAgent defaultIconExtent x).<br>
+        <br>
+        [| latestMethodChanges latestClassChanges|<br>
-        | latestMethodChanges latestClassChanges|<br>
         latestMethodChanges := (Array streamContents: [:s |<br>
                 ChangeSet current changedMethodsDo: [:method :changeType :dateAndTime :category |<br>
                         s nextPut: { dateAndTime. method. changeType. category }]])<br>
                         sorted: [:a :b | a first >= b first].<br>
- <br>
-        1 to: (10 min: latestMethodChanges size) do: [:index | | spec method |<br>
-                spec := latestMethodChanges at: index.<br>
-                method := spec second.<br>
-                menu addItem: [:item |<br>
-                        item<br>
-                                contents: ('{1} {2} \{{3}\} \{{4}\}' format: {method methodClass. method selector. spec fourth. method methodClass category}) ;<br>
-                                target: ToolSet;<br>
-                                balloonText: spec third asString;<br>
-                                icon: ((#(remove addedThenRemoved) includes: spec third) ifTrue: [MenuIcons smallDeleteIcon] ifFalse: [<br>
-                                        spec third = #add ifTrue: [MenuIcons smallNewIcon] ifFalse: [MenuIcons blankIcon]]);<br>
-                                selector: (method isInstalled ifTrue: [#browseMethod:] ifFalse: [#browseMethodVersion:]);<br>
-                                arguments: {method}]].<br>
-                                <br>
-        latestClassChanges := (Array streamContents: [:s |<br>
-                ChangeSet current changedClassesDo: [:class :changeTypes :dateAndTime :category |<br>
-                        "We are not interested in classes whose method's did only change."<br>
-                        changeTypes ifNotEmpty: [s nextPut: { dateAndTime. class. changeTypes. category }]]])<br>
-                        sorted: [:a :b | a first >= b first].<br>
- <br>
-        latestClassChanges ifNotEmpty: [menu addLine].<br>
-        1 to: (10 min: latestClassChanges size) do: [:index | | spec class |<br>
-                spec := latestClassChanges at: index.<br>
-                class := spec second.<br>
-                menu addItem: [:item |<br>
-                        item<br>
-                                contents: ('{1} \{{2}\}' format: {class name. spec fourth }) ;<br>
-                                target: ToolSet;<br>
-                                balloonText: (spec third sorted joinSeparatedBy: Character space);<br>
-                                icon: ((spec third includesAnyOf: #(remove addedThenRemoved))<br>
-                                        ifTrue: [MenuIcons smallDeleteIcon]<br>
-                                        ifFalse: [<br>
-                                                (spec third includes: #add)<br>
-                                                        ifTrue: [MenuIcons smallNewIcon]<br>
-                                                        ifFalse: [MenuIcons blankIcon]]);<br>
-                                selector: ((spec third includes: #remove) ifTrue: [#inspect:] ifFalse: [#browseClass:]);<br>
-                                arguments: {class}]].<br>
         <br>
+        Project current addDeferredUIMessage: [<br>
+                menu addLine.<br>
+                <br>
+                1 to: (10 min: latestMethodChanges size) do: [:index | | spec method |<br>
+                        spec := latestMethodChanges at: index.<br>
+                        method := spec second.<br>
+                        menu addItem: [:item |<br>
+                                item<br>
+                                        contents: ('{1} {2} \{{3}\} \{{4}\}' format: {method methodClass. method selector. spec fourth. method methodClass category}) ;<br>
+                                        target: ToolSet;<br>
+                                        balloonText: spec third asString;<br>
+                                        icon: ((#(remove addedThenRemoved) includes: spec third) ifTrue: [MenuIcons smallDeleteIcon] ifFalse: [<br>
+                                                spec third = #add ifTrue: [MenuIcons smallNewIcon] ifFalse: [MenuIcons blankIcon]]);<br>
+                                        selector: (method isInstalled ifTrue: [#browseMethod:] ifFalse: [#browseMethodVersion:]);<br>
+                                        arguments: {method}]].<br>
+                                        <br>
+                latestClassChanges := (Array streamContents: [:s |<br>
+                        ChangeSet current changedClassesDo: [:class :changeTypes :dateAndTime :category |<br>
+                                "We are not interested in classes whose method's did only change."<br>
+                                changeTypes ifNotEmpty: [s nextPut: { dateAndTime. class. changeTypes. category }]]])<br>
+                                sorted: [:a :b | a first >= b first].<br>
-        menu defaultTarget: self.<br>
-        menu addTranslatedList: #(<br>
-                -<br>
-                ('Browse current change set'            browseChangeSet)<br>
-                ('Browse changed methods'               browseChangedMethods)<br>
-                -<br>
-                ('Simple Change Sorter'                         browseChanges)<br>
-                ('Dual Change Sorter'                                   browseChangesDual)).<br>
  <br>
+                latestClassChanges ifNotEmpty: [menu addLine].<br>
+                1 to: (10 min: latestClassChanges size) do: [:index | | spec class |<br>
+                        spec := latestClassChanges at: index.<br>
+                        class := spec second.<br>
+                        menu addItem: [:item |<br>
+                                item<br>
+                                        contents: ('{1} \{{2}\}' format: {class name. spec fourth }) ;<br>
+                                        target: ToolSet;<br>
+                                        balloonText: (spec third sorted joinSeparatedBy: Character space);<br>
+                                        icon: ((spec third includesAnyOf: #(remove addedThenRemoved))<br>
+                                                ifTrue: [MenuIcons smallDeleteIcon]<br>
+                                                ifFalse: [<br>
+                                                        (spec third includes: #add)<br>
+                                                                ifTrue: [MenuIcons smallNewIcon]<br>
+                                                                ifFalse: [MenuIcons blankIcon]]);<br>
+                                        selector: ((spec third includes: #remove) ifTrue: [#inspect:] ifFalse: [#browseClass:]);<br>
+                                        arguments: {class}]]]] forkAt: Processor userBackgroundPriority.!<br>
- <br>
- !<br>
<br>
<br>
</div>
</span></font>
</body>
</html>