From 8979da463d6fc21993603ecc6430e80927a006e6 Mon Sep 17 00:00:00 2001 From: Hannia Valera Date: Mon, 2 Feb 2026 12:02:17 -0600 Subject: [PATCH 1/3] preventing "eager" bookmarks tree view --- src/extension.ts | 52 +++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 47 insertions(+), 5 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 9b05222071..2861a51c4f 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,43 @@ 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; + } + + if (!this.isBookmarksViewContributed()) { + log.debug('Skipping bookmarks tree creation because view contribution is not available.'); + 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; + } + } + + private isBookmarksViewContributed(): boolean { + const ext = vscode.extensions.getExtension('ms-vscode.cmake-tools'); + const views = ext?.packageJSON?.contributes?.views; + if (!views) { + return false; + } + return Object.values(views).some((v: any) => Array.isArray(v) && v.some((item: any) => item?.id === 'cmake.bookmarks')); + } /** * CppTools project configuration provider. Tells cpptools how to search for @@ -677,7 +718,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 +2692,7 @@ export async function activate(context: vscode.ExtensionContext): Promise Date: Mon, 2 Feb 2026 12:15:06 -0600 Subject: [PATCH 2/3] reorder conditions for bookmark commands in package.json --- package.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) 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" } ], From 90dec5084c88e24b030b122b8024eb3c3fe46fbd Mon Sep 17 00:00:00 2001 From: Hannia Valera Date: Mon, 2 Feb 2026 12:22:36 -0600 Subject: [PATCH 3/3] removed redundant check per feedback --- src/extension.ts | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 2861a51c4f..f0d1dc7dbc 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -418,11 +418,6 @@ export class ExtensionManager implements vscode.Disposable { return; } - if (!this.isBookmarksViewContributed()) { - log.debug('Skipping bookmarks tree creation because view contribution is not available.'); - return; - } - try { this.bookmarksTreeView = vscode.window.createTreeView('cmake.bookmarks', { treeDataProvider: this.bookmarksProvider, @@ -440,15 +435,6 @@ export class ExtensionManager implements vscode.Disposable { } } - private isBookmarksViewContributed(): boolean { - const ext = vscode.extensions.getExtension('ms-vscode.cmake-tools'); - const views = ext?.packageJSON?.contributes?.views; - if (!views) { - return false; - } - return Object.values(views).some((v: any) => Array.isArray(v) && v.some((item: any) => item?.id === 'cmake.bookmarks')); - } - /** * CppTools project configuration provider. Tells cpptools how to search for * includes, preprocessor defs, etc.