mirror of
https://github.com/rustdesk/rustdesk.git
synced 2025-05-10 18:06:01 +02:00
feat, trackpad speed (#11680)
* feat, trackpad speed Signed-off-by: fufesou <linlong1266@gmail.com> * comments Signed-off-by: fufesou <linlong1266@gmail.com> * Trackpad speed, user default value Signed-off-by: fufesou <linlong1266@gmail.com> --------- Signed-off-by: fufesou <linlong1266@gmail.com>
This commit is contained in:
parent
9475743b4e
commit
ca7b4872d9
57 changed files with 325 additions and 9 deletions
|
@ -1623,6 +1623,28 @@ customImageQualityDialog(SessionID sessionId, String id, FFI ffi) async {
|
|||
msgBoxCommon(ffi.dialogManager, 'Custom Image Quality', content, [btnClose]);
|
||||
}
|
||||
|
||||
trackpadSpeedDialog(SessionID sessionId, FFI ffi) async {
|
||||
int initSpeed = ffi.inputModel.trackpadSpeed;
|
||||
final curSpeed = SimpleWrapper(initSpeed);
|
||||
final btnClose = dialogButton('Close', onPressed: () async {
|
||||
if (curSpeed.value <= kMaxTrackpadSpeed &&
|
||||
curSpeed.value >= kMinTrackpadSpeed &&
|
||||
curSpeed.value != initSpeed) {
|
||||
await bind.sessionSetTrackpadSpeed(
|
||||
sessionId: sessionId, value: curSpeed.value);
|
||||
await ffi.inputModel.updateTrackpadSpeed();
|
||||
}
|
||||
ffi.dialogManager.dismissAll();
|
||||
});
|
||||
msgBoxCommon(
|
||||
ffi.dialogManager,
|
||||
'Trackpad speed',
|
||||
TrackpadSpeedWidget(
|
||||
value: curSpeed,
|
||||
),
|
||||
[btnClose]);
|
||||
}
|
||||
|
||||
void deleteConfirmDialog(Function onSubmit, String title) async {
|
||||
gFFI.dialogManager.show(
|
||||
(setState, close, context) {
|
||||
|
|
|
@ -248,3 +248,93 @@ List<(String, String)> otherDefaultSettings() {
|
|||
|
||||
return v;
|
||||
}
|
||||
|
||||
class TrackpadSpeedWidget extends StatefulWidget {
|
||||
final SimpleWrapper<int> value;
|
||||
// If null, no debouncer will be applied.
|
||||
final Function(int)? onDebouncer;
|
||||
|
||||
TrackpadSpeedWidget({Key? key, required this.value, this.onDebouncer});
|
||||
|
||||
@override
|
||||
TrackpadSpeedWidgetState createState() => TrackpadSpeedWidgetState();
|
||||
}
|
||||
|
||||
class TrackpadSpeedWidgetState extends State<TrackpadSpeedWidget> {
|
||||
final TextEditingController _controller = TextEditingController();
|
||||
late final Debouncer<int> debouncerSpeed;
|
||||
|
||||
set value(int v) => widget.value.value = v;
|
||||
int get value => widget.value.value;
|
||||
|
||||
void updateValue(int newValue) {
|
||||
setState(() {
|
||||
value = newValue.clamp(kMinTrackpadSpeed, kMaxTrackpadSpeed);
|
||||
// Scale the trackpad speed value to a percentage for display purposes.
|
||||
_controller.text = value.toString();
|
||||
if (widget.onDebouncer != null) {
|
||||
debouncerSpeed.setValue(value);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
debouncerSpeed = Debouncer<int>(
|
||||
Duration(milliseconds: 1000),
|
||||
onChanged: widget.onDebouncer,
|
||||
initialValue: widget.value.value,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
if (_controller.text.isEmpty) {
|
||||
_controller.text = value.toString();
|
||||
}
|
||||
return Row(
|
||||
children: [
|
||||
Expanded(
|
||||
flex: 3,
|
||||
child: Slider(
|
||||
value: value.toDouble(),
|
||||
min: kMinTrackpadSpeed.toDouble(),
|
||||
max: kMaxTrackpadSpeed.toDouble(),
|
||||
divisions: ((kMaxTrackpadSpeed - kMinTrackpadSpeed) / 10).round(),
|
||||
onChanged: (double v) => updateValue(v.round()),
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: Row(
|
||||
children: [
|
||||
SizedBox(
|
||||
width: 56,
|
||||
child: TextField(
|
||||
controller: _controller,
|
||||
keyboardType: TextInputType.number,
|
||||
textAlign: TextAlign.center,
|
||||
onSubmitted: (text) {
|
||||
int? v = int.tryParse(text);
|
||||
if (v != null) {
|
||||
updateValue(v);
|
||||
}
|
||||
},
|
||||
style: const TextStyle(fontSize: 13),
|
||||
decoration: InputDecoration(
|
||||
contentPadding:
|
||||
EdgeInsets.symmetric(vertical: 8.0, horizontal: 12.0),
|
||||
),
|
||||
),
|
||||
).marginOnly(right: 8.0),
|
||||
Text(
|
||||
'%',
|
||||
style: const TextStyle(fontSize: 15),
|
||||
)
|
||||
],
|
||||
)),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -226,6 +226,12 @@ const double kDefaultQuality = 50;
|
|||
const double kMaxQuality = 100;
|
||||
const double kMaxMoreQuality = 2000;
|
||||
|
||||
// trackpad speed
|
||||
const String kKeyTrackpadSpeed = 'trackpad-speed';
|
||||
const int kMinTrackpadSpeed = 10;
|
||||
const int kDefaultTrackpadSpeed = 100;
|
||||
const int kMaxTrackpadSpeed = 1000;
|
||||
|
||||
// incomming (should be incoming) is kept, because change it will break the previous setting.
|
||||
const String kKeyPrinterIncomingJobAction = 'printer-incomming-job-action';
|
||||
const String kValuePrinterIncomingJobDismiss = 'dismiss';
|
||||
|
|
|
@ -76,7 +76,9 @@ class DesktopSettingPage extends StatefulWidget {
|
|||
if (!isWeb && !bind.isIncomingOnly() && bind.pluginFeatureIsEnabled())
|
||||
SettingsTabKey.plugin,
|
||||
if (!bind.isDisableAccount()) SettingsTabKey.account,
|
||||
if (isWindows && bind.mainGetBuildinOption(key: kOptionHideRemotePrinterSetting) != 'Y') SettingsTabKey.printer,
|
||||
if (isWindows &&
|
||||
bind.mainGetBuildinOption(key: kOptionHideRemotePrinterSetting) != 'Y')
|
||||
SettingsTabKey.printer,
|
||||
SettingsTabKey.about,
|
||||
];
|
||||
|
||||
|
@ -1602,6 +1604,7 @@ class _DisplayState extends State<_Display> {
|
|||
scrollStyle(context),
|
||||
imageQuality(context),
|
||||
codec(context),
|
||||
if (isDesktop) trackpadSpeed(context),
|
||||
if (!isWeb) privacyModeImpl(context),
|
||||
other(context),
|
||||
]).marginOnly(bottom: _kListViewBottomMargin);
|
||||
|
@ -1689,6 +1692,26 @@ class _DisplayState extends State<_Display> {
|
|||
]);
|
||||
}
|
||||
|
||||
Widget trackpadSpeed(BuildContext context) {
|
||||
final initSpeed = (int.tryParse(
|
||||
bind.mainGetUserDefaultOption(key: kKeyTrackpadSpeed)) ??
|
||||
kDefaultTrackpadSpeed);
|
||||
final curSpeed = SimpleWrapper(initSpeed);
|
||||
void onDebouncer(int v) {
|
||||
bind.mainSetUserDefaultOption(
|
||||
key: kKeyTrackpadSpeed, value: v.toString());
|
||||
// It's better to notify all sessions that the default speed is changed.
|
||||
// But it may also be ok to take effect in the next connection.
|
||||
}
|
||||
|
||||
return _Card(title: 'Default trackpad speed', children: [
|
||||
TrackpadSpeedWidget(
|
||||
value: curSpeed,
|
||||
onDebouncer: onDebouncer,
|
||||
),
|
||||
]);
|
||||
}
|
||||
|
||||
Widget codec(BuildContext context) {
|
||||
onChanged(String value) async {
|
||||
await bind.mainSetUserDefaultOption(
|
||||
|
|
|
@ -4,6 +4,7 @@ import 'dart:async';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_hbb/common/widgets/audio_input.dart';
|
||||
import 'package:flutter_hbb/common/widgets/dialog.dart';
|
||||
import 'package:flutter_hbb/common/widgets/toolbar.dart';
|
||||
import 'package:flutter_hbb/models/chat_model.dart';
|
||||
import 'package:flutter_hbb/models/state_model.dart';
|
||||
|
@ -1594,10 +1595,28 @@ class _KeyboardMenu extends StatelessWidget {
|
|||
viewMode(),
|
||||
Divider(),
|
||||
...toolbarToggles(),
|
||||
...mouseSpeed(),
|
||||
...mobileActions(),
|
||||
]);
|
||||
}
|
||||
|
||||
mouseSpeed() {
|
||||
final speedWidgets = [];
|
||||
final sessionId = ffi.sessionId;
|
||||
if (isDesktop) {
|
||||
if (ffi.ffiModel.keyboard) {
|
||||
final enabled = !ffi.ffiModel.viewOnly;
|
||||
final trackpad = MenuButton(
|
||||
child: Text(translate('Trackpad speed')).paddingOnly(left: 26.0),
|
||||
onPressed: enabled ? () => trackpadSpeedDialog(sessionId, ffi) : null,
|
||||
ffi: ffi,
|
||||
);
|
||||
speedWidgets.add(trackpad);
|
||||
}
|
||||
}
|
||||
return speedWidgets;
|
||||
}
|
||||
|
||||
keyboardMode() {
|
||||
return futureBuilder(future: () async {
|
||||
return await bind.sessionGetKeyboardMode(sessionId: ffi.sessionId) ??
|
||||
|
|
|
@ -345,8 +345,11 @@ class InputModel {
|
|||
var _fling = false;
|
||||
Timer? _flingTimer;
|
||||
final _flingBaseDelay = 30;
|
||||
// trackpad, peer linux
|
||||
final _trackpadSpeed = 0.06;
|
||||
final _trackpadAdjustPeerLinux = 0.06;
|
||||
// This is an experience value.
|
||||
final _trackpadAdjustMacToWin = 2.50;
|
||||
int _trackpadSpeed = kDefaultTrackpadSpeed;
|
||||
double _trackpadSpeedInner = kDefaultTrackpadSpeed / 100.0;
|
||||
var _trackpadScrollUnsent = Offset.zero;
|
||||
|
||||
var _lastScale = 1.0;
|
||||
|
@ -370,6 +373,7 @@ class InputModel {
|
|||
bool get isViewOnly => parent.target!.ffiModel.viewOnly;
|
||||
double get devicePixelRatio => parent.target!.canvasModel.devicePixelRatio;
|
||||
bool get isViewCamera => parent.target!.connType == ConnType.viewCamera;
|
||||
int get trackpadSpeed => _trackpadSpeed;
|
||||
|
||||
InputModel(this.parent) {
|
||||
sessionId = parent.target!.sessionId;
|
||||
|
@ -385,6 +389,28 @@ class InputModel {
|
|||
}
|
||||
}
|
||||
|
||||
/// Updates the trackpad speed based on the session value.
|
||||
///
|
||||
/// The expected format of the retrieved value is a string that can be parsed into a double.
|
||||
/// If parsing fails or the value is out of bounds (less than `kMinTrackpadSpeed` or greater
|
||||
/// than `kMaxTrackpadSpeed`), the trackpad speed is reset to the default
|
||||
/// value (`kDefaultTrackpadSpeed`).
|
||||
///
|
||||
/// Bounds:
|
||||
/// - Minimum: `kMinTrackpadSpeed`
|
||||
/// - Maximum: `kMaxTrackpadSpeed`
|
||||
/// - Default: `kDefaultTrackpadSpeed`
|
||||
Future<void> updateTrackpadSpeed() async {
|
||||
_trackpadSpeed =
|
||||
(await bind.sessionGetTrackpadSpeed(sessionId: sessionId) ??
|
||||
kDefaultTrackpadSpeed);
|
||||
if (_trackpadSpeed < kMinTrackpadSpeed ||
|
||||
_trackpadSpeed > kMaxTrackpadSpeed) {
|
||||
_trackpadSpeed = kDefaultTrackpadSpeed;
|
||||
}
|
||||
_trackpadSpeedInner = _trackpadSpeed / 100.0;
|
||||
}
|
||||
|
||||
void handleKeyDownEventModifiers(KeyEvent e) {
|
||||
KeyUpEvent upEvent(e) => KeyUpEvent(
|
||||
physicalKey: e.physicalKey,
|
||||
|
@ -888,13 +914,16 @@ class InputModel {
|
|||
}
|
||||
}
|
||||
|
||||
final delta = e.panDelta;
|
||||
var delta = e.panDelta * _trackpadSpeedInner;
|
||||
if (isMacOS && peerPlatform == kPeerPlatformWindows) {
|
||||
delta *= _trackpadAdjustMacToWin;
|
||||
}
|
||||
_trackpadLastDelta = delta;
|
||||
|
||||
var x = delta.dx.toInt();
|
||||
var y = delta.dy.toInt();
|
||||
if (peerPlatform == kPeerPlatformLinux) {
|
||||
_trackpadScrollUnsent += (delta * _trackpadSpeed);
|
||||
_trackpadScrollUnsent += (delta * _trackpadAdjustPeerLinux);
|
||||
x = _trackpadScrollUnsent.dx.truncate();
|
||||
y = _trackpadScrollUnsent.dy.truncate();
|
||||
_trackpadScrollUnsent -= Offset(x.toDouble(), y.toDouble());
|
||||
|
@ -942,8 +971,8 @@ class InputModel {
|
|||
var dx = x.toInt();
|
||||
var dy = y.toInt();
|
||||
if (parent.target?.ffiModel.pi.platform == kPeerPlatformLinux) {
|
||||
dx = (x * _trackpadSpeed).toInt();
|
||||
dy = (y * _trackpadSpeed).toInt();
|
||||
dx = (x * _trackpadAdjustPeerLinux).toInt();
|
||||
dy = (y * _trackpadAdjustPeerLinux).toInt();
|
||||
}
|
||||
|
||||
var delay = _flingBaseDelay;
|
||||
|
@ -989,7 +1018,10 @@ class InputModel {
|
|||
_stopFling = false;
|
||||
|
||||
// 2.0 is an experience value
|
||||
double minFlingValue = 2.0;
|
||||
double minFlingValue = 2.0 * _trackpadSpeedInner;
|
||||
if (isMacOS && peerPlatform == kPeerPlatformWindows) {
|
||||
minFlingValue *= _trackpadAdjustMacToWin;
|
||||
}
|
||||
if (_trackpadLastDelta.dx.abs() > minFlingValue ||
|
||||
_trackpadLastDelta.dy.abs() > minFlingValue) {
|
||||
_fling = true;
|
||||
|
|
|
@ -2991,6 +2991,10 @@ class FFI {
|
|||
textureModel.updateCurrentDisplay(display ?? 0);
|
||||
}
|
||||
|
||||
if (isDesktop) {
|
||||
inputModel.updateTrackpadSpeed();
|
||||
}
|
||||
|
||||
// CAUTION: `sessionStart()` and `sessionStartWithDisplays()` are an async functions.
|
||||
// Though the stream is returned immediately, the stream may not be ready.
|
||||
// Any operations that depend on the stream should be carefully handled.
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit 7839dcf4e4ddc3feab9b52b0ae1903d443bc084d
|
||||
Subproject commit 6e556f7e1751a3a709cd5cca0df7268ba3cb1c48
|
|
@ -2105,6 +2105,12 @@ impl LoginConfigHandler {
|
|||
res
|
||||
}
|
||||
|
||||
pub fn save_trackpad_speed(&mut self, speed: i32) {
|
||||
let mut config = self.load_config();
|
||||
config.trackpad_speed = speed;
|
||||
self.save_config(config);
|
||||
}
|
||||
|
||||
/// Create a [`Message`] for saving custom fps.
|
||||
///
|
||||
/// # Arguments
|
||||
|
|
|
@ -492,6 +492,20 @@ pub fn session_set_custom_fps(session_id: SessionID, fps: i32) {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn session_get_trackpad_speed(session_id: SessionID) -> Option<i32> {
|
||||
if let Some(session) = sessions::get_session_by_session_id(&session_id) {
|
||||
Some(session.get_trackpad_speed())
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
pub fn session_set_trackpad_speed(session_id: SessionID, value: i32) {
|
||||
if let Some(session) = sessions::get_session_by_session_id(&session_id) {
|
||||
session.save_trackpad_speed(value);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn session_lock_screen(session_id: SessionID) {
|
||||
if let Some(session) = sessions::get_session_by_session_id(&session_id) {
|
||||
session.lock_screen();
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", "安装方式检测失败。请点击\"下载\"按钮,从发布网址下载,并手动升级。"),
|
||||
("websocket_tip", "使用 WebSocket 时,仅支持中继连接。"),
|
||||
("Use WebSocket", "使用 WebSocket"),
|
||||
("Trackpad speed", "触控板速度"),
|
||||
("Default trackpad speed", "默认触控板速度"),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", "Prüfung der Installationsmethode fehlgeschlagen. Bitte klicken Sie auf die Schaltfläche \"Herunterladen\", um von der Versionsseite herunterzuladen und manuell zu aktualisieren."),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", "Controllo metodo installazione non riuscito.\nSeleziona 'Download' per scaricare il programma e aggiornarlo manualmente."),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", "업데이트에 실패했습니다. .msi 설치 파일을 확인하세요."),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", "Kan de installatiemethode niet bepalen. Klik op “Downloaden” om de applicatie van de officiële website te downloaden en handmatig bij te werken."),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", "Sprawdzenie metody instalacji nie powiodło się. Kliknij przycisk \"Pobierz\", aby pobrać ze strony wydania i uaktualnić ręcznie."),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", "Невозможно определить метод установки. Нажмите кнопку \"Скачать\", чтобы скачать приложение с официального сайта и обновить его вручную."),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -696,5 +696,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||
("update-failed-check-msi-tip", ""),
|
||||
("websocket_tip", ""),
|
||||
("Use WebSocket", ""),
|
||||
("Trackpad speed", ""),
|
||||
("Default trackpad speed", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
|
|
@ -230,6 +230,10 @@ impl<T: InvokeUiSession> Session<T> {
|
|||
self.lc.read().unwrap().version.clone()
|
||||
}
|
||||
|
||||
pub fn get_trackpad_speed(&self) -> i32 {
|
||||
self.lc.read().unwrap().trackpad_speed
|
||||
}
|
||||
|
||||
pub fn fallback_keyboard_mode(&self) -> String {
|
||||
let peer_version = self.get_peer_version();
|
||||
let platform = self.peer_platform();
|
||||
|
@ -448,6 +452,10 @@ impl<T: InvokeUiSession> Session<T> {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn save_trackpad_speed(&self, trackpad_speed: i32) {
|
||||
self.lc.write().unwrap().save_trackpad_speed(trackpad_speed);
|
||||
}
|
||||
|
||||
pub fn set_custom_fps(&self, custom_fps: i32) {
|
||||
let msg = self.lc.write().unwrap().set_custom_fps(custom_fps, true);
|
||||
self.send(Data::Message(msg));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue