@@ -4648,6 +4648,40 @@ void InnerWidget::visibleTopBottomUpdated(
46484648}
46494649
46504650void 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