mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-09-05 23:51:04 +03:00
* feat(terminal): add Ctrl toggle and Ctrl+X shortcut keys to mobile terminal floating keyboard Signed-off-by: dongrencd <dongrencd@users.noreply.github.com> * refactor(terminal): restructure keyboard layout with collapse button - Move | from Row1 position 3 to Row1 end (aligned with collapse button) - Remove ~ from Row2, add collapse button (∨/∧) after PgDn - Row3: conditional render, add ~ and -, remove trailing placeholders - Collapse state persisted via kOptionEnableShowTerminalCtrlKeys - Row3 defaults to collapsed for compact layout Signed-off-by: dongrencd <dongrencd@users.noreply.github.com> * fix(terminal): restore trailing placeholders in Row3 for alignment Row3 needs trailing placeholders to match Row1/Row2 width (348px) so Ctrl aligns with Tab in Row2 and Esc in Row1. Signed-off-by: dongrencd <dongrencd@users.noreply.github.com> * fix(terminal): update mobile keyboard layout per review Signed-off-by: dong.ren.cd <dong.ren.cd@tcl.com> * fix(terminal): address mobile keyboard review regressions Signed-off-by: dong.ren.cd <dong.ren.cd@tcl.com> * fix(terminal): preserve ctrl-j newline mapping on mobile Signed-off-by: dong.ren.cd <dong.ren.cd@tcl.com> * fix(terminal): preserve pasted input with modifiers Signed-off-by: dong.ren.cd <dong.ren.cd@tcl.com> * fix(terminal): harden mobile modifier and paste input Signed-off-by: dong.ren.cd <dong.ren.cd@tcl.com> * fix(terminal): harden mobile paste shortcut handling Signed-off-by: dong.ren.cd <dong.ren.cd@tcl.com> * fix(terminal): preserve unicode graphemes under ctrl * fix(terminal): avoid modifier scan for inactive locks * fix(terminal): keep default hardware paste shortcuts * fix(terminal): guard hardware paste with modifier locks * fix(terminal): update mobile key button color role --------- Signed-off-by: dongrencd <dongrencd@users.noreply.github.com> Signed-off-by: dong.ren.cd <dong.ren.cd@tcl.com> Co-authored-by: dongrencd <dongrencd@users.noreply.github.com> Co-authored-by: dong.ren.cd <dong.ren.cd@tcl.com>
52 lines
1.4 KiB
Dart
52 lines
1.4 KiB
Dart
import 'dart:async';
|
|
|
|
import 'package:flutter_hbb/models/model.dart';
|
|
import 'package:flutter_hbb/models/terminal_model.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
|
|
class _FakeFFI implements FFI {
|
|
@override
|
|
String id = 'test-peer';
|
|
|
|
@override
|
|
dynamic noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
|
|
}
|
|
|
|
void main() {
|
|
test('ignores paste that completes after the terminal model is disposed',
|
|
() async {
|
|
final model = TerminalModel(_FakeFFI());
|
|
final delayedClipboardText = Completer<String>();
|
|
|
|
// This mirrors Ctrl/Cmd+V: clipboard access starts first, then the page and
|
|
// model are disposed before the asynchronous read supplies its text.
|
|
final paste = delayedClipboardText.future.then(model.pasteText);
|
|
model.dispose();
|
|
delayedClipboardText.complete('late clipboard text');
|
|
await paste;
|
|
|
|
expect(model.debugBufferedInputCount, 0);
|
|
});
|
|
|
|
test('ignores terminal text input after the terminal model is disposed', () {
|
|
final model = TerminalModel(_FakeFFI());
|
|
var checkedCtrlLock = false;
|
|
var clearedCtrlLock = false;
|
|
|
|
model.isCtrlLocked = () {
|
|
checkedCtrlLock = true;
|
|
return true;
|
|
};
|
|
model.clearCtrlLock = () {
|
|
clearedCtrlLock = true;
|
|
};
|
|
|
|
model.dispose();
|
|
model.terminal.textInput('d');
|
|
|
|
expect(checkedCtrlLock, isFalse);
|
|
expect(clearedCtrlLock, isFalse);
|
|
expect(model.debugBufferedInputCount, 0);
|
|
});
|
|
}
|