diff --git a/src/linecomps.tsx b/src/linecomps.tsx index 97110cb5..e0e7a56b 100644 --- a/src/linecomps.tsx +++ b/src/linecomps.tsx @@ -585,7 +585,7 @@ class LineCmd extends React.Component< screen.setContentHeight(lineutil.getRendererContext(line), height); }, onFocusChanged: (focus: boolean) => { - screen.setTermFocus(line.linenum, focus); + screen.setLineFocus(line.linenum, focus); }, dataHandler: (data: string, model: RendererModel) => { cmd.handleDataFromRenderer(data, model); diff --git a/src/model.ts b/src/model.ts index b291c030..ed0dd6cd 100644 --- a/src/model.ts +++ b/src/model.ts @@ -106,7 +106,7 @@ type LineContainerModel = { getFocusType: () => FocusTypeStrs; getSelectedLine: () => number; getCmd: (line: LineType) => Cmd; - setTermFocus: (lineNum: number, focus: boolean) => void; + setLineFocus: (lineNum: number, focus: boolean) => void; getUsedRows: (context: RendererContext, line: LineType, cmd: Cmd, width: number) => number; getContentHeight: (context: RendererContext) => number; setContentHeight: (context: RendererContext, height: number) => void; @@ -685,8 +685,8 @@ class Screen { this.renderers[lineId] = renderer; } - setTermFocus(lineNum: number, focus: boolean): void { - // console.log("SW setTermFocus", lineNum, focus); + setLineFocus(lineNum: number, focus: boolean): void { + // console.log("SW setLineFocus", lineNum, focus); mobx.action(() => this.termLineNumFocus.set(focus ? lineNum : 0))(); if (focus && this.selectedLine.get() != lineNum) { GlobalCommandRunner.screenSelectLine(String(lineNum), "cmd"); @@ -763,7 +763,7 @@ class Screen { termOpts: cmd.getTermOpts(), winSize: { height: 0, width: width }, dataHandler: cmd.handleData.bind(cmd), - focusHandler: (focus: boolean) => this.setTermFocus(line.linenum, focus), + focusHandler: (focus: boolean) => this.setLineFocus(line.linenum, focus), isRunning: cmd.isRunning(), customKeyHandler: this.termCustomKeyHandler.bind(this), fontSize: GlobalModel.termFontSize.get(), @@ -1743,7 +1743,7 @@ class SpecialHistoryViewLineContainer { return this.cmd; } - setTermFocus(lineNum: number, focus: boolean): void { + setLineFocus(lineNum: number, focus: boolean): void { return; } diff --git a/src/simplerenderer.tsx b/src/simplerenderer.tsx index 9353c942..70b9bc21 100644 --- a/src/simplerenderer.tsx +++ b/src/simplerenderer.tsx @@ -286,6 +286,7 @@ class SimpleBlobRenderer extends React.Component< scrollToBringIntoViewport={this.props.scrollToBringIntoViewport} isSelected={this.props.isSelected} shouldFocus={this.props.shouldFocus} + rendererApi={model.api} /> ); diff --git a/src/types.ts b/src/types.ts index dd914848..709234cb 100644 --- a/src/types.ts +++ b/src/types.ts @@ -413,6 +413,7 @@ type SimpleBlobRendererComponent = React.ComponentType<{ readOnly?: boolean; notFound?: boolean; isSelected?: boolean; + rendererApi?: RendererModelContainerApi; shouldFocus?: boolean; cmdstr?: string; cwd?: string; diff --git a/src/view/code.tsx b/src/view/code.tsx index d1c4823b..96bc63cb 100644 --- a/src/view/code.tsx +++ b/src/view/code.tsx @@ -1,5 +1,5 @@ import * as React from "react"; -import { RendererContext, RendererOpts, LineStateType } from "../types"; +import { RendererContext, RendererOpts, LineStateType, RendererModelContainerApi } from "../types"; import Editor from "@monaco-editor/react"; import { GlobalModel, GlobalCommandRunner } from "../model"; import loader from "@monaco-editor/loader"; @@ -27,6 +27,7 @@ class SourceCodeRenderer extends React.Component< lineState: LineStateType; isSelected: boolean; shouldFocus: boolean; + rendererApi: RendererModelContainerApi; }, { code: string; @@ -137,6 +138,15 @@ class SourceCodeRenderer extends React.Component< }); if (this.props.shouldFocus) { this.monacoEditor.focus(); + this.props.rendererApi.onFocusChanged(true); + } + if (this.monacoEditor.onDidFocusEditorWidget) { + this.monacoEditor.onDidFocusEditorWidget(() => { + this.props.rendererApi.onFocusChanged(true); + }); + this.monacoEditor.onDidBlurEditorWidget(() => { + this.props.rendererApi.onFocusChanged(false); + }); } };