diff --git a/spec/text-editor-component-spec.js b/spec/text-editor-component-spec.js index e2cd0988b..d1ff883c9 100644 --- a/spec/text-editor-component-spec.js +++ b/spec/text-editor-component-spec.js @@ -2299,6 +2299,27 @@ describe('TextEditorComponent', () => { ]) }) + it('removes block decorations whose markers have been destroyed', async () => { + const {editor, component, element} = buildComponent({rowsPerTile: 3}) + const {marker} = createBlockDecorationAtScreenRow(editor, 2, {height: 5, position: 'before'}) + await component.getNextUpdatePromise() + assertLinesAreAlignedWithLineNumbers(component) + assertTilesAreSizedAndPositionedCorrectly(component, [ + {tileStartRow: 0, height: 3 * component.getLineHeight() + 5}, + {tileStartRow: 3, height: 3 * component.getLineHeight()}, + {tileStartRow: 6, height: 3 * component.getLineHeight()} + ]) + + marker.destroy() + await component.getNextUpdatePromise() + assertLinesAreAlignedWithLineNumbers(component) + assertTilesAreSizedAndPositionedCorrectly(component, [ + {tileStartRow: 0, height: 3 * component.getLineHeight()}, + {tileStartRow: 3, height: 3 * component.getLineHeight()}, + {tileStartRow: 6, height: 3 * component.getLineHeight()} + ]) + }) + it('removes block decorations whose markers are invalidated, and adds them back when they become valid again', async () => { const editor = buildEditor({rowsPerTile: 3, autoHeight: false}) const {item, decoration, marker} = createBlockDecorationAtScreenRow(editor, 3, {height: 44, position: 'before', invalidate: 'touch'}) diff --git a/src/text-editor-component.js b/src/text-editor-component.js index 333486df8..c668ea8f6 100644 --- a/src/text-editor-component.js +++ b/src/text-editor-component.js @@ -2506,7 +2506,7 @@ class TextEditorComponent { didUpdateDisposable.dispose() didDestroyDisposable.dispose() - if (marker.isValid()) { + if (wasValid) { this.blockDecorationsToMeasure.delete(decoration) this.heightsByBlockDecoration.delete(decoration) this.blockDecorationsByElement.delete(element)