Skip to content

Commit 5360e03

Browse files
authored
Merge pull request microsoft#69524 from Microsoft/isidorn/ignoreBlurAndDispose
Fix rename input in Explorer
2 parents 163111a + 7920c1c commit 5360e03

2 files changed

Lines changed: 31 additions & 3 deletions

File tree

src/vs/workbench/contrib/files/browser/fileActions.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,8 @@ export class NewFileAction extends BaseErrorReportingAction {
107107
static readonly ID = 'workbench.files.action.createFileFromExplorer';
108108
static readonly LABEL = nls.localize('createNewFile', "New File");
109109

110+
private toDispose: IDisposable[] = [];
111+
110112
constructor(
111113
private getElement: () => ExplorerItem,
112114
@INotificationService notificationService: INotificationService,
@@ -116,6 +118,10 @@ export class NewFileAction extends BaseErrorReportingAction {
116118
) {
117119
super('explorer.newFile', NEW_FILE_LABEL, notificationService);
118120
this.class = 'explorer-action new-file';
121+
this.toDispose.push(this.explorerService.onDidChangeEditable(e => {
122+
const elementIsBeingEdited = this.explorerService.isEditable(e);
123+
this.enabled = !elementIsBeingEdited;
124+
}));
119125
}
120126

121127
run(): Promise<any> {
@@ -158,13 +164,20 @@ export class NewFileAction extends BaseErrorReportingAction {
158164
});
159165
});
160166
}
167+
168+
dispose(): void {
169+
super.dispose();
170+
dispose(this.toDispose);
171+
}
161172
}
162173

163174
/* New Folder */
164175
export class NewFolderAction extends BaseErrorReportingAction {
165176
static readonly ID = 'workbench.files.action.createFolderFromExplorer';
166177
static readonly LABEL = nls.localize('createNewFolder', "New Folder");
167178

179+
private toDispose: IDisposable[] = [];
180+
168181
constructor(
169182
private getElement: () => ExplorerItem,
170183
@INotificationService notificationService: INotificationService,
@@ -173,6 +186,10 @@ export class NewFolderAction extends BaseErrorReportingAction {
173186
) {
174187
super('explorer.newFolder', NEW_FOLDER_LABEL, notificationService);
175188
this.class = 'explorer-action new-folder';
189+
this.toDispose.push(this.explorerService.onDidChangeEditable(e => {
190+
const elementIsBeingEdited = this.explorerService.isEditable(e);
191+
this.enabled = !elementIsBeingEdited;
192+
}));
176193
}
177194

178195
run(): Promise<any> {
@@ -215,6 +232,11 @@ export class NewFolderAction extends BaseErrorReportingAction {
215232
});
216233
});
217234
}
235+
236+
dispose(): void {
237+
super.dispose();
238+
dispose(this.toDispose);
239+
}
218240
}
219241

220242
/* Create new file from anywhere: Open untitled */

src/vs/workbench/contrib/files/browser/views/explorerViewer.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -214,8 +214,12 @@ export class FilesRenderer implements ITreeRenderer<ExplorerItem, FuzzyScore, IF
214214
editableData.onFinish(value, success);
215215
});
216216

217+
let ignoreDisposeAndBlur = true;
218+
setTimeout(() => ignoreDisposeAndBlur = false, 0);
217219
const blurDisposable = DOM.addDisposableListener(inputBox.inputElement, DOM.EventType.BLUR, () => {
218-
done(inputBox.isInputValid());
220+
if (!ignoreDisposeAndBlur) {
221+
done(inputBox.isInputValid());
222+
}
219223
});
220224

221225
const toDispose = [
@@ -235,8 +239,10 @@ export class FilesRenderer implements ITreeRenderer<ExplorerItem, FuzzyScore, IF
235239
];
236240

237241
return toDisposable(() => {
238-
blurDisposable.dispose();
239-
done(inputBox.isInputValid());
242+
if (!ignoreDisposeAndBlur) {
243+
blurDisposable.dispose();
244+
done(inputBox.isInputValid());
245+
}
240246
});
241247
}
242248

0 commit comments

Comments
 (0)