mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-09-07 21:11:05 +03:00
* feat(terminal): add opt-in OSC 52 clipboard writes * Remove dup tr Signed-off-by: fufesou <linlong1266@gmail.com> --------- Signed-off-by: fufesou <linlong1266@gmail.com>
57 lines
1.7 KiB
Dart
57 lines
1.7 KiB
Dart
part of 'terminal_mouse_handler.dart';
|
|
|
|
const _prepareTerminalClipboardCommand = 'prepare_terminal_clipboard';
|
|
const _finishTerminalClipboardCommand = 'finish_terminal_clipboard';
|
|
const _cancelTerminalClipboardCommand = 'cancel_terminal_clipboard';
|
|
|
|
extension _TerminalWebClipboardGesture on _TerminalMouseInteractionState {
|
|
void _prepareTerminalClipboardWrite() {
|
|
if (!kIsWeb) return;
|
|
_cancelTerminalClipboardWrite();
|
|
final terminal = widget.terminal;
|
|
if (terminal is! RustDeskTerminal || !terminal.isClipboardWriteAllowed) {
|
|
return;
|
|
}
|
|
try {
|
|
ffiSetByName(_prepareTerminalClipboardCommand);
|
|
_terminalClipboardGesturePrepared = true;
|
|
} catch (error) {
|
|
debugPrint('[Terminal] Failed to prepare Web clipboard write: $error');
|
|
}
|
|
}
|
|
|
|
void _finishTerminalClipboardWrite(bool responseExpected) {
|
|
if (!_terminalClipboardGesturePrepared) return;
|
|
_terminalClipboardGesturePrepared = false;
|
|
if (!kIsWeb) return;
|
|
try {
|
|
ffiSetByName(
|
|
_finishTerminalClipboardCommand,
|
|
responseExpected ? 'true' : 'false',
|
|
);
|
|
} catch (error) {
|
|
debugPrint('[Terminal] Failed to finish Web clipboard write: $error');
|
|
}
|
|
}
|
|
|
|
void _cancelTerminalClipboardWrite() {
|
|
if (!_terminalClipboardGesturePrepared) return;
|
|
_terminalClipboardGesturePrepared = false;
|
|
_sendTerminalClipboardCancel();
|
|
}
|
|
|
|
void _discardPendingTerminalClipboardWrites() {
|
|
_cancelTerminalClipboardWrite();
|
|
_sendTerminalClipboardCancel();
|
|
}
|
|
|
|
void _sendTerminalClipboardCancel() {
|
|
if (!kIsWeb) return;
|
|
try {
|
|
ffiSetByName(_cancelTerminalClipboardCommand);
|
|
} catch (error) {
|
|
debugPrint('[Terminal] Failed to cancel Web clipboard write: $error');
|
|
}
|
|
}
|
|
}
|