Skip to content

Commit 4700994

Browse files
authored
Focus visible widget first when cell editor gets focused. (microsoft#183080)
1 parent 222a960 commit 4700994

File tree

3 files changed

+23
-16
lines changed

3 files changed

+23
-16
lines changed

src/vs/workbench/contrib/notebook/browser/contrib/navigation/arrow.ts

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
import { timeout } from 'vs/base/common/async';
77
import { KeyCode, KeyMod } from 'vs/base/common/keyCodes';
8-
import { isEqual } from 'vs/base/common/resources';
98
import { ICodeEditor } from 'vs/editor/browser/editorBrowser';
109
import { EditorExtensionsRegistry } from 'vs/editor/browser/editorExtensions';
1110
import { EditorContextKeys } from 'vs/editor/common/editorContextKeys';
@@ -20,8 +19,8 @@ import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegis
2019
import { Registry } from 'vs/platform/registry/common/platform';
2120
import { InteractiveEditorController } from 'vs/workbench/contrib/interactiveEditor/browser/interactiveEditorController';
2221
import { CTX_INTERACTIVE_EDITOR_FOCUSED, CTX_INTERACTIVE_EDITOR_INNER_CURSOR_LAST } from 'vs/workbench/contrib/interactiveEditor/common/interactiveEditor';
23-
import { INotebookActionContext, INotebookCellActionContext, NotebookAction, NotebookCellAction, NOTEBOOK_EDITOR_WIDGET_ACTION_WEIGHT } from 'vs/workbench/contrib/notebook/browser/controller/coreActions';
24-
import { CellEditState, ICellViewModel } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
22+
import { INotebookActionContext, INotebookCellActionContext, NotebookAction, NotebookCellAction, NOTEBOOK_EDITOR_WIDGET_ACTION_WEIGHT, findTargetCellEditor } from 'vs/workbench/contrib/notebook/browser/controller/coreActions';
23+
import { CellEditState } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
2524
import { CellKind, NOTEBOOK_EDITOR_CURSOR_BOUNDARY } from 'vs/workbench/contrib/notebook/common/notebookCommon';
2625
import { NOTEBOOK_CELL_HAS_OUTPUTS, NOTEBOOK_CELL_MARKDOWN_EDIT_MODE, NOTEBOOK_CELL_TYPE, NOTEBOOK_CURSOR_NAVIGATION_MODE, NOTEBOOK_EDITOR_FOCUSED, NOTEBOOK_OUTPUT_FOCUSED } from 'vs/workbench/contrib/notebook/common/notebookContextKeys';
2726

@@ -37,18 +36,6 @@ const NOTEBOOK_CURSOR_PAGEUP_SELECT_COMMAND_ID = 'notebook.cell.cursorPageUpSele
3736
const NOTEBOOK_CURSOR_PAGEDOWN_COMMAND_ID = 'notebook.cell.cursorPageDown';
3837
const NOTEBOOK_CURSOR_PAGEDOWN_SELECT_COMMAND_ID = 'notebook.cell.cursorPageDownSelect';
3938

40-
function findTargetCellEditor(context: INotebookCellActionContext, targetCell: ICellViewModel) {
41-
let foundEditor: ICodeEditor | undefined = undefined;
42-
for (const [, codeEditor] of context.notebookEditor.codeEditors) {
43-
if (isEqual(codeEditor.getModel()?.uri, targetCell.uri)) {
44-
foundEditor = codeEditor;
45-
break;
46-
}
47-
}
48-
49-
return foundEditor;
50-
}
51-
5239
registerAction2(class FocusNextCellAction extends NotebookCellAction {
5340
constructor() {
5441
super({

src/vs/workbench/contrib/notebook/browser/controller/coreActions.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ import { WorkbenchActionExecutedClassification, WorkbenchActionExecutedEvent } f
2020
import { TypeConstraint } from 'vs/base/common/types';
2121
import { IJSONSchema } from 'vs/base/common/jsonSchema';
2222
import { MarshalledId } from 'vs/base/common/marshallingIds';
23+
import { ICodeEditor } from 'vs/editor/browser/editorBrowser';
24+
import { isEqual } from 'vs/base/common/resources';
2325

2426
// Kernel Command
2527
export const SELECT_KERNEL_ID = '_notebook.selectKernel';
@@ -110,6 +112,18 @@ export function getContextFromUri(accessor: ServicesAccessor, context?: any) {
110112
return undefined;
111113
}
112114

115+
export function findTargetCellEditor(context: INotebookCellActionContext, targetCell: ICellViewModel) {
116+
let foundEditor: ICodeEditor | undefined = undefined;
117+
for (const [, codeEditor] of context.notebookEditor.codeEditors) {
118+
if (isEqual(codeEditor.getModel()?.uri, targetCell.uri)) {
119+
foundEditor = codeEditor;
120+
break;
121+
}
122+
}
123+
124+
return foundEditor;
125+
}
126+
113127
export abstract class NotebookAction extends Action2 {
114128
constructor(desc: IAction2Options) {
115129
if (desc.f1 !== false) {

src/vs/workbench/contrib/notebook/browser/controller/editActions.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation
1818
import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry';
1919
import { IQuickInputService, IQuickPickItem, QuickPickInput } from 'vs/platform/quickinput/common/quickInput';
2020
import { changeCellToKind, runDeleteAction } from 'vs/workbench/contrib/notebook/browser/controller/cellOperations';
21-
import { CellToolbarOrder, CELL_TITLE_CELL_GROUP_ID, CELL_TITLE_OUTPUT_GROUP_ID, executeNotebookCondition, INotebookActionContext, INotebookCellActionContext, NotebookAction, NotebookCellAction, NOTEBOOK_EDITOR_WIDGET_ACTION_WEIGHT } from 'vs/workbench/contrib/notebook/browser/controller/coreActions';
21+
import { CellToolbarOrder, CELL_TITLE_CELL_GROUP_ID, CELL_TITLE_OUTPUT_GROUP_ID, executeNotebookCondition, INotebookActionContext, INotebookCellActionContext, NotebookAction, NotebookCellAction, NOTEBOOK_EDITOR_WIDGET_ACTION_WEIGHT, findTargetCellEditor } from 'vs/workbench/contrib/notebook/browser/controller/coreActions';
2222
import { NOTEBOOK_CELL_EDITABLE, NOTEBOOK_CELL_HAS_OUTPUTS, NOTEBOOK_CELL_LIST_FOCUSED, NOTEBOOK_CELL_MARKDOWN_EDIT_MODE, NOTEBOOK_CELL_TYPE, NOTEBOOK_EDITOR_EDITABLE, NOTEBOOK_EDITOR_FOCUSED, NOTEBOOK_HAS_OUTPUTS, NOTEBOOK_IS_ACTIVE_EDITOR, NOTEBOOK_OUTPUT_FOCUSED, NOTEBOOK_USE_CONSOLIDATED_OUTPUT_BUTTON } from 'vs/workbench/contrib/notebook/common/notebookContextKeys';
2323
import { CellEditState, CHANGE_CELL_LANGUAGE, DETECT_CELL_LANGUAGE, QUIT_EDIT_CELL_COMMAND_ID } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
2424
import * as icons from 'vs/workbench/contrib/notebook/browser/notebookIcons';
@@ -30,6 +30,8 @@ import { INotificationService } from 'vs/platform/notification/common/notificati
3030
import { INotebookKernelService } from 'vs/workbench/contrib/notebook/common/notebookKernelService';
3131
import { IDialogService, IConfirmationResult } from 'vs/platform/dialogs/common/dialogs';
3232
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
33+
import { ICodeEditor } from 'vs/editor/browser/editorBrowser';
34+
import { InteractiveEditorController } from 'vs/workbench/contrib/interactiveEditor/browser/interactiveEditorController';
3335

3436

3537
const CLEAR_ALL_CELLS_OUTPUTS_COMMAND_ID = 'notebook.clearAllCellsOutputs';
@@ -71,6 +73,10 @@ registerAction2(class EditCellAction extends NotebookCellAction {
7173
}
7274

7375
await context.notebookEditor.focusNotebookCell(context.cell, 'editor');
76+
const foundEditor: ICodeEditor | undefined = context.cell ? findTargetCellEditor(context, context.cell) : undefined;
77+
if (foundEditor && foundEditor.hasTextFocus() && InteractiveEditorController.get(foundEditor)?.getWidgetPosition()?.lineNumber === foundEditor.getPosition()?.lineNumber) {
78+
InteractiveEditorController.get(foundEditor)?.focus();
79+
}
7480
}
7581
});
7682

0 commit comments

Comments
 (0)