diff --git a/flutter/lib/desktop/pages/desktop_keyboard_shortcuts_page.dart b/flutter/lib/desktop/pages/desktop_keyboard_shortcuts_page.dart index 3625ef42d..ab181599b 100644 --- a/flutter/lib/desktop/pages/desktop_keyboard_shortcuts_page.dart +++ b/flutter/lib/desktop/pages/desktop_keyboard_shortcuts_page.dart @@ -37,11 +37,14 @@ class _DesktopKeyboardShortcutsPageState @override Widget build(BuildContext context) { + final foregroundColor = + AppBarTheme.of(context).titleTextStyle?.color ?? Colors.white; return Scaffold( appBar: AppBar( title: Text(translate('Keyboard Shortcuts')), actions: [ TextButton.icon( + style: TextButton.styleFrom(foregroundColor: foregroundColor), onPressed: () => _bodyKey.currentState?.resetToDefaultsWithConfirm(), icon: const Icon(Icons.restore), diff --git a/flutter/test/keyboard_shortcuts_test.dart b/flutter/test/keyboard_shortcuts_test.dart index 8d55cb20e..a1ac38eac 100644 --- a/flutter/test/keyboard_shortcuts_test.dart +++ b/flutter/test/keyboard_shortcuts_test.dart @@ -58,6 +58,39 @@ void main() { ['primary', 'ctrl', 'alt', 'shift']); }); + test('shortcutBindingMapsFrom ignores malformed bindings', () { + expect(shortcutBindingMapsFrom('not a list'), isEmpty); + + final bindings = shortcutBindingMapsFrom([ + { + 'action': kShortcutActionScreenshot, + 'mods': ['primary'], + 'key': 'p', + }, + 'bad', + 1, + { + 'action': kShortcutActionToggleMute, + 'mods': ['alt'], + 'key': 's', + }, + ]); + + expect(bindings, hasLength(2)); + expect(bindings.map((binding) => binding['action']), [ + kShortcutActionScreenshot, + kShortcutActionToggleMute, + ]); + }); + + test('shortcutModSetFrom ignores malformed modifiers', () { + expect(shortcutModSetFrom('not a list'), isEmpty); + expect(shortcutModSetFrom(['primary', 1, 'alt', null, 'primary']), { + 'primary', + 'alt', + }); + }); + test('non-desktop defaults exclude desktop-only and tab shortcuts', () { final defaults = [ { @@ -85,6 +118,11 @@ void main() { 'mods': ['primary', 'alt', 'shift'], 'key': 'right_bracket', }, + { + 'action': kShortcutActionToggleRelativeMouseMode, + 'mods': ['primary', 'alt', 'shift'], + 'key': 'g', + }, ]; final filtered = filterDefaultBindingsForPlatform( @@ -158,6 +196,7 @@ void main() { final ids = idSet(groups); // Desktop-only actions are stripped. expect(ids, isNot(contains(kShortcutActionToggleFullscreen))); + expect(ids, isNot(contains(kShortcutActionToggleRelativeMouseMode))); expect(ids, isNot(contains(kShortcutActionScreenshot))); expect(ids, isNot(contains(kShortcutActionToggleToolbar))); expect(ids, isNot(contains(kShortcutActionCloseTab)));