Skip to content

Commit 0bcb182

Browse files
dankeboy36kittaakos
authored andcommitted
fix(terminal): widget flickering on resize
Ref: eclipse-theia/theia#12587 Signed-off-by: dankeboy36 <[email protected]>
1 parent 42d017e commit 0bcb182

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

arduino-ide-extension/src/browser/arduino-ide-frontend-module.ts

+5
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,8 @@ import { StylingParticipant } from '@theia/core/lib/browser/styling-service';
355355
import { MonacoEditorMenuContribution } from './theia/monaco/monaco-menu';
356356
import { MonacoEditorMenuContribution as TheiaMonacoEditorMenuContribution } from '@theia/monaco/lib/browser/monaco-menu';
357357
import { UpdateArduinoState } from './contributions/update-arduino-state';
358+
import { TerminalWidgetImpl } from './theia/terminal/terminal-widget-impl';
359+
import { TerminalWidget } from '@theia/terminal/lib/browser/base/terminal-widget';
358360

359361
// Hack to fix copy/cut/paste issue after electron version update in Theia.
360362
// https://github.com/eclipse-theia/theia/issues/12487
@@ -1026,4 +1028,7 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => {
10261028
rebind(TheiaMonacoEditorMenuContribution).toService(
10271029
MonacoEditorMenuContribution
10281030
);
1031+
1032+
// Patch terminal issues.
1033+
rebind(TerminalWidget).to(TerminalWidgetImpl).inTransientScope();
10291034
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { injectable } from '@theia/core/shared/inversify';
2+
import { TerminalWidgetImpl as TheiaTerminalWidgetImpl } from '@theia/terminal/lib/browser/terminal-widget-impl';
3+
import debounce from 'p-debounce';
4+
5+
// Patch for https://github.com/eclipse-theia/theia/pull/12587
6+
@injectable()
7+
export class TerminalWidgetImpl extends TheiaTerminalWidgetImpl {
8+
private readonly debouncedResizeTerminal = debounce(
9+
() => this.doResizeTerminal(),
10+
50
11+
);
12+
13+
protected override resizeTerminal(): void {
14+
this.debouncedResizeTerminal();
15+
}
16+
17+
private doResizeTerminal(): void {
18+
const geo = this.fitAddon.proposeDimensions();
19+
const cols = geo.cols;
20+
const rows = geo.rows - 1; // subtract one row for margin
21+
this.term.resize(cols, rows);
22+
}
23+
}

0 commit comments

Comments
 (0)