diff --git a/lib/pages/chat/chat.dart b/lib/pages/chat/chat.dart index 75941a8c8..632863df3 100644 --- a/lib/pages/chat/chat.dart +++ b/lib/pages/chat/chat.dart @@ -844,8 +844,7 @@ class ChatController extends State void hideEmojiPicker() { // #Pangea - MatrixState.pAnyState.closeOverlay(); - MatrixState.pAnyState.closeOverlay(); + MatrixState.pAnyState.closeAllOverlays(); clearSelectedEvents(); // Pangea setState(() => showEmojiPicker = false); @@ -894,7 +893,7 @@ class ChatController extends State void copyEventsAction() { // #Pangea - MatrixState.pAnyState.closeOverlay(); + MatrixState.pAnyState.closeAllOverlays(); // Pangea# Clipboard.setData(ClipboardData(text: _getSelectedEventString())); setState(() { @@ -905,8 +904,7 @@ class ChatController extends State void reportEventAction() async { // #Pangea - MatrixState.pAnyState.closeOverlay(); - MatrixState.pAnyState.closeOverlay(); + MatrixState.pAnyState.closeAllOverlays(); // Pangea# final event = selectedEvents.single; // #Pangea @@ -1002,7 +1000,7 @@ class ChatController extends State void redactEventsAction() async { // #Pangea - MatrixState.pAnyState.closeOverlay(); + MatrixState.pAnyState.closeAllOverlays(); // Pangea# final reasonInput = selectedEvents.any((event) => event.status.isSent) ? await showTextInputDialog( @@ -1100,7 +1098,7 @@ class ChatController extends State void forwardEventsAction() async { // #Pangea - MatrixState.pAnyState.closeOverlay(); + MatrixState.pAnyState.closeAllOverlays(); // Pangea# if (selectedEvents.length == 1) { Matrix.of(context).shareContent = @@ -1134,7 +1132,7 @@ class ChatController extends State replyEvent = replyTo ?? selectedEvents.first; selectedEvents.clear(); }); - MatrixState.pAnyState.closeOverlay(); + MatrixState.pAnyState.closeAllOverlays(); inputFocus.requestFocus(); } @@ -1262,7 +1260,7 @@ class ChatController extends State final events = List.from(selectedEvents); setState(() => selectedEvents.clear()); // #Pangea - MatrixState.pAnyState.closeOverlay(); + MatrixState.pAnyState.closeAllOverlays(); // Pangea# for (final event in events) { await room.sendReaction( @@ -1513,8 +1511,7 @@ class ChatController extends State // #Pangea // => { - MatrixState.pAnyState.closeOverlay(); - MatrixState.pAnyState.closeOverlay(); + MatrixState.pAnyState.closeAllOverlays(); // Pangea# (event ?? selectedEvents.single).showInfoDialog(context); // #Pangea diff --git a/lib/pangea/utils/any_state_holder.dart b/lib/pangea/utils/any_state_holder.dart index 9705a9ca1..67517bf22 100644 --- a/lib/pangea/utils/any_state_holder.dart +++ b/lib/pangea/utils/any_state_holder.dart @@ -61,6 +61,23 @@ class PangeaAnyState { } } + void closeAllOverlays() { + while (entries.isNotEmpty) { + try { + entries.last.remove(); + } catch (err, s) { + ErrorHandler.logError( + e: err, + s: s, + data: { + "overlay": entries.last, + }, + ); + } + entries.removeLast(); + } + } + LayerLinkAndKey messageLinkAndKey(String eventId) => layerLinkAndKey(eventId); // String chatViewTargetKey(String? roomId) => "chatViewKey$roomId"; diff --git a/lib/pangea/widgets/chat/message_toolbar.dart b/lib/pangea/widgets/chat/message_toolbar.dart index 68f119c49..1c8a76877 100644 --- a/lib/pangea/widgets/chat/message_toolbar.dart +++ b/lib/pangea/widgets/chat/message_toolbar.dart @@ -49,7 +49,7 @@ class ToolbarDisplayController { void closeToolbar() { controller.clearSelectedEvents(); - MatrixState.pAnyState.closeOverlay(); + MatrixState.pAnyState.closeAllOverlays(); } void setToolbar() {