Skip to content

Commit 13e163a

Browse files
committed
fix: prevent focus stealing when PREVENT_FOCUS_DISRUPTION experiment is enabled
- Modified saveDirectly method in DiffViewProvider to accept openFile parameter instead of openWithoutFocus - Updated all file editing tools to pass false for openFile when the experiment is enabled - This ensures files are not opened at all when the experiment is active, preventing any focus stealing Fixes #6214
1 parent 9980267 commit 13e163a

File tree

6 files changed

+14
-13
lines changed

6 files changed

+14
-13
lines changed

src/core/tools/applyDiffTool.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,13 +173,13 @@ export async function applyDiffToolLegacy(
173173
return
174174
}
175175

176-
// Save directly without showing diff view
176+
// Save directly without showing diff view or opening the file
177177
cline.diffViewProvider.editType = "modify"
178178
cline.diffViewProvider.originalContent = originalContent
179179
await cline.diffViewProvider.saveDirectly(
180180
relPath,
181181
diffResult.content,
182-
true,
182+
false,
183183
diagnosticsEnabled,
184184
writeDelayMs,
185185
)

src/core/tools/insertContentTool.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,8 +157,8 @@ export async function insertContentTool(
157157
}
158158

159159
if (isPreventFocusDisruptionEnabled) {
160-
// Direct file write without diff view
161-
await cline.diffViewProvider.saveDirectly(relPath, updatedContent, true, diagnosticsEnabled, writeDelayMs)
160+
// Direct file write without diff view or opening the file
161+
await cline.diffViewProvider.saveDirectly(relPath, updatedContent, false, diagnosticsEnabled, writeDelayMs)
162162
} else {
163163
// Original behavior with diff view
164164
// Show changes in diff view

src/core/tools/multiApplyDiffTool.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -560,13 +560,13 @@ ${errorDetails ? `\nTechnical details:\n${errorDetails}\n` : ""}
560560
}
561561

562562
if (isPreventFocusDisruptionEnabled) {
563-
// Direct file write without diff view
563+
// Direct file write without diff view or opening the file
564564
cline.diffViewProvider.editType = "modify"
565565
cline.diffViewProvider.originalContent = await fs.readFile(absolutePath, "utf-8")
566566
await cline.diffViewProvider.saveDirectly(
567567
relPath,
568568
originalContent!,
569-
true,
569+
false,
570570
diagnosticsEnabled,
571571
writeDelayMs,
572572
)

src/core/tools/searchAndReplaceTool.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -230,8 +230,8 @@ export async function searchAndReplaceTool(
230230
}
231231

232232
if (isPreventFocusDisruptionEnabled) {
233-
// Direct file write without diff view
234-
await cline.diffViewProvider.saveDirectly(validRelPath, newContent, true, diagnosticsEnabled, writeDelayMs)
233+
// Direct file write without diff view or opening the file
234+
await cline.diffViewProvider.saveDirectly(validRelPath, newContent, false, diagnosticsEnabled, writeDelayMs)
235235
} else {
236236
// Original behavior with diff view
237237
// Show changes in diff view

src/core/tools/writeToFileTool.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -222,8 +222,8 @@ export async function writeToFileTool(
222222
return
223223
}
224224

225-
// Save directly without showing diff view
226-
await cline.diffViewProvider.saveDirectly(relPath, newContent, true, diagnosticsEnabled, writeDelayMs)
225+
// Save directly without showing diff view or opening the file
226+
await cline.diffViewProvider.saveDirectly(relPath, newContent, false, diagnosticsEnabled, writeDelayMs)
227227
} else {
228228
// Original behavior with diff view
229229
const completeMessage = JSON.stringify({

src/integrations/editor/DiffViewProvider.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -641,7 +641,7 @@ export class DiffViewProvider {
641641
async saveDirectly(
642642
relPath: string,
643643
content: string,
644-
openWithoutFocus: boolean = true,
644+
openFile: boolean = true,
645645
diagnosticsEnabled: boolean = true,
646646
writeDelayMs: number = DEFAULT_WRITE_DELAY_MS,
647647
): Promise<{
@@ -658,8 +658,9 @@ export class DiffViewProvider {
658658
await createDirectoriesForFile(absolutePath)
659659
await fs.writeFile(absolutePath, content, "utf-8")
660660

661-
// Open the file without focus if requested (to capture diagnostics)
662-
if (openWithoutFocus) {
661+
// Only open the file if explicitly requested
662+
// This prevents focus stealing when the experiment is enabled
663+
if (openFile) {
663664
await vscode.window.showTextDocument(vscode.Uri.file(absolutePath), {
664665
preview: false,
665666
preserveFocus: true,

0 commit comments

Comments
 (0)