diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m index 5104aa509..788a68e65 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m @@ -2044,6 +2044,7 @@ typedef enum : NSUInteger { menuActionsViewController.delegate = self; + self.conversationViewModel.mostRecentMenuActionsViewItem = cell.viewItem; [[OWSWindowManager sharedManager] showMenuActionsWindow:menuActionsViewController]; [self updateShouldObserveVMUpdates]; @@ -4820,6 +4821,12 @@ typedef enum : NSUInteger { [self scrollToBottomAnimated:NO]; } +- (void)conversationViewModelDidDeleteMostRecentMenuActionsViewItem +{ + OWSAssertIsOnMainThread(); + [[OWSWindowManager sharedManager] hideMenuActionsWindow]; +} + #pragma mark - Orientation - (void)viewWillTransitionToSize:(CGSize)size diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewModel.h b/Signal/src/ViewControllers/ConversationView/ConversationViewModel.h index c4d781b3a..a855c6f4c 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewModel.h +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewModel.h @@ -74,6 +74,8 @@ typedef NS_ENUM(NSUInteger, ConversationUpdateItemType) { // to prod the view to reset its scroll state, etc. - (void)conversationViewModelDidReset; +- (void)conversationViewModelDidDeleteMostRecentMenuActionsViewItem; + - (BOOL)isObservingVMUpdates; - (ConversationStyle *)conversationStyle; @@ -87,6 +89,7 @@ typedef NS_ENUM(NSUInteger, ConversationUpdateItemType) { @property (nonatomic, readonly) NSArray> *viewItems; @property (nonatomic, nullable) NSString *focusMessageIdOnOpen; @property (nonatomic, readonly, nullable) ThreadDynamicInteractions *dynamicInteractions; +@property (nonatomic, nullable) id mostRecentMenuActionsViewItem; - (instancetype)init NS_UNAVAILABLE; - (instancetype)initWithThread:(TSThread *)thread diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewModel.m b/Signal/src/ViewControllers/ConversationView/ConversationViewModel.m index a5e589734..602a4fc0d 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewModel.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewModel.m @@ -583,6 +583,12 @@ static const int kYapDatabaseRangeMaxLength = 25000; return; } + NSString *_Nullable mostRecentMenuActionsInterationId = self.mostRecentMenuActionsViewItem.interaction.uniqueId; + if (mostRecentMenuActionsInterationId != nil && + [diff.removedItemIds containsObject:mostRecentMenuActionsInterationId]) { + [self.delegate conversationViewModelDidDeleteMostRecentMenuActionsViewItem]; + } + NSMutableSet *diffAddedItemIds = [diff.addedItemIds mutableCopy]; NSMutableSet *diffRemovedItemIds = [diff.removedItemIds mutableCopy]; NSMutableSet *diffUpdatedItemIds = [diff.updatedItemIds mutableCopy];