From cb5863177fbe284a03bb324222ace74943dc8737 Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 12 May 2020 20:28:44 +0400 Subject: [PATCH] Apply edition updates to search result previews. --- Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp | 11 +++++++++++ Telegram/SourceFiles/dialogs/dialogs_inner_widget.h | 1 + Telegram/SourceFiles/dialogs/dialogs_row.h | 5 +++++ Telegram/SourceFiles/dialogs/dialogs_widget.cpp | 4 ++++ Telegram/SourceFiles/dialogs/dialogs_widget.h | 1 + Telegram/SourceFiles/history/history_item.cpp | 2 +- Telegram/SourceFiles/mainwidget.cpp | 4 ++++ Telegram/SourceFiles/mainwidget.h | 1 + 8 files changed, 28 insertions(+), 1 deletion(-) diff --git a/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp b/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp index 7ee3a6ca1..a1a7d5ba2 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 f46265770..2618d0ada 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 b43b07af2..c717fd202 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 c2610857b..a509c0077 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 fc81317e8..8357bb6b4 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 9a6e7903a..f515c4891 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 942cc0e23..4255eed31 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 a28e6d5da..6afd699dd 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();