Performance: do not update contents of windows when not needed
authorJan Vrany <jan.vrany@fit.cvut.cz>
Wed, 23 Jan 2019 22:05:43 +0000
changeset 151 bc7626f46210
parent 147 4087090b3581
child 152 a069cf7fcab5
Performance: do not update contents of windows when not needed ...such as when the tab with it is not visible. This ought to make debugger feel more "snappy" for complex programs running on slow machines and / or during remote debugging sessions. Common code for this has been factored out to new abstract class `VDBAbstractContentsApplication`. `VDBSbstractListApplication` and subclasses have been adapted to use this feature.
Make.proto
Make.spec
NEWS.md
VDBAbstractApplication.st
VDBAbstractContentsApplication.st
VDBAbstractListApplication.st
VDBBreakpointListApplication.st
VDBEvaluator.st
VDBInstructionListApplication.st
VDBRegisterListApplication.st
VDBStackApplication.st
VDBVariableObjectListApplication.st
abbrev.stc
bc.mak
jv_vdb.st
libInit.cc
tests/VDBAbstractApplicationTests.st
tests/VDBInstructionListApplicationTests.st
--- a/Make.proto	Wed Jan 30 11:45:37 2019 +0000
+++ b/Make.proto	Wed Jan 23 22:05:43 2019 +0000
@@ -151,7 +151,7 @@
 $(OUTDIR)RRStartEvent.$(O) RRStartEvent.$(C) RRStartEvent.$(H): RRStartEvent.st $(INCLUDE_TOP)/jv/vdb/RREvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)VDBAbstractConsoleApplication.$(O) VDBAbstractConsoleApplication.$(C) VDBAbstractConsoleApplication.$(H): VDBAbstractConsoleApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBAbstractContainer.$(O) VDBAbstractContainer.$(C) VDBAbstractContainer.$(H): VDBAbstractContainer.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
-$(OUTDIR)VDBAbstractListApplication.$(O) VDBAbstractListApplication.$(C) VDBAbstractListApplication.$(H): VDBAbstractListApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
+$(OUTDIR)VDBAbstractContentsApplication.$(O) VDBAbstractContentsApplication.$(C) VDBAbstractContentsApplication.$(H): VDBAbstractContentsApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBBreakpointApplication.$(O) VDBBreakpointApplication.$(C) VDBBreakpointApplication.$(H): VDBBreakpointApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBBreakpointPresenter.$(O) VDBBreakpointPresenter.$(C) VDBBreakpointPresenter.$(H): VDBBreakpointPresenter.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractPresenter.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libwidg2/AbstractHierarchicalItem.$(H) $(INCLUDE_TOP)/stx/libwidg2/HierarchicalItem.$(H) $(STCHDR)
 $(OUTDIR)VDBDebuggerApplication.$(O) VDBDebuggerApplication.$(C) VDBDebuggerApplication.$(H): VDBDebuggerApplication.st $(INCLUDE_TOP)/jv/libgdbs/GDBStopReasons.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
@@ -165,20 +165,21 @@
 $(OUTDIR)VDBThreadGroupPresenter.$(O) VDBThreadGroupPresenter.$(C) VDBThreadGroupPresenter.$(H): VDBThreadGroupPresenter.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractPresenter.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libwidg2/AbstractHierarchicalItem.$(H) $(INCLUDE_TOP)/stx/libwidg2/HierarchicalItem.$(H) $(STCHDR)
 $(OUTDIR)VDBThreadPresenter.$(O) VDBThreadPresenter.$(C) VDBThreadPresenter.$(H): VDBThreadPresenter.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractPresenter.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libwidg2/AbstractHierarchicalItem.$(H) $(INCLUDE_TOP)/stx/libwidg2/HierarchicalItem.$(H) $(STCHDR)
 $(OUTDIR)VDBVariableObjectPresenter.$(O) VDBVariableObjectPresenter.$(C) VDBVariableObjectPresenter.$(H): VDBVariableObjectPresenter.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractPresenter.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libwidg2/AbstractHierarchicalItem.$(H) $(INCLUDE_TOP)/stx/libwidg2/HierarchicalItem.$(H) $(STCHDR)
-$(OUTDIR)VDBAbstractTreeApplication.$(O) VDBAbstractTreeApplication.$(C) VDBAbstractTreeApplication.$(H): VDBAbstractTreeApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractListApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
+$(OUTDIR)VDBAbstractListApplication.$(O) VDBAbstractListApplication.$(C) VDBAbstractListApplication.$(H): VDBAbstractListApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractContentsApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBAbstractUnixConsoleApplication.$(O) VDBAbstractUnixConsoleApplication.$(C) VDBAbstractUnixConsoleApplication.$(H): VDBAbstractUnixConsoleApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractConsoleApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
-$(OUTDIR)VDBBreakpointListApplication.$(O) VDBBreakpointListApplication.$(C) VDBBreakpointListApplication.$(H): VDBBreakpointListApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractListApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBSimpleDebuggerConsoleApplication.$(O) VDBSimpleDebuggerConsoleApplication.$(C) VDBSimpleDebuggerConsoleApplication.$(H): VDBSimpleDebuggerConsoleApplication.st $(INCLUDE_TOP)/jv/libgdbs/GDBCommandStatus.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractConsoleApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBTabbingContainer.$(O) VDBTabbingContainer.$(C) VDBTabbingContainer.$(H): VDBTabbingContainer.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractContainer.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
+$(OUTDIR)VDBAbstractTreeApplication.$(O) VDBAbstractTreeApplication.$(C) VDBAbstractTreeApplication.$(H): VDBAbstractTreeApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractContentsApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractListApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
+$(OUTDIR)VDBBreakpointListApplication.$(O) VDBBreakpointListApplication.$(C) VDBBreakpointListApplication.$(H): VDBBreakpointListApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractContentsApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractListApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBFrameApplication.$(O) VDBFrameApplication.$(C) VDBFrameApplication.$(H): VDBFrameApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractContainer.$(H) $(INCLUDE_TOP)/jv/vdb/VDBTabbingContainer.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
-$(OUTDIR)VDBInstructionListApplication.$(O) VDBInstructionListApplication.$(C) VDBInstructionListApplication.$(H): VDBInstructionListApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractListApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
-$(OUTDIR)VDBRegisterListApplication.$(O) VDBRegisterListApplication.$(C) VDBRegisterListApplication.$(H): VDBRegisterListApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractListApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBSourceAndDisassemblyApplication.$(O) VDBSourceAndDisassemblyApplication.$(C) VDBSourceAndDisassemblyApplication.$(H): VDBSourceAndDisassemblyApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractContainer.$(H) $(INCLUDE_TOP)/jv/vdb/VDBTabbingContainer.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
-$(OUTDIR)VDBStackApplication.$(O) VDBStackApplication.$(C) VDBStackApplication.$(H): VDBStackApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractListApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBUnixDebuggerConsoleApplication.$(O) VDBUnixDebuggerConsoleApplication.$(C) VDBUnixDebuggerConsoleApplication.$(H): VDBUnixDebuggerConsoleApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractConsoleApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractUnixConsoleApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBUnixInferiorConsoleApplication.$(O) VDBUnixInferiorConsoleApplication.$(C) VDBUnixInferiorConsoleApplication.$(H): VDBUnixInferiorConsoleApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractConsoleApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractUnixConsoleApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBUnixReplayServerConsoleApplication.$(O) VDBUnixReplayServerConsoleApplication.$(C) VDBUnixReplayServerConsoleApplication.$(H): VDBUnixReplayServerConsoleApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractConsoleApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractUnixConsoleApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
-$(OUTDIR)VDBVariableObjectListApplication.$(O) VDBVariableObjectListApplication.$(C) VDBVariableObjectListApplication.$(H): VDBVariableObjectListApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractListApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
+$(OUTDIR)VDBInstructionListApplication.$(O) VDBInstructionListApplication.$(C) VDBInstructionListApplication.$(H): VDBInstructionListApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractContentsApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractListApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
+$(OUTDIR)VDBRegisterListApplication.$(O) VDBRegisterListApplication.$(C) VDBRegisterListApplication.$(H): VDBRegisterListApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractContentsApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractListApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
+$(OUTDIR)VDBStackApplication.$(O) VDBStackApplication.$(C) VDBStackApplication.$(H): VDBStackApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractContentsApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractListApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
+$(OUTDIR)VDBVariableObjectListApplication.$(O) VDBVariableObjectListApplication.$(C) VDBVariableObjectListApplication.$(H): VDBVariableObjectListApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractContentsApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractListApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)/jv/libgdbs/GDBDebugger.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBDebuggerObject.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBObject.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBVariableObject.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Dictionary.$(H) $(INCLUDE_TOP)/stx/libbasic/IdentityDictionary.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/Set.$(H) $(INCLUDE_TOP)/stx/libbasic/UserPreferences.$(H) $(STCHDR)
 
 # ENDMAKEDEPEND --- do not remove this line
--- a/Make.spec	Wed Jan 30 11:45:37 2019 +0000
+++ b/Make.spec	Wed Jan 23 22:05:43 2019 +0000
@@ -68,7 +68,7 @@
 	RRStartEvent \
 	VDBAbstractConsoleApplication \
 	VDBAbstractContainer \
-	VDBAbstractListApplication \
+	VDBAbstractContentsApplication \
 	VDBBreakpointApplication \
 	VDBBreakpointPresenter \
 	VDBDebuggerApplication \
@@ -82,19 +82,20 @@
 	VDBThreadGroupPresenter \
 	VDBThreadPresenter \
 	VDBVariableObjectPresenter \
-	VDBAbstractTreeApplication \
+	VDBAbstractListApplication \
 	VDBAbstractUnixConsoleApplication \
-	VDBBreakpointListApplication \
 	VDBSimpleDebuggerConsoleApplication \
 	VDBTabbingContainer \
+	VDBAbstractTreeApplication \
+	VDBBreakpointListApplication \
 	VDBFrameApplication \
-	VDBInstructionListApplication \
-	VDBRegisterListApplication \
 	VDBSourceAndDisassemblyApplication \
-	VDBStackApplication \
 	VDBUnixDebuggerConsoleApplication \
 	VDBUnixInferiorConsoleApplication \
 	VDBUnixReplayServerConsoleApplication \
+	VDBInstructionListApplication \
+	VDBRegisterListApplication \
+	VDBStackApplication \
 	VDBVariableObjectListApplication \
 
 
@@ -118,7 +119,7 @@
     $(OUTDIR)RRStartEvent.$(O) \
     $(OUTDIR)VDBAbstractConsoleApplication.$(O) \
     $(OUTDIR)VDBAbstractContainer.$(O) \
-    $(OUTDIR)VDBAbstractListApplication.$(O) \
+    $(OUTDIR)VDBAbstractContentsApplication.$(O) \
     $(OUTDIR)VDBBreakpointApplication.$(O) \
     $(OUTDIR)VDBBreakpointPresenter.$(O) \
     $(OUTDIR)VDBDebuggerApplication.$(O) \
@@ -132,19 +133,20 @@
     $(OUTDIR)VDBThreadGroupPresenter.$(O) \
     $(OUTDIR)VDBThreadPresenter.$(O) \
     $(OUTDIR)VDBVariableObjectPresenter.$(O) \
-    $(OUTDIR)VDBAbstractTreeApplication.$(O) \
+    $(OUTDIR)VDBAbstractListApplication.$(O) \
     $(OUTDIR)VDBAbstractUnixConsoleApplication.$(O) \
-    $(OUTDIR)VDBBreakpointListApplication.$(O) \
     $(OUTDIR)VDBSimpleDebuggerConsoleApplication.$(O) \
     $(OUTDIR)VDBTabbingContainer.$(O) \
+    $(OUTDIR)VDBAbstractTreeApplication.$(O) \
+    $(OUTDIR)VDBBreakpointListApplication.$(O) \
     $(OUTDIR)VDBFrameApplication.$(O) \
-    $(OUTDIR)VDBInstructionListApplication.$(O) \
-    $(OUTDIR)VDBRegisterListApplication.$(O) \
     $(OUTDIR)VDBSourceAndDisassemblyApplication.$(O) \
-    $(OUTDIR)VDBStackApplication.$(O) \
     $(OUTDIR)VDBUnixDebuggerConsoleApplication.$(O) \
     $(OUTDIR)VDBUnixInferiorConsoleApplication.$(O) \
     $(OUTDIR)VDBUnixReplayServerConsoleApplication.$(O) \
+    $(OUTDIR)VDBInstructionListApplication.$(O) \
+    $(OUTDIR)VDBRegisterListApplication.$(O) \
+    $(OUTDIR)VDBStackApplication.$(O) \
     $(OUTDIR)VDBVariableObjectListApplication.$(O) \
     $(OUTDIR)extensions.$(O) \
 
--- a/NEWS.md	Wed Jan 30 11:45:37 2019 +0000
+++ b/NEWS.md	Wed Jan 23 22:05:43 2019 +0000
@@ -1,3 +1,16 @@
+### 2019-02-14:
+
+  * Performance improvements to make VDB "snappier" especially when
+    debugging complex C++ codebases on slow(ish) systems such as
+    on *HiFive Unleashed* board.
+
+### 2019-01-25:
+
+  * Major improvements in GDB console widget for setups where PTY
+    cannot be used (such as on Windows or when using GDB over SSH)
+    Most importantly, new console supports command completion
+    (when GDB supports MI command `-complete`)
+
 ### 2019-01-21:
 
   * Support for arbitrary command to invoke GDB. This way one can use
--- a/VDBAbstractApplication.st	Wed Jan 30 11:45:37 2019 +0000
+++ b/VDBAbstractApplication.st	Wed Jan 23 22:05:43 2019 +0000
@@ -378,13 +378,27 @@
 !VDBAbstractApplication methodsFor:'hooks'!
 
 commonPostBuild
-    builder window isApplicationSubView ifTrue:[ 
+    window isNil ifTrue:[
         window := builder window.
+        window notNil ifTrue:[
+            windowVisible := window shown.
+            window addDependent: self.
+        ].
+    ].
+
+    "Created: / 07-10-2018 / 21:09:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 22-02-2019 / 21:14:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+commonPostOpen
+    window := builder window.
+    window notNil ifTrue:[
         windowVisible := window shown.
         window addDependent: self.
     ].
+    super commonPostOpen
 
-    "Created: / 07-10-2018 / 21:09:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Created: / 22-02-2019 / 12:52:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 postBuildWith:aBuilder
@@ -399,6 +413,13 @@
 
 !VDBAbstractApplication methodsFor:'initialization & release'!
 
+initialize
+    super initialize.
+    windowVisible := false.
+
+    "Created: / 14-02-2019 / 16:40:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 subscribe   
     "Register for debugger events. To be overrided by subclasses"
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/VDBAbstractContentsApplication.st	Wed Jan 23 22:05:43 2019 +0000
@@ -0,0 +1,90 @@
+"
+jv:vdb - Visual / VM Debugger
+Copyright (C) 2015-now Jan Vrany
+
+This software is licensed under 'Creative Commons Attribution-NonCommercial 4.0 International License'
+
+You may find a full license text in LICENSE.txt or at http://creativecommons.org/licenses/by-nc/4.0/
+"
+"{ Package: 'jv:vdb' }"
+
+"{ NameSpace: Smalltalk }"
+
+VDBAbstractApplication subclass:#VDBAbstractContentsApplication
+	instanceVariableNames:'contentsValid'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'VDB-UI-Abstract'
+!
+
+!VDBAbstractContentsApplication class methodsFor:'documentation'!
+
+copyright
+"
+jv:vdb - Visual / VM Debugger
+Copyright (C) 2015-now Jan Vrany
+
+This software is licensed under 'Creative Commons Attribution-NonCommercial 4.0 International License'
+
+You may find a full license text in LICENSE.txt or at http://creativecommons.org/licenses/by-nc/4.0/
+"
+! !
+
+!VDBAbstractContentsApplication class methodsFor:'queries'!
+
+isAbstract
+    "Return if this class is an abstract class.
+     True is returned here for myself only; false for subclasses.
+     Abstract subclasses must redefine this again."
+
+    ^ self == VDBAbstractContentsApplication.
+! !
+
+!VDBAbstractContentsApplication methodsFor:'change & update'!
+
+enqueueDelayedUpdateContents
+    contentsValid := false.
+    windowVisible ifTrue:[
+        self enqueueDelayedUpdate:#delayedUpdateContentsInternal
+    ]
+
+    "Created: / 01-10-2018 / 12:56:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 14-02-2019 / 16:11:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+updateAfterWindowVisibilityChanged
+    contentsValid ifFalse:[ 
+        self enqueueDelayedUpdateContents  
+    ].
+
+    "Created: / 14-02-2019 / 16:17:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!VDBAbstractContentsApplication methodsFor:'change & update-delayed'!
+
+delayedUpdateContents
+    self subclassResponsibility
+
+    "Created: / 14-02-2019 / 16:16:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+delayedUpdateContentsInternal
+    "/ For internal use, do not override!!"
+    contentsValid := false.
+    windowVisible ifTrue:[ 
+        self delayedUpdateContents.
+        contentsValid := true.
+    ].
+
+    "Created: / 14-02-2019 / 16:09:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!VDBAbstractContentsApplication methodsFor:'initialization'!
+
+initialize
+    super initialize.
+    contentsValid := false.
+
+    "Created: / 14-02-2019 / 16:18:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/VDBAbstractListApplication.st	Wed Jan 30 11:45:37 2019 +0000
+++ b/VDBAbstractListApplication.st	Wed Jan 23 22:05:43 2019 +0000
@@ -10,7 +10,7 @@
 
 "{ NameSpace: Smalltalk }"
 
-VDBAbstractApplication subclass:#VDBAbstractListApplication
+VDBAbstractContentsApplication subclass:#VDBAbstractListApplication
 	instanceVariableNames:'internalListHolder internalListView internalSelectionHolder'
 	classVariableNames:''
 	poolDictionaries:''
@@ -338,10 +338,11 @@
 !
 
 enqueueDelayedUpdateInternalList
-   self enqueueDelayedUpdate: #delayedUpdateInternalList
+   self enqueueDelayedUpdate: #delayedUpdateInternalListInternal
 
     "Created: / 20-09-2014 / 23:05:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified: / 17-01-2018 / 06:51:55 / jv"
+    "Modified: / 14-02-2019 / 16:44:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 enqueueDelayedUpdateSelection
@@ -382,12 +383,35 @@
     "Modified (format): / 03-10-2018 / 15:25:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+delayedUpdateContents
+    self enqueueDelayedUpdateInternalList
+
+    "Created: / 14-02-2019 / 16:29:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+delayedUpdateContentsInternal
+    "/ For internal use, do not override!!"
+    contentsValid := false.
+    windowVisible ifTrue:[ 
+        self delayedUpdateContents.
+    ].
+
+    "Created: / 14-02-2019 / 16:43:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 delayedUpdateInternalList
     "raise an error: must be redefined in concrete subclass(es)"
 
     ^ self subclassResponsibility
 !
 
+delayedUpdateInternalListInternal
+    self delayedUpdateInternalList.
+    contentsValid := true.
+
+    "Created: / 14-02-2019 / 16:44:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 delayedUpdateSelection
     "raise an error: must be redefined in concrete subclass(es)"
 
@@ -434,10 +458,11 @@
 commonPostOpen
     "a common hook for postOpenWith:, postOpenAsSubcanvasWith: and postOpenAsDialogWith:."
 
-    self enqueueDelayedUpdateInternalList
+    super commonPostOpen.
+    self enqueueDelayedUpdateContents
 
     "Created: / 18-09-2014 / 00:29:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 20-09-2014 / 23:50:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 22-02-2019 / 12:57:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 postBuildInternalListView: aView
@@ -558,9 +583,9 @@
 duUpdateList
     <resource: #uiCallback>
 
-    self enqueueDelayedUpdateInternalList
+    self enqueueDelayedUpdateContents
 
-    "Modified: / 12-06-2017 / 12:00:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 14-02-2019 / 16:28:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !VDBAbstractListApplication methodsFor:'private'!
--- a/VDBBreakpointListApplication.st	Wed Jan 30 11:45:37 2019 +0000
+++ b/VDBBreakpointListApplication.st	Wed Jan 23 22:05:43 2019 +0000
@@ -198,17 +198,17 @@
 !VDBBreakpointListApplication methodsFor:'event handling'!
 
 onBreakpointCreatedEvent: aGDBBreakpointCreatedEvent
-    self enqueueDelayedUpdateInternalList.
+    self enqueueDelayedUpdateContents.
 
     "Created: / 10-07-2017 / 17:59:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 07-10-2018 / 22:09:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 14-02-2019 / 16:32:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 onBreakpointDeletedEvent: aGDBBreakpointDeletedEvent
-    self enqueueDelayedUpdateInternalList.
+    self enqueueDelayedUpdateContents.
 
     "Created: / 10-07-2017 / 17:59:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 07-10-2018 / 22:09:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 14-02-2019 / 16:32:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 onBreakpointModifiedEvent: aGDBBreakpointModifiedEvent
--- a/VDBEvaluator.st	Wed Jan 30 11:45:37 2019 +0000
+++ b/VDBEvaluator.st	Wed Jan 23 22:05:43 2019 +0000
@@ -76,3 +76,10 @@
     "Created: / 21-03-2018 / 22:36:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!VDBEvaluator class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- a/VDBInstructionListApplication.st	Wed Jan 30 11:45:37 2019 +0000
+++ b/VDBInstructionListApplication.st	Wed Jan 23 22:05:43 2019 +0000
@@ -371,29 +371,24 @@
     "Created: / 03-10-2018 / 12:12:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
-enqueueDelayedUpdateInstructionList
-    self enqueueDelayedUpdate: #delayedUpdateInstructionList
-
-    "Created: / 01-10-2018 / 12:56:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
 update:aspect with:param from:sender
     "Invoked when an object that I depend upon sends a change notification."
 
-    sender == instructionListHolder ifTrue:[ 
-         self enqueueDelayedUpdateInternalList.
-         ^ self.
+    sender == instructionListHolder ifTrue:[
+        self enqueueDelayedUpdateInternalList.
+        ^ self.
     ].
     sender == frameHolder ifTrue:[ 
-         self enqueueDelayedUpdateInstructionList.
-         ^ self.
+        self enqueueDelayedUpdateContents.
+        ^ self.
     ].
     sender == selectedInstructionHolder ifTrue:[ 
         self updateAfterSelectedInstructionChanged.
     ].
     super update:aspect with:param from:sender
 
-    "Modified: / 01-10-2018 / 12:56:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 23-01-2019 / 16:37:11 / jv"
+    "Modified: / 14-02-2019 / 16:52:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 updateAfterSelectedInstructionChanged
@@ -490,19 +485,19 @@
     "Created: / 03-10-2018 / 12:12:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
-delayedUpdateInstructionList
+delayedUpdateContents
     | frame |
 
     frame := self frame.
     (frame notNil and:[ frame hasSymbol ]) ifTrue:[
-        self instructionList: frame disassemble.
-    ] ifFalse:[ 
-        self instructionList: #().
+        self instructionList:frame disassemble.
+    ] ifFalse:[
+        self instructionList:#().
     ].
     self updateButtonEnablements.
 
     "Created: / 01-10-2018 / 12:55:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 02-10-2018 / 10:12:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 14-02-2019 / 16:09:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 delayedUpdateInternalList
@@ -573,8 +568,26 @@
     "Modified: / 03-10-2018 / 12:13:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!VDBInstructionListApplication methodsFor:'hooks'!
+
+postBuildInternalListView: aView
+    super postBuildInternalListView: aView.
+    internalListView addDependent: self.
+
+    "Created: / 23-01-2019 / 16:10:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !VDBInstructionListApplication methodsFor:'initialization & release'!
 
+release
+    super release.
+    internalListView notNil ifTrue:[ 
+        internalListView removeDependent: self.
+    ].
+
+    "Created: / 23-01-2019 / 16:11:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 subscribe   
     "Register for debugger events. To be overrided by subclasses"
 
@@ -584,8 +597,10 @@
         "/when: GDBExitEvent          send: #onExitEvent:     to: self;
         when: GDBCommandResultEvent send: #onCommandResultEvent: to: self.
 
+    contentsValid := false.
+
     "Created: / 06-08-2018 / 14:44:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 01-09-2018 / 14:48:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 23-01-2019 / 14:29:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !VDBInstructionListApplication methodsFor:'menu actions'!
--- a/VDBRegisterListApplication.st	Wed Jan 30 11:45:37 2019 +0000
+++ b/VDBRegisterListApplication.st	Wed Jan 23 22:05:43 2019 +0000
@@ -193,12 +193,12 @@
     "Invoked when an object that I depend upon sends a change notification."
 
     sender == registerListHolder ifTrue:[ 
-         self enqueueDelayedUpdateInternalList.
+         self enqueueDelayedUpdateContents.
          ^ self.
     ].
     super update:aspect with:param from:sender
 
-    "Modified: / 03-02-2018 / 09:47:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 14-02-2019 / 16:31:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !VDBRegisterListApplication methodsFor:'change & update-delayed'!
--- a/VDBStackApplication.st	Wed Jan 30 11:45:37 2019 +0000
+++ b/VDBStackApplication.st	Wed Jan 23 22:05:43 2019 +0000
@@ -233,7 +233,12 @@
 delayedUpdateAfterThreadStopped:thread 
     "/ It may happen that by te time we get here the thread is running
     "/ again, so care for this.
-    
+
+    contentsValid ifFalse:[ 
+        self enqueueUpdateAfterThreadStopped: thread.               
+        ^ self
+    ].
+
     thread isStopped ifTrue:[
         |threadP framePs frameP|
 
@@ -248,8 +253,8 @@
     ].
 
     "Created: / 22-09-2014 / 23:21:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 06-07-2017 / 08:56:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified: / 16-01-2018 / 20:22:04 / jv"
+    "Modified: / 14-02-2019 / 16:53:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 delayedUpdateInternalList
@@ -323,28 +328,29 @@
 onStoppedEvent: event
     | stoppedThread |
 
-    self enqueueDelayedUpdateInternalList.
+    self enqueueDelayedUpdateContents.
     stoppedThread := event stoppedThread.
     stoppedThread notNil ifTrue:[
         self enqueueUpdateAfterThreadStopped:event stoppedThread.
     ].
 
     "Created: / 17-09-2014 / 23:04:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 22-09-2014 / 23:26:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified: / 15-01-2018 / 11:51:51 / jv"
+    "Modified: / 14-02-2019 / 16:31:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 onThreadGroupExitedEvent: event
-    self enqueueDelayedUpdateInternalList.
+    self enqueueDelayedUpdateContents.
 
     "Created: / 18-09-2014 / 23:30:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 20-09-2014 / 23:08:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 14-02-2019 / 16:31:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 onThreadGroupStartedEvent: event
-    self enqueueDelayedUpdateInternalList.
+    self enqueueDelayedUpdateContents.
 
     "Created: / 02-03-2015 / 06:42:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 14-02-2019 / 16:31:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !VDBStackApplication methodsFor:'initialization & release'!
--- a/VDBVariableObjectListApplication.st	Wed Jan 30 11:45:37 2019 +0000
+++ b/VDBVariableObjectListApplication.st	Wed Jan 23 22:05:43 2019 +0000
@@ -207,12 +207,12 @@
     "Invoked when an object that I depend upon sends a change notification."
 
     sender == variableObjectListHolder ifTrue:[ 
-         self enqueueDelayedUpdateInternalList.
+         self enqueueDelayedUpdateContents.
          ^ self.
     ].
     super update:aspect with:param from:sender
 
-    "Modified: / 03-02-2018 / 09:47:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 14-02-2019 / 16:31:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !VDBVariableObjectListApplication methodsFor:'change & update-delayed'!
--- a/abbrev.stc	Wed Jan 30 11:45:37 2019 +0000
+++ b/abbrev.stc	Wed Jan 23 22:05:43 2019 +0000
@@ -18,7 +18,7 @@
 RRStartEvent RRStartEvent jv:vdb 'RR' 0
 VDBAbstractConsoleApplication VDBAbstractConsoleApplication jv:vdb 'VDB-UI-Abstract' 2
 VDBAbstractContainer VDBAbstractContainer jv:vdb 'VDB-UI-Abstract' 2
-VDBAbstractListApplication VDBAbstractListApplication jv:vdb 'VDB-UI-Abstract' 2
+VDBAbstractContentsApplication VDBAbstractContentsApplication jv:vdb 'VDB-UI-Abstract' 2
 VDBBreakpointApplication VDBBreakpointApplication jv:vdb 'VDB-UI-Others' 2
 VDBBreakpointPresenter VDBBreakpointPresenter jv:vdb 'VDB-Presentation' 0
 VDBDebuggerApplication VDBDebuggerApplication jv:vdb 'VDB-UI' 2
@@ -32,17 +32,18 @@
 VDBThreadGroupPresenter VDBThreadGroupPresenter jv:vdb 'VDB-Presentation' 0
 VDBThreadPresenter VDBThreadPresenter jv:vdb 'VDB-Presentation' 0
 VDBVariableObjectPresenter VDBVariableObjectPresenter jv:vdb 'VDB-Presentation' 0
-VDBAbstractTreeApplication VDBAbstractTreeApplication jv:vdb 'VDB-UI-Abstract' 2
+VDBAbstractListApplication VDBAbstractListApplication jv:vdb 'VDB-UI-Abstract' 2
 VDBAbstractUnixConsoleApplication VDBAbstractUnixConsoleApplication jv:vdb 'VDB-UI-Console-Unix' 2
-VDBBreakpointListApplication VDBBreakpointListApplication jv:vdb 'VDB-UI-Others' 2
 VDBSimpleDebuggerConsoleApplication VDBSimpleDebuggerConsoleApplication jv:vdb 'VDB-UI-Console' 2
 VDBTabbingContainer VDBTabbingContainer jv:vdb 'VDB-UI-Containers' 2
+VDBAbstractTreeApplication VDBAbstractTreeApplication jv:vdb 'VDB-UI-Abstract' 2
+VDBBreakpointListApplication VDBBreakpointListApplication jv:vdb 'VDB-UI-Others' 2
 VDBFrameApplication VDBFrameApplication jv:vdb 'VDB-UI-Others' 2
-VDBInstructionListApplication VDBInstructionListApplication jv:vdb 'VDB-UI-Others' 2
-VDBRegisterListApplication VDBRegisterListApplication jv:vdb 'VDB-UI-Others' 2
 VDBSourceAndDisassemblyApplication VDBSourceAndDisassemblyApplication jv:vdb 'VDB-UI-Source' 2
-VDBStackApplication VDBStackApplication jv:vdb 'VDB-UI-Others' 2
 VDBUnixDebuggerConsoleApplication VDBUnixDebuggerConsoleApplication jv:vdb 'VDB-UI-Console-Unix' 2
 VDBUnixInferiorConsoleApplication VDBUnixInferiorConsoleApplication jv:vdb 'VDB-UI-Console-Unix' 2
 VDBUnixReplayServerConsoleApplication VDBUnixReplayServerConsoleApplication jv:vdb 'VDB-UI-Console-Unix' 2
+VDBInstructionListApplication VDBInstructionListApplication jv:vdb 'VDB-UI-Others' 2
+VDBRegisterListApplication VDBRegisterListApplication jv:vdb 'VDB-UI-Others' 2
+VDBStackApplication VDBStackApplication jv:vdb 'VDB-UI-Others' 2
 VDBVariableObjectListApplication VDBVariableObjectListApplication jv:vdb 'VDB-UI-Others' 2
--- a/bc.mak	Wed Jan 30 11:45:37 2019 +0000
+++ b/bc.mak	Wed Jan 23 22:05:43 2019 +0000
@@ -98,7 +98,7 @@
 $(OUTDIR)RRStartEvent.$(O) RRStartEvent.$(C) RRStartEvent.$(H): RRStartEvent.st $(INCLUDE_TOP)\jv\vdb\RREvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)VDBAbstractConsoleApplication.$(O) VDBAbstractConsoleApplication.$(C) VDBAbstractConsoleApplication.$(H): VDBAbstractConsoleApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBAbstractContainer.$(O) VDBAbstractContainer.$(C) VDBAbstractContainer.$(H): VDBAbstractContainer.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
-$(OUTDIR)VDBAbstractListApplication.$(O) VDBAbstractListApplication.$(C) VDBAbstractListApplication.$(H): VDBAbstractListApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
+$(OUTDIR)VDBAbstractContentsApplication.$(O) VDBAbstractContentsApplication.$(C) VDBAbstractContentsApplication.$(H): VDBAbstractContentsApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBBreakpointApplication.$(O) VDBBreakpointApplication.$(C) VDBBreakpointApplication.$(H): VDBBreakpointApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBBreakpointPresenter.$(O) VDBBreakpointPresenter.$(C) VDBBreakpointPresenter.$(H): VDBBreakpointPresenter.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractPresenter.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libwidg2\AbstractHierarchicalItem.$(H) $(INCLUDE_TOP)\stx\libwidg2\HierarchicalItem.$(H) $(STCHDR)
 $(OUTDIR)VDBDebuggerApplication.$(O) VDBDebuggerApplication.$(C) VDBDebuggerApplication.$(H): VDBDebuggerApplication.st $(INCLUDE_TOP)\jv\libgdbs\GDBStopReasons.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
@@ -112,20 +112,21 @@
 $(OUTDIR)VDBThreadGroupPresenter.$(O) VDBThreadGroupPresenter.$(C) VDBThreadGroupPresenter.$(H): VDBThreadGroupPresenter.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractPresenter.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libwidg2\AbstractHierarchicalItem.$(H) $(INCLUDE_TOP)\stx\libwidg2\HierarchicalItem.$(H) $(STCHDR)
 $(OUTDIR)VDBThreadPresenter.$(O) VDBThreadPresenter.$(C) VDBThreadPresenter.$(H): VDBThreadPresenter.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractPresenter.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libwidg2\AbstractHierarchicalItem.$(H) $(INCLUDE_TOP)\stx\libwidg2\HierarchicalItem.$(H) $(STCHDR)
 $(OUTDIR)VDBVariableObjectPresenter.$(O) VDBVariableObjectPresenter.$(C) VDBVariableObjectPresenter.$(H): VDBVariableObjectPresenter.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractPresenter.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libwidg2\AbstractHierarchicalItem.$(H) $(INCLUDE_TOP)\stx\libwidg2\HierarchicalItem.$(H) $(STCHDR)
-$(OUTDIR)VDBAbstractTreeApplication.$(O) VDBAbstractTreeApplication.$(C) VDBAbstractTreeApplication.$(H): VDBAbstractTreeApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractListApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
+$(OUTDIR)VDBAbstractListApplication.$(O) VDBAbstractListApplication.$(C) VDBAbstractListApplication.$(H): VDBAbstractListApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractContentsApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBAbstractUnixConsoleApplication.$(O) VDBAbstractUnixConsoleApplication.$(C) VDBAbstractUnixConsoleApplication.$(H): VDBAbstractUnixConsoleApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractConsoleApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
-$(OUTDIR)VDBBreakpointListApplication.$(O) VDBBreakpointListApplication.$(C) VDBBreakpointListApplication.$(H): VDBBreakpointListApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractListApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBSimpleDebuggerConsoleApplication.$(O) VDBSimpleDebuggerConsoleApplication.$(C) VDBSimpleDebuggerConsoleApplication.$(H): VDBSimpleDebuggerConsoleApplication.st $(INCLUDE_TOP)\jv\libgdbs\GDBCommandStatus.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractConsoleApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBTabbingContainer.$(O) VDBTabbingContainer.$(C) VDBTabbingContainer.$(H): VDBTabbingContainer.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractContainer.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
+$(OUTDIR)VDBAbstractTreeApplication.$(O) VDBAbstractTreeApplication.$(C) VDBAbstractTreeApplication.$(H): VDBAbstractTreeApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractContentsApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractListApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
+$(OUTDIR)VDBBreakpointListApplication.$(O) VDBBreakpointListApplication.$(C) VDBBreakpointListApplication.$(H): VDBBreakpointListApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractContentsApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractListApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBFrameApplication.$(O) VDBFrameApplication.$(C) VDBFrameApplication.$(H): VDBFrameApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractContainer.$(H) $(INCLUDE_TOP)\jv\vdb\VDBTabbingContainer.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
-$(OUTDIR)VDBInstructionListApplication.$(O) VDBInstructionListApplication.$(C) VDBInstructionListApplication.$(H): VDBInstructionListApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractListApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
-$(OUTDIR)VDBRegisterListApplication.$(O) VDBRegisterListApplication.$(C) VDBRegisterListApplication.$(H): VDBRegisterListApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractListApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBSourceAndDisassemblyApplication.$(O) VDBSourceAndDisassemblyApplication.$(C) VDBSourceAndDisassemblyApplication.$(H): VDBSourceAndDisassemblyApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractContainer.$(H) $(INCLUDE_TOP)\jv\vdb\VDBTabbingContainer.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
-$(OUTDIR)VDBStackApplication.$(O) VDBStackApplication.$(C) VDBStackApplication.$(H): VDBStackApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractListApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBUnixDebuggerConsoleApplication.$(O) VDBUnixDebuggerConsoleApplication.$(C) VDBUnixDebuggerConsoleApplication.$(H): VDBUnixDebuggerConsoleApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractConsoleApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractUnixConsoleApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBUnixInferiorConsoleApplication.$(O) VDBUnixInferiorConsoleApplication.$(C) VDBUnixInferiorConsoleApplication.$(H): VDBUnixInferiorConsoleApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractConsoleApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractUnixConsoleApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBUnixReplayServerConsoleApplication.$(O) VDBUnixReplayServerConsoleApplication.$(C) VDBUnixReplayServerConsoleApplication.$(H): VDBUnixReplayServerConsoleApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractConsoleApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractUnixConsoleApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
-$(OUTDIR)VDBVariableObjectListApplication.$(O) VDBVariableObjectListApplication.$(C) VDBVariableObjectListApplication.$(H): VDBVariableObjectListApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractListApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
+$(OUTDIR)VDBInstructionListApplication.$(O) VDBInstructionListApplication.$(C) VDBInstructionListApplication.$(H): VDBInstructionListApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractContentsApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractListApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
+$(OUTDIR)VDBRegisterListApplication.$(O) VDBRegisterListApplication.$(C) VDBRegisterListApplication.$(H): VDBRegisterListApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractContentsApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractListApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
+$(OUTDIR)VDBStackApplication.$(O) VDBStackApplication.$(C) VDBStackApplication.$(H): VDBStackApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractContentsApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractListApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
+$(OUTDIR)VDBVariableObjectListApplication.$(O) VDBVariableObjectListApplication.$(C) VDBVariableObjectListApplication.$(H): VDBVariableObjectListApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractContentsApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractListApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)\jv\libgdbs\GDBDebugger.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBDebuggerObject.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBObject.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBVariableObject.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Dictionary.$(H) $(INCLUDE_TOP)\stx\libbasic\IdentityDictionary.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Set.$(H) $(INCLUDE_TOP)\stx\libbasic\UserPreferences.$(H) $(STCHDR)
 
 # ENDMAKEDEPEND --- do not remove this line
--- a/jv_vdb.st	Wed Jan 30 11:45:37 2019 +0000
+++ b/jv_vdb.st	Wed Jan 23 22:05:43 2019 +0000
@@ -117,7 +117,7 @@
         RRStartEvent
         VDBAbstractConsoleApplication
         VDBAbstractContainer
-        VDBAbstractListApplication
+        VDBAbstractContentsApplication
         VDBBreakpointApplication
         VDBBreakpointPresenter
         VDBDebuggerApplication
@@ -131,19 +131,20 @@
         VDBThreadGroupPresenter
         VDBThreadPresenter
         VDBVariableObjectPresenter
-        VDBAbstractTreeApplication
+        VDBAbstractListApplication
         VDBAbstractUnixConsoleApplication
-        VDBBreakpointListApplication
         VDBSimpleDebuggerConsoleApplication
         VDBTabbingContainer
+        VDBAbstractTreeApplication
+        VDBBreakpointListApplication
         VDBFrameApplication
-        VDBInstructionListApplication
-        VDBRegisterListApplication
         VDBSourceAndDisassemblyApplication
-        VDBStackApplication
         VDBUnixDebuggerConsoleApplication
         VDBUnixInferiorConsoleApplication
         VDBUnixReplayServerConsoleApplication
+        VDBInstructionListApplication
+        VDBRegisterListApplication
+        VDBStackApplication
         VDBVariableObjectListApplication
     )
 !
--- a/libInit.cc	Wed Jan 30 11:45:37 2019 +0000
+++ b/libInit.cc	Wed Jan 23 22:05:43 2019 +0000
@@ -33,7 +33,7 @@
 extern void _RRStartEvent_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBAbstractConsoleApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBAbstractContainer_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
-extern void _VDBAbstractListApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
+extern void _VDBAbstractContentsApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBBreakpointApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBBreakpointPresenter_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBDebuggerApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
@@ -47,19 +47,20 @@
 extern void _VDBThreadGroupPresenter_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBThreadPresenter_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBVariableObjectPresenter_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
-extern void _VDBAbstractTreeApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
+extern void _VDBAbstractListApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBAbstractUnixConsoleApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
-extern void _VDBBreakpointListApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBSimpleDebuggerConsoleApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBTabbingContainer_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
+extern void _VDBAbstractTreeApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
+extern void _VDBBreakpointListApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBFrameApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
-extern void _VDBInstructionListApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
-extern void _VDBRegisterListApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBSourceAndDisassemblyApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
-extern void _VDBStackApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBUnixDebuggerConsoleApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBUnixInferiorConsoleApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBUnixReplayServerConsoleApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
+extern void _VDBInstructionListApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
+extern void _VDBRegisterListApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
+extern void _VDBStackApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBVariableObjectListApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 
 extern void _jv_137vdb_extensions_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
@@ -92,7 +93,7 @@
     _RRStartEvent_Init(pass,__pRT__,snd);
     _VDBAbstractConsoleApplication_Init(pass,__pRT__,snd);
     _VDBAbstractContainer_Init(pass,__pRT__,snd);
-    _VDBAbstractListApplication_Init(pass,__pRT__,snd);
+    _VDBAbstractContentsApplication_Init(pass,__pRT__,snd);
     _VDBBreakpointApplication_Init(pass,__pRT__,snd);
     _VDBBreakpointPresenter_Init(pass,__pRT__,snd);
     _VDBDebuggerApplication_Init(pass,__pRT__,snd);
@@ -106,19 +107,20 @@
     _VDBThreadGroupPresenter_Init(pass,__pRT__,snd);
     _VDBThreadPresenter_Init(pass,__pRT__,snd);
     _VDBVariableObjectPresenter_Init(pass,__pRT__,snd);
-    _VDBAbstractTreeApplication_Init(pass,__pRT__,snd);
+    _VDBAbstractListApplication_Init(pass,__pRT__,snd);
     _VDBAbstractUnixConsoleApplication_Init(pass,__pRT__,snd);
-    _VDBBreakpointListApplication_Init(pass,__pRT__,snd);
     _VDBSimpleDebuggerConsoleApplication_Init(pass,__pRT__,snd);
     _VDBTabbingContainer_Init(pass,__pRT__,snd);
+    _VDBAbstractTreeApplication_Init(pass,__pRT__,snd);
+    _VDBBreakpointListApplication_Init(pass,__pRT__,snd);
     _VDBFrameApplication_Init(pass,__pRT__,snd);
-    _VDBInstructionListApplication_Init(pass,__pRT__,snd);
-    _VDBRegisterListApplication_Init(pass,__pRT__,snd);
     _VDBSourceAndDisassemblyApplication_Init(pass,__pRT__,snd);
-    _VDBStackApplication_Init(pass,__pRT__,snd);
     _VDBUnixDebuggerConsoleApplication_Init(pass,__pRT__,snd);
     _VDBUnixInferiorConsoleApplication_Init(pass,__pRT__,snd);
     _VDBUnixReplayServerConsoleApplication_Init(pass,__pRT__,snd);
+    _VDBInstructionListApplication_Init(pass,__pRT__,snd);
+    _VDBRegisterListApplication_Init(pass,__pRT__,snd);
+    _VDBStackApplication_Init(pass,__pRT__,snd);
     _VDBVariableObjectListApplication_Init(pass,__pRT__,snd);
 
     _jv_137vdb_extensions_Init(pass,__pRT__,snd);
--- a/tests/VDBAbstractApplicationTests.st	Wed Jan 30 11:45:37 2019 +0000
+++ b/tests/VDBAbstractApplicationTests.st	Wed Jan 23 22:05:43 2019 +0000
@@ -81,6 +81,22 @@
     "Created: / 28-09-2018 / 08:29:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!VDBAbstractApplicationTests methodsFor:'utilities'!
+
+waitForUIToStabilize
+    "Block testcase execution until UI stabilizes, i.e.,
+     all events are processed, all pending commands executed."
+
+    | window |
+
+    window := application window.
+    window notNil ifTrue:[ window waitUntilEventsProcessed ].
+    debugger waitUntilAlCommandsProcessed.
+    window notNil ifTrue:[ window waitUntilEventsProcessed ].
+
+    "Created: / 23-01-2019 / 21:42:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !VDBAbstractApplicationTests class methodsFor:'documentation'!
 
 version_HG
--- a/tests/VDBInstructionListApplicationTests.st	Wed Jan 30 11:45:37 2019 +0000
+++ b/tests/VDBInstructionListApplicationTests.st	Wed Jan 23 22:05:43 2019 +0000
@@ -97,6 +97,85 @@
 
     "Created: / 03-10-2018 / 12:27:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified: / 03-10-2018 / 15:14:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_02
+    "
+    This test tests that contents is not updated when
+    listView is not visible and gets update when it becomes
+    visible.
+    "
+
+    | stack frameHolder internalListView |
+
+    debugger := GDBDebugger new.
+    self assert: debugger isConnected.
+
+    frameHolder := ValueHolder new.
+    application := VDBInstructionListApplication new.
+    application debuggerHolder: (ValueHolder with: debugger).
+    application frameHolder: frameHolder.  
+    application open.
+    application window waitUntilVisible.
+    internalListView := application instVarNamed: #internalListView.
+    debugger executable: GDBDebuggeesResource current binaryFactorial1.
+    debugger send: 'b factorial'.
+    debugger send: 'r' andWaitFor: GDBStoppedEvent.
+    debugger send: 'c' andWaitFor: GDBStoppedEvent.
+
+    stack := debugger selectedInferior threads first stack.
+    self assert: stack size = 3.
+
+    "/ List visible, no frame set, so list should 
+    "/ be empty.
+    self assert: frameHolder value isNil.
+    self assert: internalListView shown.
+    self assert: internalListView list isEmpty.
+
+    "/ List visible, set a frame, list should get
+    "/ updated and should contain some instructions
+    frameHolder value: stack first.
+    self waitForUIToStabilize.
+
+    self assert: frameHolder value notNil.
+    self assert: internalListView shown.
+    self assert: internalListView list notEmpty.
+
+    "/ List visible, set frame to nil, list should 
+    "/ become empty.
+    frameHolder value: nil.
+    self waitForUIToStabilize.
+
+    self assert: frameHolder value isNil.
+    self assert: internalListView shown.
+    self assert: internalListView list isEmpty.
+
+    "/ Hide the list and set frame, list should
+    "/ stay empty (i.e., not updated)
+    internalListView beInvisible.
+    frameHolder value: stack first.
+    self waitForUIToStabilize.
+
+    self assert: frameHolder value notNil.
+    self assert: internalListView shown not.
+    self assert: internalListView list isEmpty.
+
+    "/ Show the list, contents should get
+    "/ updated.
+    internalListView beVisible.
+    internalListView waitUntilVisible.
+    self waitForUIToStabilize.
+
+    self assert: frameHolder value notNil.
+    self assert: internalListView shown.
+    self assert: internalListView list notEmpty.
+
+    debugger send: 'd'.
+    debugger send: 'c' andWaitFor: GDBThreadGroupExitedEvent.
+
+    "Created: / 23-01-2019 / 16:28:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 23-01-2019 / 21:55:04 / jv"
+    "Modified: / 23-01-2019 / 21:55:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !VDBInstructionListApplicationTests class methodsFor:'documentation'!