mostly fix physical focus indicator for code editor

This commit is contained in:
sawka
2023-09-16 23:20:47 -07:00
parent 26eec11526
commit 968cd462f5
5 changed files with 19 additions and 7 deletions
+1 -1
View File
@@ -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);
+5 -5
View File
@@ -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;
}
+1
View File
@@ -286,6 +286,7 @@ class SimpleBlobRenderer extends React.Component<
scrollToBringIntoViewport={this.props.scrollToBringIntoViewport}
isSelected={this.props.isSelected}
shouldFocus={this.props.shouldFocus}
rendererApi={model.api}
/>
</div>
);
+1
View File
@@ -413,6 +413,7 @@ type SimpleBlobRendererComponent = React.ComponentType<{
readOnly?: boolean;
notFound?: boolean;
isSelected?: boolean;
rendererApi?: RendererModelContainerApi;
shouldFocus?: boolean;
cmdstr?: string;
cwd?: string;
+11 -1
View File
@@ -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);
});
}
};