diff --git a/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp b/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp index 7ee3a6ca10..a1a7d5ba2a 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp @@ -1549,6 +1549,17 @@ void InnerWidget::repaintDialogRow(RowDescriptor row) { updateDialogRow(row); } +void InnerWidget::refreshDialogRow(RowDescriptor row) { + if (row.fullId) { + for (const auto &result : _searchResults) { + if (result->item()->fullId() == row.fullId) { + result->invalidateCache(); + } + } + } + repaintDialogRow(row); +} + void InnerWidget::updateSearchResult(not_null peer) { if (_state == WidgetState::Filtered) { if (!_peerSearchResults.empty()) { diff --git a/Telegram/SourceFiles/dialogs/dialogs_inner_widget.h b/Telegram/SourceFiles/dialogs/dialogs_inner_widget.h index f462657706..2618d0ada1 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_inner_widget.h +++ b/Telegram/SourceFiles/dialogs/dialogs_inner_widget.h @@ -92,6 +92,7 @@ public: void removeDialog(Key key); void repaintDialogRow(FilterId filterId, not_null row); void repaintDialogRow(RowDescriptor row); + void refreshDialogRow(RowDescriptor row); void dragLeft(); diff --git a/Telegram/SourceFiles/dialogs/dialogs_row.h b/Telegram/SourceFiles/dialogs/dialogs_row.h index b43b07af20..c717fd202c 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_row.h +++ b/Telegram/SourceFiles/dialogs/dialogs_row.h @@ -121,6 +121,11 @@ public: return _item; } + void invalidateCache() { + _cacheFor = nullptr; + _cache = Ui::Text::String(); + } + private: friend class Layout::RowPainter; diff --git a/Telegram/SourceFiles/dialogs/dialogs_widget.cpp b/Telegram/SourceFiles/dialogs/dialogs_widget.cpp index c2610857b4..a509c00778 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_widget.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_widget.cpp @@ -549,6 +549,10 @@ void Widget::repaintDialogRow(RowDescriptor row) { _inner->repaintDialogRow(row); } +void Widget::refreshDialogRow(RowDescriptor row) { + _inner->refreshDialogRow(row); +} + void Widget::jumpToTop() { if (session().supportMode()) { return; diff --git a/Telegram/SourceFiles/dialogs/dialogs_widget.h b/Telegram/SourceFiles/dialogs/dialogs_widget.h index fc81317e81..8357bb6b48 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_widget.h +++ b/Telegram/SourceFiles/dialogs/dialogs_widget.h @@ -64,6 +64,7 @@ public: void removeDialog(Key key); void repaintDialogRow(FilterId filterId, not_null row); void repaintDialogRow(RowDescriptor row); + void refreshDialogRow(RowDescriptor row); void jumpToTop(); diff --git a/Telegram/SourceFiles/history/history_item.cpp b/Telegram/SourceFiles/history/history_item.cpp index 9a6e7903a5..f515c48911 100644 --- a/Telegram/SourceFiles/history/history_item.cpp +++ b/Telegram/SourceFiles/history/history_item.cpp @@ -267,7 +267,7 @@ PeerData *HistoryItem::displayFrom() const { void HistoryItem::invalidateChatListEntry() { if (const auto main = App::main()) { // #TODO feeds search results - main->repaintDialogRow({ history(), fullId() }); + main->refreshDialogRow({ history(), fullId() }); } // invalidate cache for drawInDialog diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index 942cc0e23b..4255eed31a 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -2190,6 +2190,10 @@ void MainWidget::repaintDialogRow(Dialogs::RowDescriptor row) { _dialogs->repaintDialogRow(row); } +void MainWidget::refreshDialogRow(Dialogs::RowDescriptor row) { + _dialogs->refreshDialogRow(row); +} + void MainWidget::windowShown() { _history->windowShown(); } diff --git a/Telegram/SourceFiles/mainwidget.h b/Telegram/SourceFiles/mainwidget.h index a28e6d5dab..6afd699dd2 100644 --- a/Telegram/SourceFiles/mainwidget.h +++ b/Telegram/SourceFiles/mainwidget.h @@ -137,6 +137,7 @@ public: void removeDialog(Dialogs::Key key); void repaintDialogRow(FilterId filterId, not_null row); void repaintDialogRow(Dialogs::RowDescriptor row); + void refreshDialogRow(Dialogs::RowDescriptor row); void windowShown();