diff --git a/package.json b/package.json index b5bc7b2524..3654944876 100644 --- a/package.json +++ b/package.json @@ -1717,7 +1717,7 @@ }, { "command": "cmake.bookmarks.clearAll", - "when": "view == cmake.bookmarks && cmake:enableFullFeatureSet", + "when": "cmake:enableFullFeatureSet && view == cmake.bookmarks", "group": "navigation@1" } ], @@ -2009,22 +2009,22 @@ }, { "command": "cmake.outline.removeBookmark", - "when": "view == cmake.bookmarks && cmake:enableFullFeatureSet", + "when": "cmake:enableFullFeatureSet && view == cmake.bookmarks", "group": "inline" }, { "command": "cmake.outline.buildTarget", - "when": "view == cmake.bookmarks && cmake:enableFullFeatureSet", + "when": "cmake:enableFullFeatureSet && view == cmake.bookmarks", "group": "bookmarkActions@1" }, { "command": "cmake.outline.debugTarget", - "when": "view == cmake.bookmarks && cmake:enableFullFeatureSet", + "when": "cmake:enableFullFeatureSet && view == cmake.bookmarks", "group": "bookmarkActions@2" }, { "command": "cmake.outline.launchTarget", - "when": "view == cmake.bookmarks && cmake:enableFullFeatureSet", + "when": "cmake:enableFullFeatureSet && view == cmake.bookmarks", "group": "bookmarkActions@3" } ], diff --git a/src/extension.ts b/src/extension.ts index 9b05222071..f0d1dc7dbc 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -325,6 +325,14 @@ export class ExtensionManager implements vscode.Disposable { } } + public onFullFeatureSetChanged(fullFeatureSet: boolean) { + if (fullFeatureSet) { + this.ensureBookmarksTreeView(); + } else { + this.disposeBookmarksTreeView(); + } + } + public onExtensionActiveCommandsChanged(listener: () => any, thisObject: any | null) { this.extensionActiveCommandsEmitter.event(listener, thisObject); } @@ -403,10 +411,29 @@ export class ExtensionManager implements vscode.Disposable { * The bookmarks tree data provider */ private readonly bookmarksProvider = new BookmarksProvider(this.extensionContext); - private readonly bookmarksTreeView = vscode.window.createTreeView('cmake.bookmarks', { - treeDataProvider: this.bookmarksProvider, - showCollapseAll: false - }); + private bookmarksTreeView?: vscode.TreeView; + + private ensureBookmarksTreeView() { + if (this.bookmarksTreeView) { + return; + } + + try { + this.bookmarksTreeView = vscode.window.createTreeView('cmake.bookmarks', { + treeDataProvider: this.bookmarksProvider, + showCollapseAll: false + }); + } catch (err) { + log.error('Failed to create bookmarks tree view', err as Error); + } + } + + private disposeBookmarksTreeView() { + if (this.bookmarksTreeView) { + this.bookmarksTreeView.dispose(); + this.bookmarksTreeView = undefined; + } + } /** * CppTools project configuration provider. Tells cpptools how to search for @@ -677,7 +704,7 @@ export class ExtensionManager implements vscode.Disposable { this.onDidChangeActiveTextEditorSub.dispose(); void this.kitsWatcher.close(); this.projectOutlineTreeView.dispose(); - this.bookmarksTreeView.dispose(); + this.disposeBookmarksTreeView(); this.extensionActiveCommandsEmitter.dispose(); pinnedCommands.dispose(); if (this.cppToolsAPI) { @@ -2651,6 +2678,7 @@ export async function activate(context: vscode.ExtensionContext): Promise