specify keyboard mode only

Signed-off-by: fufesou <shuanglongchen@yeah.net>
This commit is contained in:
fufesou 2023-03-28 12:10:58 +08:00
parent c845ddf510
commit efaf63c57c

@ -1638,12 +1638,15 @@ class _KeyboardMenu extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
var ffiModel = Provider.of<FfiModel>(context); var ffiModel = Provider.of<FfiModel>(context);
if (!ffiModel.keyboard) return Offstage(); if (!ffiModel.keyboard) return Offstage();
String? modeOnly;
if (stateGlobal.grabKeyboard) { if (stateGlobal.grabKeyboard) {
if (bind.sessionIsKeyboardModeSupported(id: id, mode: _kKeyMapMode)) { if (bind.sessionIsKeyboardModeSupported(id: id, mode: _kKeyMapMode)) {
bind.sessionSetKeyboardMode(id: id, value: _kKeyMapMode); bind.sessionSetKeyboardMode(id: id, value: _kKeyMapMode);
modeOnly = _kKeyMapMode;
} else if (bind.sessionIsKeyboardModeSupported( } else if (bind.sessionIsKeyboardModeSupported(
id: id, mode: _kKeyLegacyMode)) { id: id, mode: _kKeyLegacyMode)) {
bind.sessionSetKeyboardMode(id: id, value: _kKeyLegacyMode); bind.sessionSetKeyboardMode(id: id, value: _kKeyLegacyMode);
modeOnly = _kKeyLegacyMode;
} }
} }
return _IconSubmenuButton( return _IconSubmenuButton(
@ -1653,14 +1656,14 @@ class _KeyboardMenu extends StatelessWidget {
color: _MenubarTheme.blueColor, color: _MenubarTheme.blueColor,
hoverColor: _MenubarTheme.hoverBlueColor, hoverColor: _MenubarTheme.hoverBlueColor,
menuChildren: [ menuChildren: [
mode(), mode(modeOnly),
localKeyboardType(), localKeyboardType(),
Divider(), Divider(),
view_mode(), view_mode(),
]); ]);
} }
mode() { mode(String? modeOnly) {
return futureBuilder(future: () async { return futureBuilder(future: () async {
return await bind.sessionGetKeyboardMode(id: id) ?? _kKeyLegacyMode; return await bind.sessionGetKeyboardMode(id: id) ?? _kKeyLegacyMode;
}(), hasData: (data) { }(), hasData: (data) {
@ -1678,10 +1681,17 @@ class _KeyboardMenu extends StatelessWidget {
} }
for (KeyboardModeMenu mode in modes) { for (KeyboardModeMenu mode in modes) {
if (bind.sessionIsKeyboardModeSupported(id: id, mode: mode.key)) { if (modeOnly != null && mode.key != modeOnly) {
continue;
} else if (!bind.sessionIsKeyboardModeSupported(
id: id, mode: mode.key)) {
continue;
}
if (pi.is_wayland && mode.key != _kKeyMapMode) { if (pi.is_wayland && mode.key != _kKeyMapMode) {
continue; continue;
} }
var text = translate(mode.menu); var text = translate(mode.menu);
if (mode.key == _kKeyTranslateMode) { if (mode.key == _kKeyTranslateMode) {
text = '$text beta'; text = '$text beta';
@ -1694,7 +1704,6 @@ class _KeyboardMenu extends StatelessWidget {
ffi: ffi, ffi: ffi,
)); ));
} }
}
return Column(children: list); return Column(children: list);
}); });
} }