De-select output for focus cell container commands (#209269)

* pass message to de-select when container is selected from output

* clear selection in more cases
This commit is contained in:
Aaron Munger 2024-04-01 10:24:08 -07:00 committed by GitHub
parent e169401ec2
commit 16a39cb720
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 32 additions and 3 deletions

View file

@ -2427,6 +2427,8 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditorD
(itemDOM.ownerDocument.activeElement as HTMLElement).blur();
}
this._webview?.blurOutput();
cell.updateEditState(CellEditState.Preview, 'focusNotebookCell');
cell.focusMode = CellFocusMode.Container;

View file

@ -1729,6 +1729,16 @@ export class BackLayerWebView<T extends ICommonCellInfo> extends Themable {
});
}
blurOutput() {
if (this._disposed) {
return;
}
this._sendMessageToWebview({
type: 'blur-output'
});
}
async find(query: string, options: { wholeWord?: boolean; caseSensitive?: boolean; includeMarkup: boolean; includeOutput: boolean; shouldGetSearchPreviewInfo: boolean; ownerID: string }): Promise<IFindMatch[]> {
if (query === '') {
this._sendMessageToWebview({

View file

@ -69,7 +69,7 @@ export interface IScrollAckMessage extends BaseToWebviewMessage {
readonly version: number;
}
export interface IBlurOutputMessage extends BaseToWebviewMessage {
export interface IFocusEditorMessage extends BaseToWebviewMessage {
readonly type: 'focus-editor';
readonly cellId: string;
readonly focusNext?: boolean;
@ -262,6 +262,10 @@ export interface IFocusOutputMessage {
readonly alternateId?: string;
}
export interface IBlurOutputMessage {
readonly type: 'blur-output';
}
export interface IAckOutputHeight {
readonly cellId: string;
readonly outputId: string;
@ -494,7 +498,7 @@ export type FromWebviewMessage = WebviewInitialized |
IScrollToRevealMessage |
IWheelMessage |
IScrollAckMessage |
IBlurOutputMessage |
IFocusEditorMessage |
ICustomKernelMessage |
ICustomRendererMessage |
IClickedDataUrlMessage |
@ -520,6 +524,7 @@ export type FromWebviewMessage = WebviewInitialized |
export type ToWebviewMessage = IClearMessage |
IFocusOutputMessage |
IBlurOutputMessage |
IAckOutputHeightMessage |
ICreationRequestMessage |
IViewScrollTopRequestMessage |

View file

@ -271,6 +271,15 @@ async function webviewPreloads(ctx: PreloadContext) {
postNotebookMessage<webviewMessages.IOutputFocusMessage>('outputFocus', outputFocus);
}
};
const blurOutput = () => {
const selection = window.getSelection();
if (!selection) {
return;
}
selection.removeAllRanges();
};
const selectOutputContents = (cellOrOutputId: string) => {
const selection = window.getSelection();
if (!selection) {
@ -689,7 +698,7 @@ async function webviewPreloads(ctx: PreloadContext) {
element.id = `focus-sink-${cellId}`;
element.tabIndex = 0;
element.addEventListener('focus', () => {
postNotebookMessage<webviewMessages.IBlurOutputMessage>('focus-editor', {
postNotebookMessage<webviewMessages.IFocusEditorMessage>('focus-editor', {
cellId: cellId,
focusNext
});
@ -1732,6 +1741,9 @@ async function webviewPreloads(ctx: PreloadContext) {
case 'focus-output':
focusFirstFocusableOrContainerInOutput(event.data.cellOrOutputId, event.data.alternateId);
break;
case 'blur-output':
blurOutput();
break;
case 'select-output-contents':
selectOutputContents(event.data.cellOrOutputId);
break;