Skip to content

Commit 8715cec

Browse files
committed
Fix crash on deleted message in public posts preview
1 parent a5c8d2d commit 8715cec

1 file changed

Lines changed: 36 additions & 1 deletion

File tree

‎Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp‎

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4648,6 +4648,40 @@ void InnerWidget::visibleTopBottomUpdated(
46484648
}
46494649

46504650
void InnerWidget::itemRemoved(not_null<const HistoryItem*> item) {
4651+
const auto previewRow = [&](int index) {
4652+
return base::in_range(index, 0, _previewResults.size())
4653+
? _previewResults[index].get()
4654+
: nullptr;
4655+
};
4656+
const auto previewSelected = previewRow(_previewSelected);
4657+
const auto previewPressed = previewRow(_previewPressed);
4658+
const auto wasPreviewCount = _previewResults.size();
4659+
_previewResults.erase(
4660+
ranges::remove(_previewResults, item, [](const auto &row) {
4661+
return row->item().get();
4662+
}),
4663+
end(_previewResults));
4664+
if (wasPreviewCount != _previewResults.size()) {
4665+
const auto previewIndex = [&](FakeRow *row) {
4666+
const auto i = ranges::find(
4667+
_previewResults,
4668+
row,
4669+
&std::unique_ptr<FakeRow>::get);
4670+
return (row && i != end(_previewResults))
4671+
? int(i - begin(_previewResults))
4672+
: -1;
4673+
};
4674+
_previewSelected = previewIndex(previewSelected);
4675+
4676+
// Don't let a press on a shifted row open a different post.
4677+
const auto pressed = previewIndex(previewPressed);
4678+
if (pressed != _previewPressed) {
4679+
if (pressed >= 0) {
4680+
_previewResults[pressed]->stopLastRipple();
4681+
}
4682+
_previewPressed = -1;
4683+
}
4684+
}
46514685
int wasCount = _searchResults.size();
46524686
for (auto i = _searchResults.begin(); i != _searchResults.end();) {
46534687
if ((*i)->item() == item) {
@@ -4661,7 +4695,8 @@ void InnerWidget::itemRemoved(not_null<const HistoryItem*> item) {
46614695
++i;
46624696
}
46634697
}
4664-
if (wasCount != _searchResults.size()) {
4698+
if (wasCount != _searchResults.size()
4699+
|| wasPreviewCount != _previewResults.size()) {
46654700
refresh();
46664701
}
46674702
}

0 commit comments

Comments
 (0)