<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">
<p>+1 :-)</p>
<p><br>
</p>
<p>Some really minor critic that probably no one else cares:</p>
<p><br>
</p>
<p>> <span style="font-size:12pt">+        | currIdx |</span></p>
<div><br>
</div>
<div>I don't think Smalltalk code needs such counterintuitive abbreviations.</div>
<div><br>
</div>
<div>> <span>{currIdx. messageList size.} min</span></div>
<div><span><br>
</span></div>
<div><span>could be written as: (currIdx min: messageList size).</span></div>
<div><span><br>
</span></div>
<div><span>But it's rather a question of taste, it's nice to have some people caring about our wonderful Squeak tools :-)</span></div>
<div><span><br>
</span></div>
<div><span>Best,</span></div>
<div><span>Christoph</span></div>
<p></p>
<div id="x_Signature">
<div id="x_divtagdefaultwrapper" dir="ltr" style="font-size:12pt; color:rgb(0,0,0); font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div name="x_divtagdefaultwrapper" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:; margin:0">
<div><font size="2" color="#808080"></font></div>
</div>
</div>
</div>
</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> Samstag, 8. Februar 2020 10:41:33<br>
<b>An:</b> squeak-dev@lists.squeakfoundation.org<br>
<b>Betreff:</b> [squeak-dev] The Inbox: Tools-jr.930.mcz</font>
<div> </div>
</div>
</div>
<font size="2"><span style="font-size:10pt;">
<div class="PlainText">A new version of Tools was added to project The Inbox:<br>
<a href="http://source.squeak.org/inbox/Tools-jr.930.mcz">http://source.squeak.org/inbox/Tools-jr.930.mcz</a><br>
<br>
==================== Summary ====================<br>
<br>
Name: Tools-jr.930<br>
Author: jr<br>
Time: 8 February 2020, 10:41:43.910741 am<br>
UUID: c64775b8-3ea3-9d41-81a3-8eea293ee438<br>
Ancestors: Tools-jr.929, Tools-mt.929<br>
<br>
Speed up removing of messages from MessageTrace.<br>
<br>
In an existing MessageTrace, try "senders of at:put:", then remove them again with "remove from this browser (d)". Took several seconds before, finishes in an instant now.<br>
<br>
Replaces autoSelectStrings and messageSelections with new OrderedCollections. The other method deleteFromMessageList: removes one element from the existing collections instead.<br>
<br>
=============== Diff against Tools-jr.929 ===============<br>
<br>
Item was added:<br>
+ ----- Method: MessageSet>>deleteAllFromMessageList: (in category 'message functions') -----<br>
+ deleteAllFromMessageList: aCollection<br>
+        "Delete the given messages from the receiver's message list"<br>
+        | currIdx |<br>
+        currIdx := self messageListIndex.<br>
+        messageList := messageList copyWithoutAll: aCollection.<br>
+        messageList ifNotEmpty: [self messageListIndex: {currIdx. messageList size.} min]!<br>
<br>
Item was added:<br>
+ ----- Method: MessageTrace>>deleteAllFromMessageList: (in category 'building') -----<br>
+ deleteAllFromMessageList: aCollection<br>
+        "Delete the given messages from the receiver's message list"<br>
+ <br>
+        | newAutoSelectStrings newMessageSelections newSize set |<br>
+        newSize := self messageList size - aCollection size.<br>
+        newAutoSelectStrings := OrderedCollection new: newSize.<br>
+        newMessageSelections := OrderedCollection new: newSize.<br>
+        set := aCollection asSet.<br>
+        self messageList withIndexDo: [:each :index |<br>
+                (set includes: each) ifFalse:<br>
+                        [newAutoSelectStrings add: (autoSelectStrings at: index).<br>
+                        newMessageSelections add: (messageSelections at: index)]].<br>
+        super deleteAllFromMessageList: aCollection.<br>
+        autoSelectStrings := newAutoSelectStrings.<br>
+        messageSelections := newMessageSelections.<br>
+        anchorIndex ifNotNil:<br>
+                [ anchorIndex := anchorIndex min: messageList size ]!<br>
<br>
Item was changed:<br>
  ----- Method: MessageTrace>>removeMessageFromBrowser (in category 'building') -----<br>
  removeMessageFromBrowser<br>
         | indexToSelect |<br>
         "Try to keep the same selection index."<br>
         indexToSelect := (messageSelections indexOf: true) max: 1.<br>
+        self deleteAllFromMessageList: self selectedMessages.<br>
-        self selectedMessages do: [ :eachMethodReference | self deleteFromMessageList: eachMethodReference ].<br>
         self deselectAll.<br>
         messageSelections ifNotEmpty:<br>
                 [ messageSelections <br>
                         at: (indexToSelect min: messageSelections size)  "safety"<br>
                         put: true ].<br>
         anchorIndex := indexToSelect min: messageSelections size.<br>
         self <br>
                 messageListIndex: anchorIndex ; <br>
                 reformulateList!<br>
<br>
<br>
</div>
</span></font>
</body>
</html>