Merge jv
authorJan Vrany <jan.vrany@fit.cvut.cz>
Mon, 09 May 2016 21:47:57 +0200
branchjv
changeset 16570 dc5e958a20dc
parent 16459 85d703589d34 (current diff)
parent 16490 9c07e05feac0 (diff)
child 16571 cf319f2e56d0
Merge
AbstractSettingsApplication.st
ChangesBrowser.st
ContextInspectorView.st
FileDialog.st
FindFileApplication.st
SettingsDialog.st
SystemBrowser.st
Tools__FontSettingsApplication.st
Tools__NavigationState.st
Tools__NewSystemBrowser.st
Tools__SearchDialog.st
WorkspaceApplication.st
libtool.rc
resources/de.rs
--- a/AbstractSettingsApplication.st	Fri May 06 06:55:08 2016 +0200
+++ b/AbstractSettingsApplication.st	Mon May 09 21:47:57 2016 +0200
@@ -8552,7 +8552,7 @@
 
     BRIDGE::SmalltalkBridge notNil ifTrue:[
         BRIDGE::SmalltalkBridge verbose ~= (self smalltalkBridgeVerbose value) ifTrue:[^ true].
-        BRIDGE::SmalltalkBridge singletonInstanceOrNil notNil ifTrue:[
+        BRIDGE::SmalltalkBridge defaultInstanceOrNil notNil ifTrue:[
             (self smalltalkBridgeEnabled value) ifFalse:[^ true].
         ] ifFalse:[
         (self smalltalkBridgeEnabled value) ifTrue:[^ true].
--- a/ChangesBrowser.st	Fri May 06 06:55:08 2016 +0200
+++ b/ChangesBrowser.st	Mon May 09 21:47:57 2016 +0200
@@ -23,7 +23,7 @@
 		showingDiffs diffViewBox autoloadAsRequired
 		classesNotToBeAutoloaded encodingIfKnown
 		ignorePublicPrivateCategories changeListSelectionHolder
-		defaultApplicationForVAGEClasses'
+		defaultApplicationForVAGEClasses infoHolder'
 	classVariableNames:'CompressSnapshotInfo NoColoring ShowWarningDialogs
 		DefaultAutoCompare DefaultShowingDiffs LastEnforcedNameSpace
 		KeepEnforcedNameSpace'
@@ -211,34 +211,29 @@
         (
          (MenuItem
             label: 'File'
-            translateLabel: true
             submenu: 
            (Menu
               (
                (MenuItem
                   label: 'Compress'
                   itemValue: doCompress
-                  translateLabel: true
                   isVisible: notEditingClassSource
                 )
                (MenuItem
                   enabled: hasSingleSelection
                   label: 'Compress for Class'
                   itemValue: doCompressClass
-                  translateLabel: true
                   isVisible: notEditingClassSource
                 )
                (MenuItem
                   enabled: hasSingleSelection
                   label: 'Compress for Class && Selector'
                   itemValue: doCompressSelector
-                  translateLabel: true
                   isVisible: notEditingClassSource
                 )
                (MenuItem
                   label: 'Compare and Compress'
                   itemValue: doCompareAndCompress
-                  translateLabel: true
                   isVisible: notEditingClassSource
                 )
                (MenuItem
@@ -249,14 +244,12 @@
                   enabled: hasSingleSelection
                   label: 'Fileout && Delete all Changes for Class'
                   itemValue: doFileoutAndDeleteClassAll
-                  translateLabel: true
                   isVisible: notEditingClassSource
                 )
                (MenuItem
                   enabled: hasSelection
                   label: 'CheckIn && Delete all Changes for Class'
                   itemValue: doCheckinAndDeleteClassAll
-                  translateLabel: true
                   isVisible: notEditingClassSource
                 )
                (MenuItem
@@ -267,25 +260,21 @@
                   enabled: hasSelection
                   label: 'Save In...'
                   itemValue: doSave
-                  translateLabel: true
                 )
                (MenuItem
                   enabled: hasSingleSelection
                   label: 'Save to End In...'
                   itemValue: doSaveRest
-                  translateLabel: true
                 )
                (MenuItem
                   enabled: hasSingleSelection
                   label: 'Save for Class to End In...'
                   itemValue: doSaveClassRest
-                  translateLabel: true
                 )
                (MenuItem
                   enabled: hasSingleSelection
                   label: 'Save all for Class In...'
                   itemValue: doSaveClassAll
-                  translateLabel: true
                 )
                (MenuItem
                   label: '-'
@@ -293,13 +282,11 @@
                (MenuItem
                   label: 'Writeback ClassFile'
                   itemValue: doWriteBack
-                  translateLabel: true
                   isVisible: editingClassSource
                 )
                (MenuItem
                   label: 'Writeback ChangeFile'
                   itemValue: doWriteBack
-                  translateLabel: true
                   isVisible: notEditingClassSource
                 )
                (MenuItem
@@ -308,7 +295,6 @@
                (MenuItem
                   label: 'Update'
                   itemValue: doUpdate
-                  translateLabel: true
                 )
                (MenuItem
                   label: '-'
@@ -316,7 +302,6 @@
                (MenuItem
                   label: 'Exit'
                   itemValue: menuExit
-                  translateLabel: true
                 )
                )
               nil
@@ -325,7 +310,6 @@
           )
          (MenuItem
             label: 'CHANGE'
-            translateLabel: true
             submenu: 
            (Menu
               (
@@ -333,43 +317,36 @@
                   enabled: hasSelection
                   label: 'Apply'
                   itemValue: doApply
-                  translateLabel: true
                 )
                (MenuItem
                   enabled: hasSingleSelection
                   label: 'Apply to End'
                   itemValue: doApplyRest
-                  translateLabel: true
                 )
                (MenuItem
                   enabled: hasSingleSelection
                   label: 'Apply from Begin'
                   itemValue: doApplyFromBeginning
-                  translateLabel: true
                 )
                (MenuItem
                   enabled: hasSingleSelection
                   label: 'Apply for Class to End'
                   itemValue: doApplyClassRest
-                  translateLabel: true
                 )
                (MenuItem
                   enabled: hasSingleSelection
                   label: 'Apply for Class from Begin'
                   itemValue: doApplyClassFromBeginning
-                  translateLabel: true
                 )
                (MenuItem
                   enabled: hasNoSelection
                   label: 'Apply All'
                   itemValue: doApplyAll
-                  translateLabel: true
                 )
                (MenuItem
                   enabled: hasSingleSelection
                   label: 'Apply to Conflict or End'
                   itemValue: doApplyToConflictOrEnd
-                  translateLabel: true
                 )
                (MenuItem
                   label: '-'
@@ -378,64 +355,54 @@
                   enabled: hasSelection
                   label: 'Delete'
                   itemValue: doDelete
-                  translateLabel: true
                 )
                (MenuItem
                   enabled: hasSingleSelection
                   label: 'Delete to End'
                   itemValue: doDeleteRest
-                  translateLabel: true
                 )
                (MenuItem
                   enabled: hasSingleSelection
                   label: 'Delete from Begin'
                   itemValue: doDeleteFromBeginning
-                  translateLabel: true
                 )
                (MenuItem
                   enabled: hasSingleSelection
                   label: 'Delete for Class to End'
                   itemValue: doDeleteClassRest
-                  translateLabel: true
                 )
                (MenuItem
                   enabled: hasSingleSelection
                   label: 'Delete for Class from Begin'
                   itemValue: doDeleteClassFromBeginning
-                  translateLabel: true
                 )
                (MenuItem
                   enabled: hasSelection
                   label: 'Delete all for Class'
                   itemValue: doDeleteClassAll
-                  translateLabel: true
                   isVisible: hasNoMultiSelection
                 )
                (MenuItem
                   enabled: hasSelection
                   label: 'Delete all for Class && its Private Classes'
                   itemValue: doDeleteClassAndPrivateClassesAll
-                  translateLabel: true
                   isVisible: hasNoMultiSelection
                 )
                (MenuItem
                   enabled: hasSelection
                   label: 'Delete all for Namespace'
                   itemValue: doDeleteAllForNamespace
-                  translateLabel: true
                 )
                (MenuItem
                   enabled: hasSelection
                   label: 'Delete all for Classes'
                   itemValue: doDeleteClassAll
-                  translateLabel: true
                   isVisible: hasMultiSelection
                 )
                (MenuItem
                   enabled: hasSelection
                   label: 'Delete all for Classes && their Private Classes'
                   itemValue: doDeleteClassAndPrivateClassesAll
-                  translateLabel: true
                   isVisible: hasMultiSelection
                 )
                (MenuItem
@@ -443,16 +410,26 @@
                 )
                (MenuItem
                   enabled: hasSelection
+                  label: 'Delete older Versions of Selected Method'
+                  itemValue: doDeleteClassSelectorOlder
+                  isVisible: hasNoMultiSelectionHolder
+                )
+               (MenuItem
+                  enabled: hasSelection
+                  label: 'Delete older Versions of all Selected Methods'
+                  itemValue: doDeleteClassSelectorOlder
+                  isVisible: hasMultiSelectionHolder
+                )
+               (MenuItem
+                  enabled: hasSelection
                   label: 'Delete all Versions of Selected Method'
                   itemValue: doDeleteClassSelectorAll
-                  translateLabel: true
                   isVisible: hasNoMultiSelectionHolder
                 )
                (MenuItem
                   enabled: hasSelection
                   label: 'Delete all Versions of all Selected Methods'
                   itemValue: doDeleteClassSelectorAll
-                  translateLabel: true
                   isVisible: hasMultiSelectionHolder
                 )
                (MenuItem
@@ -462,7 +439,6 @@
                   enabled: hasSingleSelection
                   label: 'Compare with Current'
                   itemValue: doCompare
-                  translateLabel: true
                 )
                (MenuItem
                   label: '-'
@@ -471,7 +447,6 @@
                   enabled: hasSelection
                   label: 'Make Change a Patch'
                   itemValue: doMakePatch
-                  translateLabel: true
                 )
                )
               nil
@@ -480,38 +455,32 @@
           )
          (MenuItem
             label: 'Search'
-            translateLabel: true
             submenu: 
            (Menu
               (
                (MenuItem
                   label: 'Class...'
                   itemValue: findClass
-                  translateLabel: true
                 )
                (MenuItem
                   enabled: hasSelection
                   label: 'First for Class'
                   itemValue: findFirstForClass
-                  translateLabel: true
                 )
                (MenuItem
                   enabled: hasSelection
                   label: 'Previous for Class'
                   itemValue: findPreviousForClass
-                  translateLabel: true
                 )
                (MenuItem
                   enabled: hasSelection
                   label: 'Next for Class'
                   itemValue: findNextForClass
-                  translateLabel: true
                 )
                (MenuItem
                   enabled: hasSelection
                   label: 'Last for Class'
                   itemValue: findLastForClass
-                  translateLabel: true
                 )
                (MenuItem
                   label: '-'
@@ -519,19 +488,16 @@
                (MenuItem
                   label: 'Selector...'
                   itemValue: findSelector
-                  translateLabel: true
                 )
                (MenuItem
                   enabled: hasSelection
                   label: 'Previous for Selector'
                   itemValue: findPreviousForSelector
-                  translateLabel: true
                 )
                (MenuItem
                   enabled: hasSelection
                   label: 'Next for Selector'
                   itemValue: findNextForSelector
-                  translateLabel: true
                 )
                (MenuItem
                   label: '-'
@@ -539,19 +505,16 @@
                (MenuItem
                   label: 'String...'
                   itemValue: findString
-                  translateLabel: true
                 )
                (MenuItem
                   enabled: hasSelection
                   label: 'Previous with String'
                   itemValue: findPreviousForString
-                  translateLabel: true
                 )
                (MenuItem
                   enabled: hasSelection
                   label: 'Next with String'
                   itemValue: findNextForString
-                  translateLabel: true
                 )
                (MenuItem
                   label: '-'
@@ -560,13 +523,11 @@
                   enabled: hasSelection
                   label: 'Previous Difference'
                   itemValue: findPreviousDifference
-                  translateLabel: true
                 )
                (MenuItem
                   enabled: hasSelection
                   label: 'Next Difference'
                   itemValue: findNextDifference
-                  translateLabel: true
                 )
                (MenuItem
                   label: '-'
@@ -575,18 +536,15 @@
                   enabled: hasSelection
                   label: 'Previous Snapshot'
                   itemValue: findPreviousSnapshot
-                  translateLabel: true
                 )
                (MenuItem
                   enabled: hasSelection
                   label: 'Next Snapshot'
                   itemValue: findNextSnapshot
-                  translateLabel: true
                 )
                (MenuItem
                   label: 'Last Snapshot'
                   itemValue: findLastSnapshot
-                  translateLabel: true
                 )
                )
               nil
@@ -595,7 +553,6 @@
           )
          (MenuItem
             label: 'Browse'
-            translateLabel: true
             submenu: 
            (Menu
               (
@@ -603,7 +560,6 @@
                   enabled: hasSingleSelection
                   label: 'Class'
                   itemValue: doBrowse
-                  translateLabel: true
                 )
                (MenuItem
                   label: '-'
@@ -611,12 +567,10 @@
                (MenuItem
                   label: 'Senders...'
                   itemValue: doBrowseSenders
-                  translateLabel: true
                 )
                (MenuItem
                   label: 'Implementors...'
                   itemValue: doBrowseImplementors
-                  translateLabel: true
                 )
                )
               nil
@@ -625,28 +579,23 @@
           )
          (MenuItem
             label: 'Settings'
-            translateLabel: true
             submenu: 
            (Menu
               (
                (MenuItem
                   label: 'Auto Compare'
-                  translateLabel: true
                   indication: autoCompare
                 )
                (MenuItem
                   label: 'Autoload As Required'
-                  translateLabel: true
                   indication: autoloadAsRequired
                 )
                (MenuItem
                   label: 'Show Diffs'
-                  translateLabel: true
                   indication: showingDiffs
                 )
                (MenuItem
                   label: 'Auto Update'
-                  translateLabel: true
                   indication: autoUpdate
                 )
                (MenuItem
@@ -654,14 +603,13 @@
                 )
                (MenuItem
                   label: 'Add to ChangeSet when Applying'
-                  translateLabel: true
                   indication: updateChangeSet
                 )
                (MenuItem
-                  label: 'Ignore public/private categories (Dolphin code)'
+                  label: 'Ignore Public/Private in Categories (Dolphin code)'
                   itemValue: ignorePublicPrivateCategories:
-                  translateLabel: true
                   indication: ignorePublicPrivateCategories
+                  isVisible: false
                 )
                (MenuItem
                   label: '-'
@@ -669,12 +617,10 @@
                (MenuItem
                   label: 'Apply into Package...'
                   itemValue: setEnforcedPackage
-                  translateLabel: true
                 )
                (MenuItem
                   label: 'Apply into NameSpace...'
                   itemValue: setEnforcedNameSpace
-                  translateLabel: true
                 )
                (MenuItem
                   label: '-'
@@ -682,7 +628,6 @@
                (MenuItem
                   label: 'Settings...'
                   itemValue: openSettingsDialog
-                  translateLabel: true
                 )
                )
               nil
@@ -691,7 +636,6 @@
           )
          (MenuItem
             label: 'MENU_Help'
-            translateLabel: true
             startGroup: conditionalRight
             submenu: 
            (Menu
@@ -699,7 +643,6 @@
                (MenuItem
                   label: 'ChangesBrowser Documentation'
                   itemValue: openHTMLDocument:
-                  translateLabel: true
                   argument: 'tools/cbrowser/TOP.html'
                 )
                (MenuItem
@@ -708,7 +651,6 @@
                (MenuItem
                   label: 'About ChangesBrowser...'
                   itemValue: openAboutThisApplication
-                  translateLabel: true
                 )
                )
               nil
@@ -719,8 +661,6 @@
         nil
         nil
       )
-
-    "Modified: / 25-12-2011 / 11:21:56 / cg"
 !
 
 toolbarMenuSpec
@@ -1415,7 +1355,7 @@
 !
 
 initialize
-    |panel v upperFrame buttonPanel menuPanel mH toolbarMenu tmH
+    |panel infoLabel v upperFrame buttonPanel menuPanel mH toolbarMenu tmH
      checkBox oldStyle codeViewBox lbl applyInOriginal|
 
     "/ oldStyle := true.
@@ -1479,11 +1419,27 @@
         mH := 0.0
     ].
 
-    panel := VariableVerticalPanel origin:(0.0 @ mH)
-                                   corner:(1.0 @ 1.0)
-                              borderWidth:0
-                                       in:self.
-
+    panel := VariableVerticalPanel in:self. 
+    "/ panel origin:(0.0 @ mH) corner:(1.0 @ 1.0)
+    panel layout:(LayoutFrame
+                    leftFraction:0.0 offset:0
+                    rightFraction:1.0 offset:0
+                    topFraction:0.0 offset:mH
+                    bottomFraction:1.0 offset:-30).
+    panel borderWidth:0.
+    
+    infoLabel := Label in:self.
+    infoLabel layout:(LayoutFrame
+                    leftFraction:0.0 offset:0
+                    rightFraction:1.0 offset:0
+                    topFraction:1.0 offset:-28
+                    bottomFraction:1.0 offset:-2).
+    infoLabel borderWidth:0.
+    infoLabel sizeFixed:true.
+    infoLabel level:-1.
+    infoLabel adjust:#left.
+    infoLabel labelChannel:(infoHolder := '' asValue).
+    
     upperFrame := panel.
     oldStyle ifTrue:[
         upperFrame := VariableHorizontalPanel origin:(0.0 @ 0.0) corner:(1.0 @ 0.3) in:panel.
@@ -1590,7 +1546,7 @@
     self setupTabSpec.
     self readChangesFileInBackground:true.
     self setChangeList.
-    changeListView action:[:lineNr | self changeSelection:lineNr].
+    changeListView action:[:lineNrOrCollection | self changeSelection:lineNrOrCollection].
     Processor addTimedBlock:checkBlock afterSeconds:5.
 
     "Created: 24.7.1997 / 18:06:12 / cg"
@@ -2064,35 +2020,37 @@
     |rangeEnd rangeStart firstDeleted|
 
     changeListView selection size <= 5 ifTrue:[
-	self withSelectedChangesReverseDo:[:changeNr |
-	    self deleteChange:changeNr.
-	    self autoSelectOrEnd:changeNr
-	].
-	^ self
+        self withSelectedChangesReverseDo:[:changeNr |
+            self deleteChange:changeNr.
+            self autoSelectOrEnd:changeNr
+        ].
+        self showNumberOfChanges.
+        ^ self
     ].
 
     self withSelectedChangesReverseDo:[:changeNr |
-	rangeEnd isNil ifTrue:[
-	    rangeEnd := rangeStart := changeNr
-	] ifFalse:[
-	    (changeNr = (rangeEnd + 1)) ifTrue:[
-		rangeEnd := changeNr
-	    ] ifFalse:[
-		(changeNr = (rangeStart - 1)) ifTrue:[
-		    rangeStart := changeNr
-		] ifFalse:[
-		    self deleteChangesFrom:rangeStart to:rangeEnd.
-		    firstDeleted := (firstDeleted ? rangeStart) min:rangeStart.
-		    rangeStart := rangeEnd := nil.
-		].
-	    ].
-	].
+        rangeEnd isNil ifTrue:[
+            rangeEnd := rangeStart := changeNr
+        ] ifFalse:[
+            (changeNr = (rangeEnd + 1)) ifTrue:[
+                rangeEnd := changeNr
+            ] ifFalse:[
+                (changeNr = (rangeStart - 1)) ifTrue:[
+                    rangeStart := changeNr
+                ] ifFalse:[
+                    self deleteChangesFrom:rangeStart to:rangeEnd.
+                    firstDeleted := (firstDeleted ? rangeStart) min:rangeStart.
+                    rangeStart := rangeEnd := nil.
+                ].
+            ].
+        ].
     ].
     rangeStart notNil ifTrue:[
-	self deleteChangesFrom:rangeStart to:rangeEnd.
-	firstDeleted := (firstDeleted ? rangeStart) min:rangeStart.
-    ].
-    self autoSelectOrEnd:firstDeleted
+        self deleteChangesFrom:rangeStart to:rangeEnd.
+        firstDeleted := (firstDeleted ? rangeStart) min:rangeStart.
+    ].
+    self autoSelectOrEnd:firstDeleted.
+    self showNumberOfChanges
 !
 
 doDeleteAllForNamespace
@@ -2134,16 +2092,21 @@
     ].
 
     self setChangeList.
-    self autoSelectOrEnd:lastChangeNr
+    self autoSelectOrEnd:lastChangeNr.
 !
 
 doDeleteAndSelectPrevious
     "delete currently selected change(s)"
 
     self withSelectedChangesReverseDo:[:changeNr |
-	self deleteChange:changeNr.
-	self autoSelectOrEnd:changeNr-1
-    ]
+        self deleteChange:changeNr.
+        self autoSelectOrEnd:changeNr-1
+    ].
+    
+    "/mh - don't we need a 
+    "/  self setChangeList
+    "/ here?
+    self showNumberOfChanges
 !
 
 doDeleteClassAll
@@ -2154,36 +2117,36 @@
     lastChangeNr := -1.
     classNamesToDelete := Set new.
     self withSelectedChangesDo:[:changeNr |
-	|classNameToDelete|
-
-	classNameToDelete := self classNameOfChange:changeNr.
-	classNameToDelete notNil ifTrue:[
-	    classNamesToDelete add:classNameToDelete.
-	].
-	lastChangeNr := lastChangeNr max:changeNr.
+        |classNameToDelete|
+
+        classNameToDelete := self classNameOfChange:changeNr.
+        classNameToDelete notNil ifTrue:[
+            classNamesToDelete add:classNameToDelete.
+        ].
+        lastChangeNr := lastChangeNr max:changeNr.
     ].
 
     overAllNumDeletedBefore := 0.
     changeListView setSelection:nil.
 
     self withExecuteCursorDo:[
-	classNamesToDelete do:[:classNameToDelete |
-	    |numDeletedBefore|
-
-	    self silentDeleteChangesFor:classNameToDelete
-				   from:lastChangeNr
-				     to:(self numberOfChanges).
-	    numDeletedBefore := self
-				   silentDeleteChangesFor:classNameToDelete
-				   from:1
-				   to:(lastChangeNr-1).
-	    lastChangeNr := lastChangeNr - numDeletedBefore.
-	    overAllNumDeletedBefore := overAllNumDeletedBefore + numDeletedBefore.
-	].
+        classNamesToDelete do:[:classNameToDelete |
+            |numDeletedBefore|
+
+            self silentDeleteChangesFor:classNameToDelete
+                                   from:lastChangeNr
+                                     to:(self numberOfChanges).
+            numDeletedBefore := self
+                                   silentDeleteChangesFor:classNameToDelete
+                                   from:1
+                                   to:(lastChangeNr-1).
+            lastChangeNr := lastChangeNr - numDeletedBefore.
+            overAllNumDeletedBefore := overAllNumDeletedBefore + numDeletedBefore.
+        ].
     ].
 
     self setChangeList.
-    self autoSelectOrEnd:lastChangeNr
+    self autoSelectOrEnd:lastChangeNr.
 
     "Created: / 13.12.1995 / 16:07:14 / cg"
     "Modified: / 28.1.1998 / 20:42:14 / cg"
@@ -2198,38 +2161,38 @@
     lastChangeNr := -1.
     classNamesToDelete := Set new.
     self withSelectedChangesDo:[:changeNr |
-	|classNameToDelete|
-
-	classNameToDelete := self ownerClassNameOfChange:changeNr.
-	classNameToDelete notNil ifTrue:[
-	    classNamesToDelete add:classNameToDelete.
-	].
-	lastChangeNr := lastChangeNr max:changeNr.
+        |classNameToDelete|
+
+        classNameToDelete := self ownerClassNameOfChange:changeNr.
+        classNameToDelete notNil ifTrue:[
+            classNamesToDelete add:classNameToDelete.
+        ].
+        lastChangeNr := lastChangeNr max:changeNr.
     ].
 
     overAllNumDeletedBefore := 0.
     changeListView setSelection:nil.
 
     self withExecuteCursorDo:[
-	classNamesToDelete do:[:classNameToDelete |
-	    | changeNr numDeletedBefore|
-
-	    classNameToDelete notNil ifTrue:[
-		changeListView setSelection:nil.
-		self silentDeleteChangesForClassAndPrivateClasses:classNameToDelete
-				       from:lastChangeNr
-					 to:(self numberOfChanges).
-		numDeletedBefore := self
-				       silentDeleteChangesForClassAndPrivateClasses:classNameToDelete
-				       from:1
-				       to:(lastChangeNr-1).
-		lastChangeNr := lastChangeNr - numDeletedBefore.
-		overAllNumDeletedBefore := overAllNumDeletedBefore + numDeletedBefore.
-	    ]
-	]
+        classNamesToDelete do:[:classNameToDelete |
+            | changeNr numDeletedBefore|
+
+            classNameToDelete notNil ifTrue:[
+                changeListView setSelection:nil.
+                self silentDeleteChangesForClassAndPrivateClasses:classNameToDelete
+                                       from:lastChangeNr
+                                         to:(self numberOfChanges).
+                numDeletedBefore := self
+                                       silentDeleteChangesForClassAndPrivateClasses:classNameToDelete
+                                       from:1
+                                       to:(lastChangeNr-1).
+                lastChangeNr := lastChangeNr - numDeletedBefore.
+                overAllNumDeletedBefore := overAllNumDeletedBefore + numDeletedBefore.
+            ]
+        ]
     ].
     self setChangeList.
-    self autoSelectOrEnd:lastChangeNr
+    self autoSelectOrEnd:lastChangeNr.
 
     "Created: / 13.12.1995 / 16:07:14 / cg"
     "Modified: / 28.1.1998 / 20:42:14 / cg"
@@ -2328,6 +2291,54 @@
     "Modified: / 28.1.1998 / 20:42:14 / cg"
 !
 
+doDeleteClassSelectorOlder
+    "delete older changes with same class and selector as currently selected change(s)"
+
+    |classNameSelectorPairsToDelete upToPerClassAndSelector lastChangeNr overAllNumDeletedBefore|
+
+    lastChangeNr := -1.
+    classNameSelectorPairsToDelete := Set new.
+    upToPerClassAndSelector := Dictionary new.
+    
+    "/ collect what is to be deleted
+    self withSelectedChangesDo:[:changeNr |
+        |className selector|
+
+        className := self classNameOfChange:changeNr.
+        selector := self selectorOfMethodChange:changeNr.
+        selector notNil ifTrue:[
+            (className notNil and:[selector notNil]) ifTrue:[
+                classNameSelectorPairsToDelete add:(className -> selector).
+                upToPerClassAndSelector at:(className -> selector) put:changeNr.
+            ]
+        ].
+        lastChangeNr := lastChangeNr max:changeNr.
+    ].
+        
+    overAllNumDeletedBefore := 0.
+    changeListView setSelection:nil.
+
+    self withExecuteCursorDo:[
+        classNameSelectorPairsToDelete do:[:pair |
+            |numDeletedBefore className selector lastToDelete|
+
+            className := pair key.
+            selector  := pair value.
+            lastToDelete := (upToPerClassAndSelector at:pair) - 1.
+            
+            numDeletedBefore := self
+                                   silentDeleteChangesFor:className selector:selector
+                                   from:1
+                                   to:lastToDelete.
+            lastChangeNr := lastChangeNr - numDeletedBefore.
+            overAllNumDeletedBefore := overAllNumDeletedBefore + numDeletedBefore.
+        ].
+    ].
+
+    self setChangeList.
+    self autoSelectOrEnd:lastChangeNr
+!
+
 doDeleteFromBeginning
     "delete all changes from 1 to the current"
 
@@ -3503,15 +3514,16 @@
 !
 
 setChangeList
-    "extract type-information from changes and stuff into top selection
-     view"
+    "update the selection-list;
+     called after the changeList has been modified"
 
     |headerList|
 
     headerList := changeInfoList collect:[:info | info headerLine].
     changeListView setList:headerList expandTabs:false redraw:false.
     changeListView invalidate.
-
+    self showNumberOfChanges.
+    
     "/ changeListView deselect.
 
     "Modified: / 01-05-2016 / 19:27:35 / cg"
@@ -3534,6 +3546,10 @@
     "Modified: / 29.4.1999 / 22:36:54 / cg"
 !
 
+showNumberOfChanges
+    infoHolder value:(resources string:'%1 changes.' with:changeInfoList size).
+!
+
 sourceOfChange:changeNr
     |aStream sawExcla chunk|
 
@@ -4100,7 +4116,8 @@
 !
 
 selectorOfMethodChange:changeNr
-    "return a method-changes selector, or nil if it's not a methodChange"
+    "return a method-changes selector, 
+     or nil if it's not a methodChange"
 
     |sel |
 
@@ -4298,17 +4315,13 @@
             reader tabSpec:tabSpec.
             reader inStream:inStream.
             reader noColoring:(NoColoring == true).
+            
             reader readChangesFile.
 
             editingClassSource := reader thisIsAClassSource.
             changeInfoList := reader changeInfo.
-"/            changeChunks := reader changeChunks.
-"/            changeClassNames := reader changeClassNames.
-"/            changeHeaderLines := reader changeHeaderLines.
-"/            changePositions := reader changePositions.
-"/            changeTimeStamps := reader changeTimeStamps.
-"/            changeIsFollowupMethodChange := reader changeIsFollowupMethodChange.
-
+
+            self showNumberOfChanges.
             anyChanges := false.
         ] ensure:[
             inStream close.
@@ -5826,14 +5839,21 @@
     ].
 
     self changeListSelectionHolder value:lineNumbers.
-
+    
     lineNr isNil ifTrue:[
         codeView contents:nil.
         codeView initializeDoITAction.
         changeNrShown := nil.
+        infoHolder value:nil.
         ^ self
     ].
 
+    changeNrShown := lineNr.
+    self sensor
+        enqueueMessage:#updateSourceCodeAfterChangedSelection for:self arguments:nil;
+        enqueueMessage:#updateInfoAfterChangedSelection for:self arguments:nil.
+^ self.
+
     "/ display the changes code
     chunk := self sourceOfChange:lineNr.
     chunk isNil ifTrue:[
@@ -6000,6 +6020,151 @@
     self halt:'should not be here'
 
     "Created: / 03-01-2012 / 15:26:36 / cg"
+!
+
+updateInfoAfterChangedSelection
+    "update the info label"
+
+    |selection lineNr className nonMetaClassName metaClassName
+     nClassChanges nMethodChanges uniqueSelectors
+     lastLineNr firstLineNr countBeforeCurrent countAfterLast moreInfo|
+
+    selection := lineNr := changeListView selection.
+    selection isNumber ifFalse:[
+        lineNr := nil.
+        selection notEmptyOrNil ifTrue:[
+            lineNr := selection first
+        ].
+    ].
+
+    lineNr isNil ifTrue:[
+        infoHolder value:nil.
+        ^ self
+    ].
+
+    "/
+    "/ now, this info is computed so fast,
+    "/ we can do it each time the selection changes
+    "/ (can we?)
+    className := self realClassNameOfChange:lineNr.
+    className isNil ifTrue:[
+        infoHolder value:nil.
+        ^ self
+    ].
+    
+    nonMetaClassName := (className endsWith:' class')
+                            ifTrue:[ className copyButLast:' class' size ]
+                            ifFalse:[ className ].
+    metaClassName := nonMetaClassName,' class'.
+                            
+    nClassChanges := nMethodChanges := 0.
+    uniqueSelectors := Set new.
+    lastLineNr := firstLineNr := nil.
+    countAfterLast := 0.
+    countBeforeCurrent := 0.
+    
+    "/ count them all
+    1 to:changeInfoList size do:[:i |
+        |sel nameOfChange|
+        
+        nameOfChange := self realClassNameOfChange:i.
+        ((nameOfChange = nonMetaClassName) or:[nameOfChange = metaClassName]) ifTrue:[
+            lastLineNr := i.
+            firstLineNr := firstLineNr ? i.
+            i > lineNr 
+                ifTrue:[ countAfterLast := countAfterLast + 1 ]
+                ifFalse:[
+                    i < lineNr ifTrue:[
+                        countBeforeCurrent := countBeforeCurrent + 1
+                    ]
+                ].    
+            nClassChanges := nClassChanges + 1.
+            (sel := self selectorOfMethodChange:i) notNil ifTrue:[
+                uniqueSelectors add:sel.
+                nMethodChanges := nMethodChanges + 1.
+            ].
+        ].    
+    ].
+    lastLineNr == lineNr ifTrue:[
+        firstLineNr == lineNr ifTrue:[
+            moreInfo := resources string:'. This is the only one for this class '.
+        ] ifFalse:[    
+            moreInfo := resources string:'. This is the last for this class '.
+        ]
+    ] ifFalse:[
+        firstLineNr == lineNr ifTrue:[
+            moreInfo := resources string:'. This is the first for this class'.
+        ].    
+        countAfterLast > 0 ifTrue:[
+            moreInfo := (moreInfo ? ''),(resources string:'. %1 more for this class ' with:countAfterLast).
+        ].    
+    ].
+    
+    infoHolder value:(resources 
+                        string:'%1 changes. %2 for %3 (%4 methods / %5 selectors)%6'
+                        with:(changeInfoList size)
+                        with:nClassChanges
+                        with:className
+                        with:nMethodChanges
+                        with:uniqueSelectors size
+                        with:moreInfo).
+!
+
+updateSourceCodeAfterChangedSelection
+    "show a change in the codeView"
+
+    |selection lineNr chunk|
+
+    selection := lineNr := changeListView selection.
+    selection isNumber ifFalse:[
+        lineNr := nil.
+        selection notEmptyOrNil ifTrue:[
+            lineNr := selection first
+        ].
+    ].
+
+    lineNr isNil ifTrue:[
+        ^ self
+    ].
+
+    "/ display the changes code
+    chunk := self sourceOfChange:lineNr.
+    chunk isNil ifTrue:[
+        codeView initializeDoITAction.
+        ^ self
+    ].
+
+    codeView contents:chunk.
+    codeView acceptAction:[:theCode | self doApply "noChangesAllowed"].
+    codeView doItAction:[:theCode |
+        |clsName cls|
+
+        clsName := self classNameOfChange:lineNr.
+        clsName notNil ifTrue:[
+            clsName := clsName asSymbolIfInterned.
+            clsName notNil ifTrue:[
+                cls := Smalltalk at:clsName ifAbsent:nil.
+            ]
+        ].
+        Compiler
+            evaluate:theCode
+            in:nil
+            receiver:cls
+            notifying:self
+            logged:true
+            ifFail:nil
+    ].
+
+
+    changeNrShown := lineNr.
+
+    self showingDiffs value ifTrue:[
+        self withWaitCursorDo:[
+            AbortOperationRequest catch:[
+                self updateDiffViewFor:changeNrShown.
+            ]
+        ]
+    ].
 ! !
 
 !ChangesBrowser::ChangeFileReader methodsFor:'accessing'!
--- a/ContextInspectorView.st	Fri May 06 06:55:08 2016 +0200
+++ b/ContextInspectorView.st	Mon May 09 21:47:57 2016 +0200
@@ -1,5 +1,3 @@
-"{ Encoding: utf8 }"
-
 "
  COPYRIGHT (c) 1993 by Claus Gittinger
 	      All Rights Reserved
@@ -641,12 +639,15 @@
         ]
 
     ].
+    
     varIdx > values size ifTrue:[
         |wsIndex|
 
-        wsIndex := varIdx - values size - 1.
-        wsIndex <= workspaceVariableNamesInDoIts size ifTrue:[
-            ^ Workspace workspaceVariableAt:(workspaceVariableNamesInDoIts at:wsIndex).
+        workspaceVariableNamesInDoIts notNil ifTrue:[
+            wsIndex := varIdx - values size - 1.
+            wsIndex <= workspaceVariableNamesInDoIts size ifTrue:[
+                ^ Workspace workspaceVariableAt:(workspaceVariableNamesInDoIts at:wsIndex).
+            ].
         ].
         ^ '** oops - could not find value **'
     ].
@@ -749,10 +750,10 @@
 !ContextInspectorView class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/ContextInspectorView.st,v 1.98 2015-04-22 17:50:00 stefan Exp $'
+    ^ '$Header$'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libtool/ContextInspectorView.st,v 1.98 2015-04-22 17:50:00 stefan Exp $'
+    ^ '$Header$'
 ! !
 
--- a/FileDialog.st	Fri May 06 06:55:08 2016 +0200
+++ b/FileDialog.st	Mon May 09 21:47:57 2016 +0200
@@ -1767,7 +1767,12 @@
         self warn:'Cannot open drive %1' with:newFile asFilename volume.
     ].
 
-    newDrive := curSel notEmpty ifTrue:[ curSel first volume ] ifFalse:[ 'C:' ].
+    newDrive := curSel notEmpty 
+                    ifTrue:[ curSel first volume ] 
+                    ifFalse:[ 
+                        OperatingSystem isMSWINDOWSlike ifTrue:['C:'] ifFalse:['/']
+                        "/ Filename defaultVolumeName.
+                    ].
     self selectedDeviceDrive value:newDrive.
 !
 
--- a/FindFileApplication.st	Fri May 06 06:55:08 2016 +0200
+++ b/FindFileApplication.st	Mon May 09 21:47:57 2016 +0200
@@ -1538,7 +1538,7 @@
                                 realFile := f linkInfo linkTargetPath asFilename. 
                                 (realFile exists and:[realFile isReadable]) ifFalse:[
                                     showUnreadableFilesAndDirectoriesHolder value ifTrue:[
-                                        resultList add: (('*** "',f pathName,'"->"',realFile PathName,'" skipped - unreadable or bad symbolic link destination ***') colorizeAllWith:(Color red darkened)).
+                                        resultList add: (('*** "',f pathName,'"->"',realFile pathName,'" skipped - unreadable or bad symbolic link destination ***') colorizeAllWith:(Color red darkened)).
                                     ].
                                     contentsMatches := false.
                                     isBadFile := true.
--- a/SettingsDialog.st	Fri May 06 06:55:08 2016 +0200
+++ b/SettingsDialog.st	Mon May 09 21:47:57 2016 +0200
@@ -374,7 +374,7 @@
          label: 'Settings Dialog'
          name: 'Settings Dialog'
          min: (Point 10 10)
-         bounds: (Rectangle 0 0 789 642)
+         bounds: (Rectangle 0 0 850 656)
          menu: mainMenu
          icon: defaultIcon
        )
@@ -543,6 +543,15 @@
                                extent: (Point 161 22)
                              )
                             (ActionButtonSpec
+                               label: 'Close'
+                               name: 'Button4'
+                               translateLabel: true
+                               model: closeRequest
+                               extent: (Point 145 22)
+                               isVisible: closeButtonVisible
+                               activeHelpKey: closeRequest
+                             )
+                            (ActionButtonSpec
                                label: 'Discard'
                                name: 'Reload'
                                activeHelpKey: discardChangedSettings
@@ -1468,6 +1477,10 @@
     ^ applicationList.
 !
 
+closeButtonVisibleHolder
+    ^ builder valueAspectFor:#'closeButtonVisibleHolder' initialValue:false
+!
+
 enableHelp
     enableHelp isNil ifTrue:[
         enableHelp := true asValue.
@@ -1722,6 +1735,13 @@
     aWidget keepClientView:true. 
 !
 
+postBuildWith:aBuilder
+    super postBuildWith:aBuilder.
+"/    self window isModal ifFalse:[
+"/        self closeButtonVisibleHolder value:true
+"/    ].    
+!
+
 postOpenWith:aBuilder
     |items|
 
--- a/SystemBrowser.st	Fri May 06 06:55:08 2016 +0200
+++ b/SystemBrowser.st	Mon May 09 21:47:57 2016 +0200
@@ -2896,7 +2896,7 @@
 "/            s := s copyTo:(s indexOf:$:)
 "/        ].
 "/        browser autoSearch:s 
-        browser autoSearchSelector:aSelectorString ignoreCase:ignoreCase doMatch:true.
+        browser setSearchSelector:aSelectorString ignoreCase:ignoreCase doMatch:true.
     ].
     ^ browser
 
@@ -3127,6 +3127,7 @@
 !
 
 browseForString:aString
+    <resource: #obsolete>
     "launch a browser for all methods containing a string in their source.
      This may be slow, since source-code has to be scanned."
 
@@ -3136,6 +3137,7 @@
 !
 
 browseForString:aString in:aCollectionOfClasses
+    <resource: #obsolete>
     "launch a browser for all methods in aCollectionOfClasses  
      containing a string in their source.
      This may be slow, since source-code has to be scanned."
@@ -3156,6 +3158,7 @@
 !
 
 browseForString:aString in:aCollectionOfClasses ignoreCase:ignoreCase
+    <resource: #obsolete>
     "launch a browser for all methods in aCollectionOfClasses  
      containing a string in their source.
      This may be slow, since source-code has to be scanned."
@@ -5169,7 +5172,7 @@
      (these operations are executed a zillion times in an inner loop,
       therefore, the speedup is noticable)"
      
-    |doMatch sel lcString quickSearch idx|
+    |doMatch sel quickSearch idx|
 
     doMatch := doMatchArg.
     (doMatch and:[aSelectorString = '*']) ifTrue:[
@@ -5184,12 +5187,6 @@
     (doMatch or:[ignoreCase]) ifTrue:[
         "/ a matchString or ignoreCase - need string matching procedure
 
-        ignoreCase ifTrue:[
-            lcString := aSelectorString asLowercase.
-        ] ifFalse:[
-            lcString := aSelectorString.
-        ].
-
         quickSearch := aSelectorString.
         (quickSearch startsWith:'*') ifTrue:[
             quickSearch := quickSearch copyButFirst
@@ -5207,7 +5204,7 @@
         (ignoreCase and:[quickSearch includesMatchCharacters not]) ifTrue:[
             doMatch ifFalse:[
                 ^ [:class :methodArg :s |
-                    |method src inLiterals lcQuickSearch skip|
+                    |method src inLiterals skip|
 
                     inLiterals := skip := false.
                     method := methodArg originalMethodIfWrapped.
@@ -5220,11 +5217,12 @@
                         ].    
                     ].
                     skip ifFalse:[
-                        inLiterals := (method 
-                                            literalsDetect:[:aLiteral|
-                                                (aLiteral isMemberOf:Symbol) 
-                                                and:[(aLiteral sameAs:aSelectorString)]] 
-                                            ifNone:nil) notNil
+                        inLiterals := 
+                            (method 
+                                literalsDetect:[:aLiteral|
+                                    (aLiteral isMemberOf:Symbol) 
+                                    and:[(aLiteral sameAs:aSelectorString)]] 
+                                ifNone:nil) notNil
                     ].
 
                     inLiterals 
@@ -5235,7 +5233,7 @@
             ].
             
             ^ [:class :methodArg :s |
-                |method src inLiterals lcQuickSearch skip|
+                |method src inLiterals skip|
 
                 inLiterals := skip := false.
                 method := methodArg originalMethodIfWrapped.
@@ -5248,17 +5246,19 @@
                     ].
                 ].    
                 skip ifFalse:[
-                    inLiterals := (method 
-                                        literalsDetect:[:aLiteral|
-                                            (aLiteral isMemberOf:Symbol) 
-                                            and:[(aLiteral includesString:quickSearch caseSensitive:false)
-                                            and:[(lcString match:aLiteral caseSensitive:false)]]] 
-                                        ifNone:nil) notNil
+                    inLiterals := 
+                        (method 
+                            literalsDetect:[:aLiteral|
+                                (aLiteral isMemberOf:Symbol) 
+                                and:[(aLiteral includesString:quickSearch caseSensitive:false)
+                                and:[(aSelectorString match:aLiteral caseSensitive:false)]]] 
+                            ifNone:nil) notNil
                 ].
       
                 inLiterals 
                 and:[
-                    method messagesSent contains:[:sel | aSelectorString match:aSelectorString caseSensitive:false]
+                    method messagesSent 
+                        contains:[:sel | aSelectorString match:aSelectorString caseSensitive:false]
                 ]
            ].
         ].
@@ -5278,12 +5278,13 @@
                     ].    
                 ].    
                 skip ifFalse:[
-                    inLiterals := (method 
-                                        literalsDetect:[:aLiteral|
-                                            (aLiteral isMemberOf:Symbol) 
-                                            and:[(lcString includesString:quickSearch)
-                                            and:[(lcString match:aLiteral)]]] 
-                                        ifNone:nil) notNil
+                    inLiterals := 
+                        (method 
+                            literalsDetect:[:aLiteral|
+                                (aLiteral isMemberOf:Symbol) 
+                                and:[(aLiteral includesString:quickSearch)
+                                and:[(aSelectorString match:aLiteral)]]] 
+                            ifNone:nil) notNil
                 ].
                 inLiterals and:[ method messagesSent includes:aSelectorString]
            ].
@@ -5303,11 +5304,11 @@
                 ].
             ].    
             skip ifFalse:[
-                inLiterals := (method literalsDetect:[:aLiteral|
-                                        (aLiteral isMemberOf:Symbol) 
-                                        and:[(ignoreCase and:[lcString match:aLiteral asLowercase])
-                                            or:[ignoreCase not and:[lcString match:aLiteral]]]] 
-                                    ifNone:nil) notNil
+                inLiterals := 
+                    (method literalsDetect:[:aLiteral|
+                        (aLiteral isMemberOf:Symbol) 
+                        and:[ aSelectorString match:aLiteral asLowercase caseSensitive:ignoreCase not]
+                    ] ifNone:nil) notNil
             ].
             inLiterals 
             and:[ 
@@ -5673,7 +5674,8 @@
 searchBlockForString:aString ignoreCase:ignoreCase match:doMatchArg
     "return a block to search for a string."
 
-    |checkBlock pattern doMatch|
+    |checkBlock lineCheckBlock pattern doMatch
+     quickCheckString firstMatchIndex lastMatchIndex|
 
     doMatch := doMatchArg.
     aString includesMatchCharacters ifFalse:[
@@ -5681,18 +5683,48 @@
     ].    
     doMatch ifTrue:[
         "a matchString"
-        pattern := aString.    
+        pattern := aString.
+
+        firstMatchIndex := aString indexOfAny:'*#['.
+        lastMatchIndex := aString lastIndexOfAny:'*#['.
+        "/ which is longer - left or right part
+        firstMatchIndex-1 "nleft" > (aString size-lastMatchIndex) "nright" ifTrue:[
+            "/ use left part as quickSearch
+            quickCheckString := aString copyTo:firstMatchIndex-1
+        ] ifFalse:[
+            "/ use right part as quickSearch
+            quickCheckString := aString copyFrom:lastMatchIndex+1            
+        ].    
+
         aString first == $* ifFalse:[
             pattern := '*',pattern
         ].    
         aString last == $* ifFalse:[
             pattern := pattern,'*'
         ].
+        "/ when doing a match, be careful to not match acrosss lines
         ignoreCase ifTrue:[
-            checkBlock := [:src | pattern match:src caseSensitive:false]
+            lineCheckBlock := [:line | pattern match:line caseSensitive:false]
         ] ifFalse:[    
-            checkBlock := [:src | pattern match:src caseSensitive:true]
-        ]
+            lineCheckBlock := [:line | pattern match:line caseSensitive:true]
+        ].
+        quickCheckString size > 1 ifTrue:[
+            ignoreCase ifTrue:[
+                checkBlock := [:src | 
+                                (src includesString:quickCheckString caseSensitive:false)
+                                and:[ (lineCheckBlock value:src)
+                                and:[ src asStringCollection contains:lineCheckBlock ]]].
+            ] ifFalse:[
+                checkBlock := [:src | 
+                                (src includesString:quickCheckString caseSensitive:true)
+                                and:[ (lineCheckBlock value:src)
+                                and:[ src asStringCollection contains:lineCheckBlock ]]].
+            ]    
+        ] ifFalse:[    
+            checkBlock := [:src | 
+                            (lineCheckBlock value:src)
+                            and:[ src asStringCollection contains:lineCheckBlock ]].
+        ].
     ] ifFalse:[
         ignoreCase ifTrue:[
             checkBlock := [:src | src includesString:aString caseSensitive:false]
@@ -5720,7 +5752,8 @@
 searchBlockForStringLiteral:aString ignoreCase:ignoreCase match:doMatchArg
     "return a block to search for a string-literal."
 
-    |pattern s doMatch checkLiteral|
+    |pattern doMatch checkLiteral checkSource 
+     quickCheckString firstMatchIndex lastMatchIndex|
 
     aString isEmpty ifTrue:[^ [:cls :mthd :sel | true ]].
     
@@ -5737,32 +5770,70 @@
         aString last == $* ifFalse:[
             pattern := pattern,'*'
         ].
-        checkLiteral := 
-            [:lit |
-                lit isString
-                and:[lit isSymbol not
-                and:[s match:lit caseSensitive:ignoreCase not]]
-            ]
+        checkLiteral := [:lit | pattern match:lit caseSensitive:ignoreCase not].
+        firstMatchIndex := aString indexOfAny:'*#['.
+        lastMatchIndex := aString lastIndexOfAny:'*#['.
+        "/ which is longer - left or right part?
+        firstMatchIndex-1 "nleft" > (aString size-lastMatchIndex) "nright" ifTrue:[
+            "/ use left part as quickSearch
+            quickCheckString := aString copyTo:firstMatchIndex-1
+        ] ifFalse:[
+            "/ use right part as quickSearch
+            quickCheckString := aString copyFrom:lastMatchIndex+1            
+        ].    
+        quickCheckString size > 1 ifTrue:[
+            checkSource := [:src | src includesString:quickCheckString caseSensitive:ignoreCase not]
+        ] ifFalse:[
+            checkSource := [:src | true]. "/ not worth the effort
+        ].    
     ] ifFalse:[
         ignoreCase ifTrue:[
-            checkLiteral :=
-                [:lit |
-                    lit isString
-                    and:[lit isSymbol not
-                    and:[lit includesString:aString caseSensitive:true]]
-                ]
+            checkLiteral := [:lit | lit includesString:aString caseSensitive:true].
+            checkSource := [:src | src includesString:aString caseSensitive:true].
         ] ifFalse:[
-            checkLiteral :=
-                [:lit |
-                    lit isString
-                    and:[lit isSymbol not
-                    and:[lit includesString:aString]]
-                ]
+            checkLiteral := [:lit | lit includesString:aString].
+            checkSource := [:src | src includesString:aString].
         ].    
     ].
         
-    ^ [:cls :mthd :sel | 
-        (mthd literalsDetect:checkLiteral ifNone:[nil]) notNil
+    ^ [:cls :methodArg :sel | 
+        "/ sorry: the following does not work, because stc does not place string-constants
+        "/ into the literals.
+        "/        (mthd literalsDetect:[:lit |
+        "/            lit isString
+        "/            and:[ lit isSymbol not
+        "/            and:[ checkLiteral value:lit ]]
+        "/        ] ifNone:[nil]) 
+        "/            notNil
+        "/ so we must parse here (sigh)
+        
+        |method src skip tree found|
+
+        skip := found := false.
+        method := methodArg originalMethodIfWrapped.
+        method isLazyMethod ifTrue:[
+            src := method source.
+            (src notNil) ifTrue:[
+                method makeRealMethod.
+            ] ifFalse:[
+                skip := true
+            ].    
+        ].
+        skip ifFalse:[
+            src := method source.
+            (src includes:$') ifTrue:[ "/ eliminates many
+                (checkSource value:src) ifTrue:[
+                    tree := cls parseTreeFor:sel.
+                    "/ walk
+                    found :=
+                        tree usedLiterals contains:[:lit |
+                            lit isString
+                            and:[ lit isSymbol not
+                            and:[ checkLiteral value:lit ]]]
+                ].        
+            ].        
+        ].
+        found
       ]
 
     "
--- a/Tools__FontSettingsApplication.st	Fri May 06 06:55:08 2016 +0200
+++ b/Tools__FontSettingsApplication.st	Mon May 09 21:47:57 2016 +0200
@@ -22,7 +22,7 @@
 		inputFieldDef inputFieldFontLabelHolder otherLabel
 		linuxFontWorkaround otherDef tooltipDef tooltipFontLabelHolder
 		tooltipLabel useXftFontsOnly fontSizeSelectionHolder
-		lookSelectionHolder'
+		lookSelectionHolder useXFontsOnly'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'Interface-Smalltalk'
@@ -131,7 +131,11 @@
 'Change settings for a VisualAge-like look with bold variable code fonts'
 
 #useXftFontsOnly
-'Don''t try to use and don''t offer non-Xft fonts in font selection dialogs (XWindow only)'
+'Don''t try to use and don''t offer non-Xft fonts in font selection dialogs (XWindow only).\If checked, ST/X will use the much nicer looking, but sometimes slower Xft fonts.'
+
+#useXFontsOnly
+'Don''t try to use and don''t offer Xft fonts in font selection dialogs (XWindow only).\Check this, if you are working with remote displays via a slow communication line,\to suppress any Xft font usage.\(Xft font rendering requires a much higher bandwidth.)'
+
 )
 
     "Created: / 17-03-2012 / 11:37:51 / cg"
@@ -554,14 +558,25 @@
                    extent: (Point 637 45)
                  )
                 (CheckBoxSpec
-                   label: 'Only Use Xft Fonts (Unix Only)'
+                   label: 'Only Use Xft Fonts / Suppress Ugly X-Fonts (Unix Only)'
                    name: 'CheckBox1'
                    activeHelpKey: useXftFontsOnly
                    visibilityChannel: useXftFontsOnlyVisible
+                   enableChannel: useXftFontsOnlyEnabled
                    model: useXftFontsOnly
                    translateLabel: true
                    extent: (Point 637 30)
                  )
+                (CheckBoxSpec
+                   label: 'Only Use X Fonts / Suppress Slow Xft-Fonts (Unix Only)'
+                   name: 'CheckBox2'
+                   activeHelpKey: useXFontsOnly
+                   visibilityChannel: useXFontsOnlyVisible
+                   enableChannel: useXFontsOnlyEnabled
+                   model: useXFontsOnly
+                   translateLabel: true
+                   extent: (Point 637 30)
+                 )
                 (DividerSpec
                    name: 'Separator12'
                    visibilityChannel: linuxFontWorkaroundVisible
@@ -668,6 +683,7 @@
     |prefs readFont sz lookIdx idx defaultTextFont|
   
     self useXftFontsOnly value:(UserPreferences current useXftFontsOnly).
+    self useXFontsOnly value:(UserPreferences current useXFontsOnly).
     
     prefs := UserPreferences current fontPreferences.
     prefs isNil ifTrue:[
@@ -733,8 +749,9 @@
 !
 
 basicSaveSettings
-    self writeAspects: #(useXftFontsOnly) to: currentUserPrefs.
+    "/ |fn|
 
+    self writeAspects: #( useXftFontsOnly useXFontsOnly) to: currentUserPrefs.
     UserPreferences current fontPreferences:
         (
             Dictionary new
@@ -1259,17 +1276,56 @@
     ^ tooltipFontLabelHolder.
 !
 
+useXFontsOnly
+    useXFontsOnly isNil ifTrue:[
+        useXFontsOnly := false asValue.
+        useXFontsOnly onChangeSend:#useXftSettingsChanged to:self
+    ].
+    ^ useXFontsOnly.
+!
+
+useXFontsOnlyEnabled
+    ^ builder valueAspectFor:#useXFontsOnlyEnabled initialValue:true
+!
+
+useXFontsOnlyVisible
+
+    ^ Screen platformName == #X11
+!
+
 useXftFontsOnly
     useXftFontsOnly isNil ifTrue:[
         useXftFontsOnly := false asValue.
-        useXftFontsOnly onChangeSend:#updateModifiedChannel to:self
+        useXftFontsOnly onChangeSend:#useXftSettingsChanged to:self
     ].
     ^ useXftFontsOnly.
 !
 
+useXftFontsOnlyEnabled
+    ^ builder valueAspectFor:#useXftFontsOnlyEnabled initialValue:true
+!
+
 useXftFontsOnlyVisible
 
     ^ Screen platformName == #X11
+!
+
+useXftSettingsChanged
+    |enableUseXft enableUseX|
+    
+    self updateModifiedChannel.
+
+    enableUseXft := enableUseX := true.
+    
+    self useXftFontsOnly value ifTrue:[
+        enableUseX := false
+    ].    
+    self useXFontsOnly value ifTrue:[
+        enableUseXft := false
+    ].
+    
+    self useXFontsOnlyEnabled value:enableUseX.
+    self useXftFontsOnlyEnabled value:enableUseXft
 ! !
 
 !FontSettingsApplication methodsFor:'change & update'!
--- a/Tools__NavigationState.st	Fri May 06 06:55:08 2016 +0200
+++ b/Tools__NavigationState.st	Mon May 09 21:47:57 2016 +0200
@@ -1,5 +1,3 @@
-"{ Encoding: utf8 }"
-
 "
  COPYRIGHT (c) 2000 by eXept Software AG
               All Rights Reserved
@@ -26,21 +24,22 @@
 		selectedProtocols selectedClasses selectedCategories
 		selectedProjects selectedNamespaces selectedLintRules
 		variableFilter filterClassVars sortBy noAllItem autoSearchPattern
-		autoSearchIgnoreCase autoSearchAction realModifiedStateHolder
-		methodInfo versionDiffApplication selectorListGeneratorArray
-		selectedMethodsArray infoLabelHolder packageLabelHolder
-		cursorLineLabelHolder cursorColLabelHolder modeLabelHolder
-		sortVariablesBy editModeHolder scrollableCodeView specialEditors
-		selectedEditorNoteBookTabIndexHolder editorNoteBookListHolder
-		editorNoteBookCanvasHolder codeView stringSearchToolView
-		noteBookView inheritanceView documentationView languageHolder
-		messageSpecHolder messageHolder progressHolder tabContentView
-		messagePaneView codePaneAndPluginView
-		codePaneAndPluginViewRelativeCorners pluginVisibleHolder
-		bookmarkHolder worker packageInfoBackgroundColorHolder
-		packageInfoButton showMethodTemplate lastMethodShownInCodeView
-		showingParseError navigationHistory lintRuleListGenerator
-		profilerStatistics inlineMessageApplication'
+		autoSearchIgnoreCase autoSearchIsMatch autoSearchAction
+		realModifiedStateHolder methodInfo versionDiffApplication
+		selectorListGeneratorArray selectedMethodsArray infoLabelHolder
+		packageLabelHolder cursorLineLabelHolder cursorColLabelHolder
+		modeLabelHolder sortVariablesBy editModeHolder scrollableCodeView
+		specialEditors selectedEditorNoteBookTabIndexHolder
+		editorNoteBookListHolder editorNoteBookCanvasHolder codeView
+		stringSearchToolView noteBookView inheritanceView
+		documentationView languageHolder messageSpecHolder messageHolder
+		progressHolder tabContentView messagePaneView
+		codePaneAndPluginView codePaneAndPluginViewRelativeCorners
+		pluginVisibleHolder bookmarkHolder worker
+		packageInfoBackgroundColorHolder packageInfoButton
+		showMethodTemplate lastMethodShownInCodeView showingParseError
+		navigationHistory lintRuleListGenerator profilerStatistics
+		inlineMessageApplication'
 	classVariableNames:'CodeAspectTranslations'
 	poolDictionaries:''
 	category:'Interface-Browsers-New'
@@ -85,32 +84,60 @@
     ^ autoSearchAction
 !
 
-autoSearchAction:something
-    autoSearchAction := something.
+autoSearchAction:aBlock
+    "define an autosearch action (for semantic searches)"
+    
+    autoSearchAction := aBlock.
 !
 
 autoSearchIgnoreCase
-    "return true if the autSearch is to be case-insensitive"
+    "return true if the autoSearch is case-insensitive"
 
     ^ autoSearchIgnoreCase
 !
 
 autoSearchIgnoreCase:aBoolean
-    "change the autSearches case-insensitivenes"
+    "define the autoSearches case-insensitivenes"
 
     autoSearchIgnoreCase := aBoolean
 !
 
+autoSearchIsMatch
+    "return true if the autoSearch is a match search"
+
+    ^ autoSearchIsMatch
+!
+
+autoSearchIsMatch:aBoolean
+    "define the automatic search pattern matching behavior"
+
+    autoSearchIsMatch := aBoolean.
+!
+
 autoSearchPattern
-    "return the automatic search pattern"
+    "return the automatic search pattern.
+     The codeView will search for this automatically, 
+     whenever the navigation is changing the shown method."
 
     ^ autoSearchPattern
 !
 
-autoSearchPattern:aPattern
-    "change the automatic search pattern"
+autoSearchPattern:aStringOrPattern
+    "define the automatic search pattern.
+     The codeView will search for this automatically, 
+     whenever the navigation is changing the shown method."
+
+    autoSearchPattern := aStringOrPattern.
+!
 
-    autoSearchPattern := aPattern.
+autoSearchPattern:aStringOrPattern ignoreCase:ignoreCaseBoolean match:isMatchBoolean 
+    "define the automatic search pattern.
+     The codeView will search for this automatically, 
+     whenever the navigation is changing the shown method."
+
+    autoSearchPattern := aStringOrPattern.
+    autoSearchIsMatch := isMatchBoolean.
+    autoSearchIgnoreCase := ignoreCaseBoolean.
 !
 
 browserLabel
--- a/Tools__NewSystemBrowser.st	Fri May 06 06:55:08 2016 +0200
+++ b/Tools__NewSystemBrowser.st	Mon May 09 21:47:57 2016 +0200
@@ -49,7 +49,7 @@
 		LastClassSearchBoxShowedFullName CachedTagToRevisionMapping
 		CachedMethodsImplemented LastCypressDirectory
 		LastClassSearchBoxShowedJavaOnly LastRemoteRepository
-		LastClassDocDirectory DefaultShowCoverage'
+		LastClassDocDirectory DefaultShowCoverage LastLintedPackage'
 	poolDictionaries:''
 	category:'Interface-Browsers-New'
 !
@@ -7314,6 +7314,12 @@
             itemValue: debugMenuOpenCallGraphForClasses
             showBusyCursorWhilePerforming: true
           )
+         (MenuItem
+            enabled: hasRBLintRuleClassSelected
+            label: 'Run this Rule On...'
+            itemValue: debugMenuRunLintRuleOn
+            showBusyCursorWhilePerforming: true
+          )
          )
         nil
         nil
@@ -23930,7 +23936,7 @@
         or:[navigationState isMethodBrowser]]) ifFalse:[
             filteredVariables := self variableFilter value.
             filteredVariables size > 0 ifTrue:[
-                self searchVariables:filteredVariables readers:true writers:true asAutoSearch:false.
+                self setupToSearchVariables:filteredVariables readers:true writers:true asAutoSearch:false.
                 "/ codeView notNil ifTrue:[codeView searchFwd]
             ] ifFalse:[
                 self autoSearchPattern:nil
@@ -24012,12 +24018,14 @@
                 ] ifFalse:[
                     searchPattern := navigationState autoSearchPattern.
                     searchPattern notNil ifTrue:[
+                        "/ check if user did some other search in the meantime
                         searchPattern = codeView searchPattern ifTrue:[
                             codeView
                                 cursorHome;
                                 cursorRight; "/ to avoid finding the selector
                                 searchFwd:searchPattern
                                     ignoreCase:(navigationState autoSearchIgnoreCase)
+                                    match:(navigationState autoSearchIsMatch)
                                     ifAbsent:[codeView cursorHome].
                         ].
                     ].
@@ -26324,7 +26332,7 @@
         withTextEntry:true
         withMethodList:true
         setSearchPattern:[:brwsr :string :ignoreCase :doMatch|
-                            brwsr autoSearchPattern:string ignoreCase:ignoreCase.
+                            brwsr autoSearchPattern:string ignoreCase:ignoreCase match:doMatch.
                          ]
 
     "Modified: / 28-02-2012 / 16:40:11 / cg"
@@ -26349,7 +26357,7 @@
         searchArea:whereDefault
         withCaseIgnore:true
         setSearchPattern:[:brwsr :string :ignoreCase :doMatch|
-                            brwsr autoSearchPattern:string ignoreCase:ignoreCase.
+                            brwsr autoSearchPattern:string ignoreCase:ignoreCase match:doMatch.
                          ]
 
     "Modified: / 28-02-2012 / 16:40:37 / cg"
@@ -26374,7 +26382,7 @@
         searchArea:whereDefault
         withCaseIgnore:true
         setSearchPattern:[:brwsr :string :ignoreCase :doMatch|
-                            brwsr autoSearchPattern:string ignoreCase:ignoreCase.
+                            brwsr autoSearchPattern:string ignoreCase:ignoreCase match:doMatch.
                          ]
 
     "Modified: / 28-02-2012 / 16:40:54 / cg"
@@ -26404,7 +26412,7 @@
         withTextEntry:true
         withMethodList:true
         setSearchPattern:[:brwsr :string :ignoreCase :doMatch|
-                            brwsr autoSearchPattern:string ignoreCase:ignoreCase.
+                            brwsr autoSearchPattern:string ignoreCase:ignoreCase match:doMatch.
                          ]
 !
 
@@ -26828,7 +26836,7 @@
         searchArea:(self defaultSearchArea)
         withCaseIgnore:false
         setSearchPattern:[:brwsr :string :ignoreCase :doMatch|
-                            brwsr autoSearchPattern:string ignoreCase:ignoreCase.
+                            brwsr autoSearchPattern:string ignoreCase:ignoreCase match:doMatch.
                          ]
 
     "Modified: / 25-11-2010 / 11:41:10 / cg"
@@ -27122,7 +27130,7 @@
         withTextEntry:true
         withMethodList:true
         setSearchPattern:[:brwsr :selector :ignoreCase :doMatch|
-                            brwsr autoSearchSelector:selector ignoreCase:ignoreCase doMatch:doMatch.
+                            brwsr setSearchSelector:selector ignoreCase:ignoreCase doMatch:doMatch.
                          ]
 
     "Modified: / 20-08-2012 / 14:28:30 / cg"
@@ -27134,7 +27142,7 @@
     selectors := self selectedMethodsValue collect:[:each | each selector].
 
 false ifTrue:[
-self autoSearchSelector:selectors ignoreCase:false doMatch:true.
+self setSearchSelector:selectors ignoreCase:false doMatch:true.
 ].
     ^ self
         askForMethodAndSpawnSearchTitle:'Browse Senders of (any in selected):'
@@ -27151,7 +27159,7 @@
         withTextEntry:false
         withMethodList:false
         setSearchPattern:[:brwsr :string :ignoreCase :doMatch|
-                            brwsr autoSearchSelector:selectors ignoreCase:ignoreCase doMatch:doMatch.
+                            brwsr setSearchSelector:selectors ignoreCase:ignoreCase doMatch:doMatch.
                          ]
 
     "Modified: / 28-02-2012 / 16:15:36 / cg"
@@ -28682,7 +28690,7 @@
      THis is called from a background worker - see smallLintRun:onEnvironment:
     "
 
-    | rules checker numOverAll count|
+    | rules checker numOverAll count lastPercentage|
 
     "/ avoid this reference (for project-dependencies). Should this method be an extension, maybe
     "/ checker := SmalllintChecker.
@@ -28692,7 +28700,8 @@
     aBrowserEnvironment cacheClasses.
     numOverAll := aBrowserEnvironment numberClasses * 2 "tests class AND metaclass" * rules size.
     count := 0.
-
+    lastPercentage := nil.
+    
     rules withIndexDo:[:rule :index|
         |t ruleName ruleClassName|
 
@@ -28709,14 +28718,24 @@
                 runRule: rule 
                 onEnvironment: aBrowserEnvironment 
                 progressFeedBackInto:[:classBeingChecked |
+                    |msg percentage|
+                    
                     count := count + 1.
-                    ProgressNotification new
-                        messageText: (('Checking: ' withColor:Color grey)
-                                      , ruleName 
-                                      , ((' (',ruleClassName,')')withColor:Color grey)
-                                      , ' in ',classBeingChecked name);
-                        parameter: ((count-1) / numOverAll * 100);
-                        raiseRequest.
+                    percentage := ((count-1) / numOverAll * 100).
+                    lastPercentage ~= percentage ifTrue:[
+                        msg := ('Checking: ' withColor:Color grey)
+                               , ruleName 
+                               , ((' (',ruleClassName,')')withColor:Color grey).
+                               
+                        rules size < 50 ifTrue:[
+                            msg := msg , ' in ',classBeingChecked name.
+                        ].    
+                        ProgressNotification new
+                            messageText: msg;
+                            parameter: percentage;
+                            raiseRequest.
+                        lastPercentage := percentage.    
+                    ].
                 ].
         ] value. "/ benchmark: rule name, ': '.
     ].
@@ -38769,7 +38788,7 @@
                 values:#(nil #browse #rewrite)
                 default:3.
 
-    answer == nil ifTrue:[
+    answer isNil ifTrue:[
         "/ cancel
         ^ false
     ].
@@ -38780,7 +38799,10 @@
                     label:'Senders of ' , selector
                     perMethodInfo:nil
                     sortBy:#class.
-        brwsr autoSearchPattern:selector.
+        "/ WRONG: must do a more intelligent autosearch here.
+        "/ brwsr autoSearchPattern:selector.
+        brwsr setSearchSelector:selector ignoreCase:false doMatch:false.
+
         ^ false
     ].
     ^ true
@@ -39521,6 +39543,50 @@
     self commonTraceHelperWith:#clearBreakPoint with:nil clear:false.
 !
 
+debugMenuRunLintRuleOn
+    "apply the selected rule(s) on a chosen set of classes"
+
+    |package packagesInChangeSet ruleset env packages|
+
+    packagesInChangeSet := 
+        (ChangeSet current 
+            collect:[:chg | |cls| (cls := chg changeClass) notNil ifTrue:[cls package] ]
+            thenSelect:[:pkg | pkg notNil]) 
+                asSet asOrderedCollection sort.
+            
+    package := Dialog 
+                requestProject:'Run rule on package:'
+                initialAnswer: (LastLintedPackage ? 'stx:libbasic')
+                suggestions: #( '* all *' ) , packagesInChangeSet.
+
+    package isNil ifTrue:[^ self].
+    
+    ruleset := RBLintRuleSet new.
+    self selectedClasses value do:[:each |
+        |cls|
+        
+        cls := each theNonMetaclass.
+        (cls isSubclassOf:RBLintRule) ifTrue:[
+            (cls isBroken
+            or:[ cls isVisible not ]) ifFalse:[
+                ruleset addRule:(cls new).
+            ].    
+        ].
+    ].
+    package = '* all *' ifTrue:[
+        packages := Smalltalk allPackageIDs
+    ] ifFalse:[    
+        packages := { package }
+    ].
+    
+    env := PackageEnvironment new
+                packageNames:packages;
+                label:('package ' , package);
+                yourself.
+                                                           
+    self smalllintRun:ruleset onEnvironment:env.
+!
+
 debugMenuStartCounting
     "set a countpoint on the current method"
 
@@ -49317,7 +49383,7 @@
                         label:label.
 
         theSingleSelector notNil ifTrue:[
-            newBrowser autoSearchSelector:theSingleSelector ignoreCase:false doMatch:false.
+            newBrowser setSearchSelector:theSingleSelector ignoreCase:false doMatch:false.
         ].
     ]
 
@@ -49385,7 +49451,7 @@
                         in:openHow
                         label:label.
         
-        newBrowser autoSearchPattern:(aStringCollection asStringWith:'|') ignoreCase:false.
+        newBrowser autoSearchPattern:(aStringCollection asStringWith:'|') ignoreCase:false match:doMatch.
         newBrowser sortBy value:#classes.
         newBrowser
     ]
@@ -49736,7 +49802,7 @@
 
     brwsr variableFilter value:varNameList.
 
-    self autoSearchVariables:varNameList readers:(accessType ~~ #write) writers:(accessType ~~ #read).
+    brwsr autoSearchVariables:varNameList readers:(accessType ~~ #write) writers:(accessType ~~ #read).
 !
 
 findClassesOfVariable:aVariableName accessWith:aSelector in:collectionOfClasses
@@ -51336,7 +51402,7 @@
             label:[:chg | 
                 |lbl|
                 "/ lbl := chg printString
-                lbl := (chg className ? '???') , ' » ' , (chg selector  ? '???') allBold.
+                lbl := (chg className ? '???') , '  ' , (chg selector  ? '???') allBold.
                 (chg isMethodChange and:[chg changeMethod isNil]) ifTrue:[
                     lbl := lbl asText allStrikedOut,' ','(removed)' allItalic.
                 ].    
@@ -54344,34 +54410,18 @@
     ]
 !
 
+autoSearchPattern:aString ignoreCase:doIgnoreCaseBoolean match:doMatchBoolean
+    aString notNil ifTrue:[
+        self navigationState 
+            autoSearchPattern:aString ignoreCase:doIgnoreCaseBoolean match:doMatchBoolean. 
+        self codeView 
+            setSearchPattern:aString ignoreCase:doIgnoreCaseBoolean match:doMatchBoolean.
+    ]
+!
+
 autoSearchSelector:aSelectorOrCollectionOfSelectors ignoreCase:doIgnoreCase doMatch:doMatch
-    |searchAction|
-
-    aSelectorOrCollectionOfSelectors notNil ifTrue:[
-
-        searchAction :=
-            [:direction :startLine :startCol :foundBlock :notFoundBlock|
-                |codeView|
-
-                codeView := self codeView.
-                self
-                    searchForSelector:aSelectorOrCollectionOfSelectors direction:direction
-                    startLine:(startLine ? codeView cursorLine) startCol:(startCol ? codeView cursorCol)
-                    ignoreCase:doIgnoreCase doMatch:doMatch
-                    ifFound:
-                        [:charPos1 :charPos2 |
-                            codeView
-                                cursorToCharacterPosition:charPos1;
-                                selectFromCharacterPosition:charPos1 to:charPos2
-                        ]
-                    ifNotFound:notFoundBlock
-            ].
-
-        self navigationState autoSearchAction:searchAction.
-        self codeView
-            clearSearchAction; "/ searchAction
-            setSearchPattern:nil.
-    ]
+    <resource: #obsolete>
+    self setSearchSelector:aSelectorOrCollectionOfSelectors ignoreCase:doIgnoreCase doMatch:doMatch
 !
 
 autoSearchVariable:aVariable
@@ -54383,7 +54433,7 @@
 !
 
 autoSearchVariables:aCollectionOfVariables readers:doReaders writers:doWriters
-    self searchVariables:aCollectionOfVariables readers:doReaders writers:doWriters asAutoSearch:true.
+    self setupToSearchVariables:aCollectionOfVariables readers:doReaders writers:doWriters asAutoSearch:true.
 !
 
 classDefinitionStringFor:aClass
@@ -54477,6 +54527,9 @@
 
 searchForCodePattern:codePattern direction:direction startLine:startLine startCol:startCol
                             ifFound:foundBlock ifNotFound:notFoundBlock
+    "used as autosearchAction, if showing the result of a code-pattern search.
+     Does a language-aware search."
+
     ^ self
         searchForCodePatterns:(Array with:codePattern)
         direction:direction startLine:startLine startCol:startCol
@@ -54486,6 +54539,9 @@
 searchForCodePatterns:codePatterns direction:direction
                 startLine:startLine startCol:startCol
                 ifFound:foundBlock ifNotFound:notFoundBlock
+    "used as autosearchAction, if showing the result of a code-pattern search.
+     Does a language-aware search."
+
     |searcher|
 
     self parseTreeSearcherAvailable ifFalse:[ ^ self ].
@@ -54506,6 +54562,9 @@
                             startLine:startLine startCol:startCol
                             ignoreCase:ignoreCase doMatch:doMatch
                             ifFound:foundBlock ifNotFound:notFoundBlock
+    "used as autosearchAction, if showing the result of a senders-search.
+     Does a language-aware search."
+
     |searcher|
 
     self parseTreeSearcherAvailable ifFalse:[ ^ self ].
@@ -54534,6 +54593,9 @@
                             startLine:startLine startCol:startCol
                             readers:searchReaders writers:searchWriters
                             ifFound:foundBlock ifNotFound:notFoundBlock
+    "used as autosearchAction, if showing the result of a variable-search.
+     Does a language-aware search."
+    
     |searcher namesWithAndWithoutNameSpace|
 
     self parseTreeSearcherAvailable ifFalse:[ ^ self ].
@@ -54558,14 +54620,18 @@
             self error:'missing search criteria'
         ].
     ].
-    ^ self searchUsingSearcher:searcher direction:direction
-                    startLine:startLine startCol:startCol
-                    ifFound:foundBlock ifNotFound:notFoundBlock.
+    ^ self 
+        searchUsingSearcher:searcher direction:direction
+        startLine:startLine startCol:startCol
+        ifFound:foundBlock ifNotFound:notFoundBlock.
 !
 
 searchUsingSearcher:searcher direction:direction
                             startLine:startLine startCol:startCol
                             ifFound:foundBlock ifNotFound:notFoundBlock
+    "common helper, used by autosearchAction.
+     Does a language-aware search."
+     
     |codeTree nodes searchStartPos prevNode|
 
     RBParser isNil ifTrue:[^ self].
@@ -54608,10 +54674,44 @@
     notFoundBlock value
 !
 
-searchVariables:aCollectionOfVariables readers:doReaders writers:doWriters asAutoSearch:asAutoSearch
+setSearchSelector:aSelectorOrCollectionOfSelectors ignoreCase:doIgnoreCase doMatch:doMatch
+    "setup the codeView so it auto-searches for a message send"
+    
     |searchAction|
 
-    aCollectionOfVariables size > 0 ifTrue:[
+    aSelectorOrCollectionOfSelectors notNil ifTrue:[
+
+        searchAction :=
+            [:direction :startLine :startCol :foundBlock :notFoundBlock|
+                |codeView|
+
+                codeView := self codeView.
+                self
+                    searchForSelector:aSelectorOrCollectionOfSelectors direction:direction
+                    startLine:(startLine ? codeView cursorLine) startCol:(startCol ? codeView cursorCol)
+                    ignoreCase:doIgnoreCase doMatch:doMatch
+                    ifFound:
+                        [:charPos1 :charPos2 |
+                            codeView
+                                cursorToCharacterPosition:charPos1;
+                                selectFromCharacterPosition:charPos1 to:charPos2
+                        ]
+                    ifNotFound:notFoundBlock
+            ].
+
+        self navigationState autoSearchAction:searchAction.
+        self codeView
+            clearSearchAction; "/ searchAction
+            setSearchPattern:nil.
+    ]
+!
+
+setupToSearchVariables:aCollectionOfVariables readers:doReaders writers:doWriters asAutoSearch:asAutoSearch
+    "setup the search action to search for a variable or setof variables"
+    
+    |searchAction|
+
+    aCollectionOfVariables notEmptyOrNil ifTrue:[
         searchAction :=
             [:direction :startLine :startCol :foundBlock :notFoundBlock|
                 |codeView|
--- a/Tools__SearchDialog.st	Fri May 06 06:55:08 2016 +0200
+++ b/Tools__SearchDialog.st	Mon May 09 21:47:57 2016 +0200
@@ -150,7 +150,7 @@
 'Search string in literal constants; not in source code'
 
 #match
-'Perform a pattern match search, as oposed to an exact string search.\Pattern is a simple GLOB pattern (as in filenames)'
+'Perform a pattern match search, as opposed to an exact string search.\Pattern is a simple GLOB pattern (as in filenames)'
 
 #caseSensitive
 'Perform a case sensitive search (default is to ignore case differences)'
@@ -280,7 +280,6 @@
     |symbolicHelpKey text|
 
     (symbolicHelpKey := aComponent helpKey) notNil ifTrue:[
-    Transcript showCR:symbolicHelpKey.
         text := self class helpSpec at:symbolicHelpKey ifAbsent:[ nil ].
         text notNil ifTrue:[
             ^ NewSystemBrowser classResources stringWithCRs:text.
@@ -963,7 +962,7 @@
 
     p := View new.
     
-    b := CheckBox label:(resources string:'Search Literals Only') in:p.
+    b := CheckBox label:(resources string:'Search String-Constants (Literals) Only') in:p.
     b model:(searchStringInLiteralsHolder := false asValue).
     p helpKey:#searchStringInLiterals.
     self makeTabable:b.
--- a/WorkspaceApplication.st	Fri May 06 06:55:08 2016 +0200
+++ b/WorkspaceApplication.st	Mon May 09 21:47:57 2016 +0200
@@ -3469,11 +3469,15 @@
 !
 
 addStopWatch
-    |v clock|
+    |v clockViewClass clock|
 
     v := View new.
     v viewBackground:Color white.
-    clock := ClockView in:v.
+    "/ avoid making stx:libwidg3 a prerequisite. 
+    Smalltalk loadPackage:#'stx:libwidg3'. "/ ClockView package
+    clockViewClass := Smalltalk at:#ClockView.
+        
+    clock := clockViewClass in:v.
     clock beStopWatch.
 
     clock 
--- a/libtool.rc	Fri May 06 06:55:08 2016 +0200
+++ b/libtool.rc	Mon May 09 21:47:57 2016 +0200
@@ -3,7 +3,7 @@
 // automagically generated from the projectDefinition: stx_libtool.
 //
 VS_VERSION_INFO VERSIONINFO
-  FILEVERSION     6,2,1,140
+  FILEVERSION     6,2,1,141
   PRODUCTVERSION  6,2,5,0
 #if (__BORLANDC__)
   FILEFLAGSMASK   VS_FF_DEBUG | VS_FF_PRERELEASE
@@ -20,12 +20,12 @@
     BEGIN
       VALUE "CompanyName", "eXept Software AG\0"
       VALUE "FileDescription", "Smalltalk/X Tools (LIB)\0"
-      VALUE "FileVersion", "6.2.1.140\0"
+      VALUE "FileVersion", "6.2.1.141\0"
       VALUE "InternalName", "stx:libtool\0"
       VALUE "LegalCopyright", "Copyright Claus Gittinger 1988-2012\nCopyright eXept Software AG 2012\0"
       VALUE "ProductName", "Smalltalk/X\0"
       VALUE "ProductVersion", "6.2.5.0\0"
-      VALUE "ProductDate", "Fri, 06 May 2016 03:00:19 GMT\0"
+      VALUE "ProductDate", "Sun, 08 May 2016 17:31:24 GMT\0"
     END
 
   END
--- a/resources/de.rs	Fri May 06 06:55:08 2016 +0200
+++ b/resources/de.rs	Mon May 09 21:47:57 2016 +0200
@@ -154,6 +154,7 @@
 'Add breakpoint on method'                                                                              'Haltepunkt auf Methode setzen'
 'Add buffer'                                                                                            'Seite hinzufügen'
 'Add to ChangeSet when Applying'                                                                        'Bei Ãœbernehmen auch ins ChangeSet eintragen'
+'Ignore Public/Private in Category'                                                                     'Public/Private in Kategorie ignorieren (Dolphin Code)'
 'Add/Apply'                                                                                             'Eintragen'
 'After 5 Seconds'                                                                                       'Nach 5 Sekunden'
 'Against which repository version'                                                                      'Gegen welche Version im Repository'
@@ -855,7 +856,9 @@
 'Delete Selected Files'                                                                                 'Ausgewählte Dateien löschen'
 'Delete all Files'                                                                                      'Alle Dateien löschen'
 'Delete all Versions of Selected Method'                                                                'Entfernen - alle Versionen dieser Methode'
-'Delete all Versions of all Selected Methods'                                                           'Entfernen - alle Versionen der ausgewählten Methoden'
+'Delete all Versions of all Selected Methods'                                                           'Entfernen - alle Versionen aller ausgewählten Methoden'
+'Delete older Versions of Selected Method'                                                              'Entfernen - ältere Versionen dieser Methode'
+'Delete older Versions of all Selected Methods'                                                         'Entfernen - ältere Versionen aller ausgewählten Methoden'
 'Delete all for Class'                                                                                  'Entfernen - alles für diese Klasse'
 'Delete all for Class & its Private Classes'                                                            'Entfernen - alles für diese Klasse & private Klassen'
 'Delete all for Class & its private Classes'                                                            'Entfernen - alles für diese Klasse & private Klassen'
@@ -865,6 +868,7 @@
 'Delete all for Classes & their Private Classes'                                                        'Entfernen - alles für diese Klassen & private Klassen'
 'Delete all for Classes & their private Classes'                                                        'Entfernen - alles für diese Klassen & private Klassen'
 'Delete all for Classes && their private Classes'                                                       'Entfernen - alles für diese Klassen && private Klassen'
+'Delete all for Namespace'                                                                              'Entfernen - alles für diesen Namensraum'
 'Delete file'                                                                                           'Datei löschen'
 'Delete for Class from Begin'                                                                           'Entfernen - vom Anfang für diese Klasse'
 'Delete for Class to End'                                                                               'Entfernen - bis Ende für diese Klasse'
@@ -1013,6 +1017,8 @@
 'Exit Smalltalk'                                                                                        'Smalltalk beenden'
 'Exit Smalltalk (No Confirmation)'                                                                      'Smalltalk beenden (ohne Bestätigung)'
 'Exiting ST/X'                                                                                          'ST/X verlassen'
+'Show Search Field'                                                                                     'Suchfeld einblenden'
+'Quick Search'                                                                                          'Schnellsuche'
 'Expand All'                                                                                            'Alle aufklappen'
 'Expand Arrays in "all xxx"-Lists'                                                                      'Arrayelemente in "all xxx"-Listen expandiert zeigen'
 'Export'                                                                                                'Exportieren'
@@ -1687,6 +1693,8 @@
 'Next Difference'                                                                                       'Nächster Unterschied'
 'Next Snapshot'                                                                                         'Nächste Sicherung (snapshot)'
 'Next for Class'                                                                                        'Nächste Änderung zu dieser Klasse'
+'First for Class'                                                                                       'Erste Änderung zu dieser Klasse'
+'Last for Class'                                                                                        'Letzte Änderung zu dieser Klasse'
 'Next for Selector'                                                                                     'Nächste Änderung mit diesem Selektor'
 'Next with String'                                                                                      'Nächste Änderung mit dieser Zeichenkette'
 'No Sniplets to Manage'                                                                                 'Keine Schnipsel zum verwalten'
@@ -2202,6 +2210,7 @@
 'Search for documentation string'                                                                       'Dokumentationstext suchen'
 'Search for methods which contain a\particular resource specification'                                  'Methoden suchen,\die eine bestimmte Ressourcespezifikation beinhalten'
 'Search in'                                                                                             'Suchen in'
+'Search String-Constants (Literals) Only'                                                               'Nur in Stringkonstanten (Literalen) suchen'
 'SearchBox is Modal'                                                                                    'Textsuchdialog ist Modal'
 'Searchbar'                                                                                             'Suchleiste'
 'Select'                                                                                                'auswählen'