Skip to content

Commit fe178bf

Browse files
committed
fixes after copilot review
1 parent 4a1583c commit fe178bf

3 files changed

Lines changed: 35 additions & 0 deletions

File tree

src/vs/workbench/api/browser/mainThreadCustomEditorOutline.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,15 @@ class CustomEditorOutlineProviderEntry {
6464
this.getOrCreateResourceEntry(resource).fireDidChangeActiveItem(itemId);
6565
}
6666

67+
removeResourceEntry(resource: URI): void {
68+
const key = resource.toString();
69+
const entry = this._resourceEntries.get(key);
70+
if (entry) {
71+
entry.dispose();
72+
this._resourceEntries.delete(key);
73+
}
74+
}
75+
6776
dispose(): void {
6877
for (const entry of this._resourceEntries.values()) {
6978
entry.dispose();
@@ -141,6 +150,10 @@ class CustomEditorOutlineProviderService extends Disposable implements ICustomEd
141150
this._onDidChange.fire();
142151
}
143152

153+
releaseResource(viewType: string, resource: URI): void {
154+
this._entries.get(viewType)?.removeResourceEntry(resource);
155+
}
156+
144157
fireDidChangeOutline(viewType: string, resource: URI): void {
145158
this._entries.get(viewType)?.fireDidChangeOutline(resource);
146159
}

src/vs/workbench/contrib/customEditor/browser/customEditorOutline.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { IIconLabelValueOptions, IconLabel } from '../../../../base/browser/ui/i
99
import { IKeyboardNavigationLabelProvider, IListVirtualDelegate } from '../../../../base/browser/ui/list/list.js';
1010
import { IListAccessibilityProvider } from '../../../../base/browser/ui/list/listWidget.js';
1111
import { IDataSource, ITreeNode, ITreeRenderer } from '../../../../base/browser/ui/tree/tree.js';
12+
import { disposableTimeout } from '../../../../base/common/async.js';
1213
import { Emitter, Event } from '../../../../base/common/event.js';
1314
import { FuzzyScore, createMatches } from '../../../../base/common/filters.js';
1415
import { Disposable, DisposableStore, IDisposable, MutableDisposable, toDisposable } from '../../../../base/common/lifecycle.js';
@@ -124,13 +125,32 @@ class CustomEditorOutlineRenderer implements ITreeRenderer<CustomEditorOutlineEn
124125

125126
const menu = template.elementDisposables.add(this._menuService.createMenu(MenuId.CustomEditorOutlineActionMenu, scopedContextKeyService));
126127
const menuArg = { id: entry.id, uri: this._resource };
128+
129+
// same fix as in notebookOutline setupToolbarListeners re #103926
130+
let dropdownIsVisible = false;
131+
let deferredUpdate: (() => void) | undefined;
132+
127133
const actions = getActionBarActions(menu.getActions({ shouldForwardArgs: true, arg: menuArg }), g => /^inline/.test(g));
128134
toolbar.setActions(actions.primary, actions.secondary);
129135

130136
template.elementDisposables.add(menu.onDidChange(() => {
131137
const actions = getActionBarActions(menu.getActions({ shouldForwardArgs: true, arg: menuArg }), g => /^inline/.test(g));
138+
if (dropdownIsVisible) {
139+
deferredUpdate = () => toolbar.setActions(actions.primary, actions.secondary);
140+
return;
141+
}
132142
toolbar.setActions(actions.primary, actions.secondary);
133143
}));
144+
145+
template.elementDisposables.add(toolbar.onDidChangeDropdownVisibility(visible => {
146+
dropdownIsVisible = visible;
147+
if (deferredUpdate && !visible) {
148+
disposableTimeout(() => {
149+
deferredUpdate?.();
150+
deferredUpdate = undefined;
151+
}, 0, template.elementDisposables);
152+
}
153+
}));
134154
}
135155
}
136156

@@ -370,6 +390,7 @@ class CustomEditorExtensionOutline implements IOutline<CustomEditorOutlineEntry>
370390
dispose(): void {
371391
this._loadCts?.cancel();
372392
this._loadCts?.dispose();
393+
this._providerService.releaseResource(this._viewType, this._resource);
373394
this._disposables.dispose();
374395
this._onDidChange.dispose();
375396
}

src/vs/workbench/contrib/customEditor/common/customEditorOutlineService.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ export interface ICustomEditorOutlineProviderService {
3838

3939
registerProvider(viewType: string): IDisposable;
4040
unregisterProvider(viewType: string): void;
41+
releaseResource(viewType: string, resource: URI): void;
4142
fireDidChangeOutline(viewType: string, resource: URI): void;
4243
fireDidChangeActiveItem(viewType: string, resource: URI, itemId: string | undefined): void;
4344
}

0 commit comments

Comments
 (0)