Skip to content

Commit fb66467

Browse files
authored
Bugfix on enter/arrow/mouse interaction for code action widget (fixes microsoft#156587)
* fix on hover vs key bindings interaction * removed allowClick boolean, modified current selected item for widget * modifed var types
1 parent 4017fd1 commit fb66467

File tree

1 file changed

+11
-6
lines changed

1 file changed

+11
-6
lines changed

src/vs/editor/contrib/codeAction/browser/codeActionMenu.ts

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ export class CodeActionMenu extends Disposable implements IEditorContribution {
161161
private _ctxMenuWidgetVisible: IContextKey<boolean>;
162162
private viewItems: ICodeActionMenuItem[] = [];
163163
private focusedEnabledItem: number | undefined;
164-
private currSelectedItem: number = 0;
164+
private currSelectedItem: number | undefined;
165165
private hasSeperator: boolean = false;
166166
private block?: HTMLElement;
167167

@@ -213,21 +213,24 @@ export class CodeActionMenu extends Disposable implements IEditorContribution {
213213
e.elements.forEach(element => {
214214
if (element.isEnabled) {
215215
element.action.run();
216+
this.hideCodeActionWidget();
216217
}
217218
});
218-
this.hideCodeActionWidget();
219219
}
220220
}
221221

222-
223222
private _onListHover(e: IListMouseEvent<ICodeActionMenuItem>): void {
224223
if (!e.element) {
224+
this.currSelectedItem = undefined;
225225
this.codeActionList.value?.setFocus([]);
226226
} else {
227227
if (e.element?.isEnabled) {
228228
this.codeActionList.value?.setFocus([e.element.index]);
229229
this.focusedEnabledItem = this.viewItems.indexOf(e.element);
230230
this.currSelectedItem = e.element.index;
231+
} else {
232+
this.currSelectedItem = undefined;
233+
this.codeActionList.value?.setFocus([e.element.index]);
231234
}
232235
}
233236
}
@@ -318,7 +321,7 @@ export class CodeActionMenu extends Disposable implements IEditorContribution {
318321

319322
// List selection
320323
if (this.viewItems.length < 1 || this.viewItems.every(item => item.isDocumentation)) {
321-
this.currSelectedItem = 0;
324+
this.currSelectedItem = undefined;
322325
} else {
323326
this.focusedEnabledItem = 0;
324327
this.currSelectedItem = this.viewItems[0].index;
@@ -391,7 +394,9 @@ export class CodeActionMenu extends Disposable implements IEditorContribution {
391394
}
392395

393396
public onEnterSet() {
394-
this.codeActionList.value?.setSelection([this.currSelectedItem]);
397+
if (typeof this.currSelectedItem === 'number') {
398+
this.codeActionList.value?.setSelection([this.currSelectedItem]);
399+
}
395400
}
396401

397402
override dispose() {
@@ -403,7 +408,7 @@ export class CodeActionMenu extends Disposable implements IEditorContribution {
403408
this.options = [];
404409
this.viewItems = [];
405410
this.focusedEnabledItem = 0;
406-
this.currSelectedItem = 0;
411+
this.currSelectedItem = undefined;
407412
this.hasSeperator = false;
408413
this._contextViewService.hideContextView({ source: this });
409414
}

0 commit comments

Comments
 (0)