diff --git a/lib/pages/chat/events/message_content.dart b/lib/pages/chat/events/message_content.dart index def3b2975..aea56de0b 100644 --- a/lib/pages/chat/events/message_content.dart +++ b/lib/pages/chat/events/message_content.dart @@ -307,7 +307,8 @@ class MessageContent extends StatelessWidget { if (cause == SelectionChangedCause.longPress && toolbarController != null && pangeaMessageEvent != null && - !(toolbarController!.highlighted)) { + !(toolbarController!.highlighted) && + !selected) { toolbarController!.controller.onSelectMessage( pangeaMessageEvent!.event, ); @@ -319,20 +320,21 @@ class MessageContent extends StatelessWidget { onTap: () => toolbarController?.showToolbar(context), text: toolbarController?.toolbar?.textSelection.messageText ?? messageText, - focusNode: toolbarController?.focusNode, contextMenuBuilder: (context, state) => - MessageContextMenu.contextMenuOverride( - context: context, - textSelection: state, - onDefine: () => toolbarController?.showToolbar( - context, - mode: MessageMode.definition, - ), - onListen: () => toolbarController?.showToolbar( - context, - mode: MessageMode.play, - ), - ), + (toolbarController?.highlighted ?? false) + ? const SizedBox.shrink() + : MessageContextMenu.contextMenuOverride( + context: context, + textSelection: state, + onDefine: () => toolbarController?.showToolbar( + context, + mode: MessageMode.definition, + ), + onListen: () => toolbarController?.showToolbar( + context, + mode: MessageMode.play, + ), + ), // text: snapshot.data ?? // event.calcLocalizedBodyFallback( // MatrixLocals(L10n.of(context)!), diff --git a/lib/pangea/widgets/chat/message_toolbar.dart b/lib/pangea/widgets/chat/message_toolbar.dart index 690593fcc..2c7409866 100644 --- a/lib/pangea/widgets/chat/message_toolbar.dart +++ b/lib/pangea/widgets/chat/message_toolbar.dart @@ -18,7 +18,6 @@ import 'package:matrix/matrix.dart'; enum MessageMode { translation, play, definition } class ToolbarDisplayController { - final FocusNode focusNode = FocusNode(); final PangeaMessageEvent pangeaMessageEvent; final String targetId; final bool immersionMode; @@ -46,14 +45,6 @@ class ToolbarDisplayController { immersionMode: immersionMode, controller: controller, ); - - final LayerLinkAndKey layerLinkAndKey = - MatrixState.pAnyState.layerLinkAndKey(targetId); - final targetRenderBox = - layerLinkAndKey.key.currentContext?.findRenderObject(); - if (targetRenderBox == null) return; - final Size transformTargetSize = (targetRenderBox as RenderBox).size; - messageWidth = transformTargetSize.width; } void showToolbar(BuildContext context, {MessageMode? mode}) { @@ -61,7 +52,18 @@ class ToolbarDisplayController { if (controller.selectMode) { controller.clearSelectedEvents(); } - focusNode.unfocus(); + // focusNode.unfocus(); + FocusScope.of(context).unfocus(); + + final LayerLinkAndKey layerLinkAndKey = + MatrixState.pAnyState.layerLinkAndKey(targetId); + final targetRenderBox = + layerLinkAndKey.key.currentContext?.findRenderObject(); + if (targetRenderBox != null) { + final Size transformTargetSize = (targetRenderBox as RenderBox).size; + messageWidth = transformTargetSize.width; + } + Widget overlayEntry; try { overlayEntry = Column( @@ -162,8 +164,8 @@ class MessageToolbarState extends State { case MessageMode.play: return true; case MessageMode.definition: - // return widget.textSelection.selectedText != null; - return true; + return widget.textSelection.selectedText != null; + // return true; default: return false; } diff --git a/lib/pangea/widgets/igc/pangea_rich_text.dart b/lib/pangea/widgets/igc/pangea_rich_text.dart index 68deabcb0..b3a098848 100644 --- a/lib/pangea/widgets/igc/pangea_rich_text.dart +++ b/lib/pangea/widgets/igc/pangea_rich_text.dart @@ -97,7 +97,10 @@ class PangeaRichTextState extends State { final Widget richText = SelectableText.rich( onSelectionChanged: (selection, cause) { if (cause == SelectionChangedCause.longPress && - !widget.toolbarController.highlighted) { + !widget.toolbarController.highlighted && + !widget.toolbarController.controller.selectedEvents.any( + (e) => e.eventId == widget.pangeaMessageEvent.eventId, + )) { widget.toolbarController.controller.onSelectMessage( widget.pangeaMessageEvent.event, ); @@ -107,20 +110,21 @@ class PangeaRichTextState extends State { .onTextSelection(selection); }, onTap: () => widget.toolbarController.showToolbar(context), - focusNode: widget.toolbarController.focusNode, contextMenuBuilder: (context, state) => - MessageContextMenu.contextMenuOverride( - context: context, - textSelection: state, - onDefine: () => widget.toolbarController.showToolbar( - context, - mode: MessageMode.definition, - ), - onListen: () => widget.toolbarController.showToolbar( - context, - mode: MessageMode.play, - ), - ), + widget.toolbarController.highlighted + ? const SizedBox.shrink() + : MessageContextMenu.contextMenuOverride( + context: context, + textSelection: state, + onDefine: () => widget.toolbarController.showToolbar( + context, + mode: MessageMode.definition, + ), + onListen: () => widget.toolbarController.showToolbar( + context, + mode: MessageMode.play, + ), + ), TextSpan( text: textSpan, style: widget.style,