Opt: Change keyboard mode by ui

This commit is contained in:
asur4s 2022-09-05 10:18:29 -04:00
parent 72d357e14b
commit 3d7377f9b6
4 changed files with 71 additions and 7 deletions

View File

@ -41,6 +41,7 @@ class _RemotePageState extends State<RemotePage>
Timer? _timer; Timer? _timer;
bool _showBar = !isWebDesktop; bool _showBar = !isWebDesktop;
String _value = ''; String _value = '';
String keyboardMode = "legacy";
final _cursorOverImage = false.obs; final _cursorOverImage = false.obs;
final FocusNode _mobileFocusNode = FocusNode(); final FocusNode _mobileFocusNode = FocusNode();
@ -254,8 +255,11 @@ class _RemotePageState extends State<RemotePage>
} }
KeyEventResult handleRawKeyEvent(FocusNode data, RawKeyEvent e) { KeyEventResult handleRawKeyEvent(FocusNode data, RawKeyEvent e) {
String? keyboardMode = Platform.environment['KEYBOARD_MODE']; bind.sessionGetKeyboardName(id: widget.id).then((result) {
keyboardMode ??= 'legacy'; setState(() {
keyboardMode = result.toString();
});
});
if (keyboardMode == 'map') { if (keyboardMode == 'map') {
mapKeyboardMode(e); mapKeyboardMode(e);
@ -285,7 +289,6 @@ class _RemotePageState extends State<RemotePage>
RawKeyEventDataLinux newData = e.data as RawKeyEventDataLinux; RawKeyEventDataLinux newData = e.data as RawKeyEventDataLinux;
scanCode = newData.scanCode; scanCode = newData.scanCode;
keyCode = newData.keyCode; keyCode = newData.keyCode;
debugPrint(newData.unicodeScalarValues.toString());
} else { } else {
scanCode = -1; scanCode = -1;
keyCode = -1; keyCode = -1;
@ -537,10 +540,8 @@ class _RemotePageState extends State<RemotePage>
onPointerUp: _onPointUpImage, onPointerUp: _onPointUpImage,
onPointerMove: _onPointMoveImage, onPointerMove: _onPointMoveImage,
onPointerSignal: _onPointerSignalImage, onPointerSignal: _onPointerSignalImage,
child: MouseRegion( child:
onEnter: enterView, MouseRegion(onEnter: enterView, onExit: leaveView, child: child));
onExit: leaveView,
child: child));
} }
Widget getBodyForDesktop(BuildContext context, bool keyboard) { Widget getBodyForDesktop(BuildContext context, bool keyboard) {

View File

@ -93,6 +93,7 @@ class _RemoteMenubarState extends State<RemoteMenubar> {
menubarItems.add(_buildMonitor(context)); menubarItems.add(_buildMonitor(context));
menubarItems.add(_buildControl(context)); menubarItems.add(_buildControl(context));
menubarItems.add(_buildDisplay(context)); menubarItems.add(_buildDisplay(context));
menubarItems.add(_buildKeyboard(context));
if (!isWeb) { if (!isWeb) {
menubarItems.add(_buildChat(context)); menubarItems.add(_buildChat(context));
} }
@ -264,6 +265,29 @@ class _RemoteMenubarState extends State<RemoteMenubar> {
); );
} }
Widget _buildKeyboard(BuildContext context) {
return mod_menu.PopupMenuButton(
padding: EdgeInsets.zero,
icon: const Icon(
Icons.keyboard,
color: _MenubarTheme.commonColor,
),
tooltip: translate('Keyboard Settings'),
position: mod_menu.PopupMenuPosition.under,
onSelected: (String item) {},
itemBuilder: (BuildContext context) => _getKeyboardMenu()
.map((entry) => entry.build(
context,
const MenuConfig(
commonColor: _MenubarTheme.commonColor,
height: _MenubarTheme.height,
dividerHeight: _MenubarTheme.dividerHeight,
)))
.expand((i) => i)
.toList(),
);
}
Widget _buildClose(BuildContext context) { Widget _buildClose(BuildContext context) {
return IconButton( return IconButton(
tooltip: translate('Close'), tooltip: translate('Close'),
@ -555,6 +579,28 @@ class _RemoteMenubarState extends State<RemoteMenubar> {
return displayMenu; return displayMenu;
} }
List<MenuEntryBase<String>> _getKeyboardMenu() {
final keyboardMenu = [
MenuEntryRadios<String>(
text: translate('Ratio'),
optionsGetter: () => [
MenuEntryRadioOption(
text: translate('Legacy mode'), value: 'legacy'),
MenuEntryRadioOption(text: translate('Map mode'), value: 'map'),
],
curOptionGetter: () async {
return await bind.sessionGetKeyboardName(id: widget.id) ?? 'legacy';
},
optionSetter: (String oldValue, String newValue) async {
await bind.sessionSetKeyboardMode(
id: widget.id, keyboardMode: newValue);
widget.ffi.canvasModel.updateViewStyle();
})
];
return keyboardMenu;
}
MenuEntrySwitch<String> _createSwitchMenuEntry(String text, String option) { MenuEntrySwitch<String> _createSwitchMenuEntry(String text, String option) {
return MenuEntrySwitch<String>( return MenuEntrySwitch<String>(
text: translate(text), text: translate(text),

View File

@ -1003,6 +1003,10 @@ class FFI {
downOrUp: down); downOrUp: down);
} }
Future<String> getKeyboardMode(){
return bind.sessionGetKeyboardName(id: id);
}
void enterOrLeave(bool enter) { void enterOrLeave(bool enter) {
bind.sessionEnterOrLeave(id: id, enter: enter); bind.sessionEnterOrLeave(id: id, enter: enter);
} }

View File

@ -298,6 +298,19 @@ pub fn session_get_peer_option(id: String, name: String) -> String {
"".to_string() "".to_string()
} }
pub fn session_get_keyboard_name(id: String) -> String {
if let Some(session) = SESSIONS.read().unwrap().get(&id) {
return session.get_keyboard_mode();
}
"legacy".to_string()
}
pub fn session_set_keyboard_mode(id: String, keyboard_mode: String) {
if let Some(session) = SESSIONS.read().unwrap().get(&id) {
session.save_keyboard_mode(keyboard_mode);
}
}
pub fn session_input_os_password(id: String, value: String) { pub fn session_input_os_password(id: String, value: String) {
if let Some(session) = SESSIONS.read().unwrap().get(&id) { if let Some(session) = SESSIONS.read().unwrap().get(&id) {
session.input_os_password(value, true); session.input_os_password(value, true);