From 507e90c9ad4781a804a290919fa15f6d93ae6efb Mon Sep 17 00:00:00 2001 From: "Lucas.Xu" Date: Mon, 2 Dec 2024 20:44:34 +0800 Subject: [PATCH 1/3] fix: repeated key events in slash menu --- .../selection_menu/selection_menu_widget.dart | 45 ++++++++++++++++--- 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/lib/src/editor/selection_menu/selection_menu_widget.dart b/lib/src/editor/selection_menu/selection_menu_widget.dart index e40f86f19..6ea792637 100644 --- a/lib/src/editor/selection_menu/selection_menu_widget.dart +++ b/lib/src/editor/selection_menu/selection_menu_widget.dart @@ -358,8 +358,7 @@ class _SelectionMenuWidgetState extends State { _scrollController?.scrollToIndex( _selectedIndex, - duration: const Duration(milliseconds: 200), - preferPosition: AutoScrollPosition.begin, + preferPosition: AutoScrollPosition.middle, ); } @@ -465,6 +464,10 @@ class _SelectionMenuWidgetState extends State { KeyEventResult _onKeyEvent(FocusNode node, KeyEvent event) { AppFlowyEditorLog.keyboard.debug('slash command, on key $event'); + if (event is KeyRepeatEvent) { + return KeyEventResult.skipRemainingHandlers; + } + if (event is! KeyDownEvent) { return KeyEventResult.ignored; } @@ -506,18 +509,46 @@ class _SelectionMenuWidgetState extends State { var newSelectedIndex = _selectedIndex; if (event.logicalKey == LogicalKeyboardKey.arrowLeft) { + // When going left, wrap to the end of the previous row newSelectedIndex -= widget.maxItemInRow; + if (newSelectedIndex < 0) { + // Calculate the last row's starting position + final lastRowStart = (_showingItems.length - 1) - + ((_showingItems.length - 1) % widget.maxItemInRow); + // Move to the same column in the last row + newSelectedIndex = + lastRowStart + (_selectedIndex % widget.maxItemInRow); + if (newSelectedIndex >= _showingItems.length) { + newSelectedIndex = _showingItems.length - 1; + } + } } else if (event.logicalKey == LogicalKeyboardKey.arrowRight) { + // When going right, wrap to the start of the next row newSelectedIndex += widget.maxItemInRow; + if (newSelectedIndex >= _showingItems.length) { + newSelectedIndex = _selectedIndex % widget.maxItemInRow; + if (newSelectedIndex >= _showingItems.length) { + newSelectedIndex = _showingItems.length - 1; + } + } } else if (event.logicalKey == LogicalKeyboardKey.arrowUp) { - newSelectedIndex -= 1; + if (newSelectedIndex > 0) { + newSelectedIndex -= 1; + } else { + // Wrap to the last item + newSelectedIndex = _showingItems.length - 1; + } } else if (event.logicalKey == LogicalKeyboardKey.arrowDown) { - newSelectedIndex += 1; + if (newSelectedIndex < _showingItems.length - 1) { + newSelectedIndex += 1; + } else { + // Wrap to the first item + newSelectedIndex = 0; + } } else if (event.logicalKey == LogicalKeyboardKey.tab) { - newSelectedIndex += widget.maxItemInRow; - var currRow = (newSelectedIndex) % widget.maxItemInRow; + newSelectedIndex += 1; if (newSelectedIndex >= _showingItems.length) { - newSelectedIndex = (currRow + 1) % widget.maxItemInRow; + newSelectedIndex = 0; } } From 436485a2504011673ee5d60858e7efc6fe8abc78 Mon Sep 17 00:00:00 2001 From: "Lucas.Xu" Date: Mon, 2 Dec 2024 20:53:44 +0800 Subject: [PATCH 2/3] feat: add cmd+delete and option+delete commands --- .../service/shortcuts/command/remove_line_command.dart | 2 +- .../service/shortcuts/command/remove_word_command.dart | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/src/editor/editor_component/service/shortcuts/command/remove_line_command.dart b/lib/src/editor/editor_component/service/shortcuts/command/remove_line_command.dart index 0c2960402..4197ab45b 100644 --- a/lib/src/editor/editor_component/service/shortcuts/command/remove_line_command.dart +++ b/lib/src/editor/editor_component/service/shortcuts/command/remove_line_command.dart @@ -13,7 +13,7 @@ final CommandShortcutEvent deleteLeftSentenceCommand = CommandShortcutEvent( key: 'delete the left line', getDescription: () => AppFlowyEditorL10n.current.cmdDeleteLineLeft, command: 'ctrl+alt+backspace', - macOSCommand: 'cmd+backspace', + macOSCommand: 'cmd+backspace,cmd+delete', handler: _deleteLeftSentenceCommandHandler, ); diff --git a/lib/src/editor/editor_component/service/shortcuts/command/remove_word_command.dart b/lib/src/editor/editor_component/service/shortcuts/command/remove_word_command.dart index 055020920..ec4627c71 100644 --- a/lib/src/editor/editor_component/service/shortcuts/command/remove_word_command.dart +++ b/lib/src/editor/editor_component/service/shortcuts/command/remove_word_command.dart @@ -1,6 +1,5 @@ -import 'package:flutter/material.dart'; - import 'package:appflowy_editor/appflowy_editor.dart'; +import 'package:flutter/material.dart'; /// Delete key event. /// @@ -12,7 +11,7 @@ final CommandShortcutEvent deleteLeftWordCommand = CommandShortcutEvent( key: 'delete the left word', getDescription: () => AppFlowyEditorL10n.current.cmdDeleteWordLeft, command: 'ctrl+backspace', - macOSCommand: 'alt+backspace', + macOSCommand: 'alt+backspace,alt+delete', handler: _deleteLeftWordCommandHandler, ); From 9c28c732bf915b8109548e1249c7a66002ca70c4 Mon Sep 17 00:00:00 2001 From: "Lucas.Xu" Date: Tue, 3 Dec 2024 09:18:01 +0800 Subject: [PATCH 3/3] Revert "feat: add cmd+delete and option+delete commands" This reverts commit 436485a2504011673ee5d60858e7efc6fe8abc78. --- .../service/shortcuts/command/remove_line_command.dart | 2 +- .../service/shortcuts/command/remove_word_command.dart | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/src/editor/editor_component/service/shortcuts/command/remove_line_command.dart b/lib/src/editor/editor_component/service/shortcuts/command/remove_line_command.dart index 4197ab45b..0c2960402 100644 --- a/lib/src/editor/editor_component/service/shortcuts/command/remove_line_command.dart +++ b/lib/src/editor/editor_component/service/shortcuts/command/remove_line_command.dart @@ -13,7 +13,7 @@ final CommandShortcutEvent deleteLeftSentenceCommand = CommandShortcutEvent( key: 'delete the left line', getDescription: () => AppFlowyEditorL10n.current.cmdDeleteLineLeft, command: 'ctrl+alt+backspace', - macOSCommand: 'cmd+backspace,cmd+delete', + macOSCommand: 'cmd+backspace', handler: _deleteLeftSentenceCommandHandler, ); diff --git a/lib/src/editor/editor_component/service/shortcuts/command/remove_word_command.dart b/lib/src/editor/editor_component/service/shortcuts/command/remove_word_command.dart index ec4627c71..055020920 100644 --- a/lib/src/editor/editor_component/service/shortcuts/command/remove_word_command.dart +++ b/lib/src/editor/editor_component/service/shortcuts/command/remove_word_command.dart @@ -1,6 +1,7 @@ -import 'package:appflowy_editor/appflowy_editor.dart'; import 'package:flutter/material.dart'; +import 'package:appflowy_editor/appflowy_editor.dart'; + /// Delete key event. /// /// - support @@ -11,7 +12,7 @@ final CommandShortcutEvent deleteLeftWordCommand = CommandShortcutEvent( key: 'delete the left word', getDescription: () => AppFlowyEditorL10n.current.cmdDeleteWordLeft, command: 'ctrl+backspace', - macOSCommand: 'alt+backspace,alt+delete', + macOSCommand: 'alt+backspace', handler: _deleteLeftWordCommandHandler, );