diff --git a/Telegram/SourceFiles/data/data_session.cpp b/Telegram/SourceFiles/data/data_session.cpp index 2dfcc24a9..0ad1ea07d 100644 --- a/Telegram/SourceFiles/data/data_session.cpp +++ b/Telegram/SourceFiles/data/data_session.cpp @@ -1279,7 +1279,8 @@ rpl::producer> Session::viewResizeRequest() const { void Session::requestItemViewRefresh(not_null item) { if (const auto view = item->mainView()) { - view->setPendingResize(); + notifyHistoryChangeDelayed(item->history()); + view->refreshInBlock(); } _itemViewRefreshRequest.fire_copy(item); } diff --git a/Telegram/SourceFiles/history/history_inner_widget.cpp b/Telegram/SourceFiles/history/history_inner_widget.cpp index df1e6f2e0..56e3f43c4 100644 --- a/Telegram/SourceFiles/history/history_inner_widget.cpp +++ b/Telegram/SourceFiles/history/history_inner_widget.cpp @@ -178,10 +178,6 @@ HistoryInner::HistoryInner( ) | rpl::start_with_next( [this](auto view) { viewRemoved(view); }, lifetime()); - session().data().itemViewRefreshRequest( - ) | rpl::start_with_next( - [this](auto item) { refreshView(item); }, - lifetime()); rpl::merge( session().data().historyUnloaded(), session().data().historyCleared() @@ -1316,32 +1312,15 @@ void HistoryInner::itemRemoved(not_null item) { } void HistoryInner::viewRemoved(not_null view) { - if (_dragSelFrom == view) { - _dragSelFrom = nullptr; - } - if (_dragSelTo == view) { - _dragSelTo = nullptr; - } - if (_scrollDateLastItem == view) { - _scrollDateLastItem = nullptr; - } -} - -void HistoryInner::refreshView(not_null item) { - const auto dragSelFrom = (_dragSelFrom && _dragSelFrom->data() == item); - const auto dragSelTo = (_dragSelTo && _dragSelTo->data() == item); - const auto scrollDateLastItem = (_scrollDateLastItem - && _scrollDateLastItem->data() == item); - item->refreshMainView(); - if (dragSelFrom) { - _dragSelFrom = item->mainView(); - } - if (dragSelTo) { - _dragSelTo = item->mainView(); - } - if (scrollDateLastItem) { - _scrollDateLastItem = item->mainView(); - } + const auto refresh = [&](auto &saved) { + if (saved == view) { + const auto now = view->data()->mainView(); + saved = (now && now != view) ? now : nullptr; + } + }; + refresh(_dragSelFrom); + refresh(_dragSelTo); + refresh(_scrollDateLastItem); } void HistoryInner::mouseActionFinish( diff --git a/Telegram/SourceFiles/history/history_inner_widget.h b/Telegram/SourceFiles/history/history_inner_widget.h index 630bfdfc6..89aa3d2a6 100644 --- a/Telegram/SourceFiles/history/history_inner_widget.h +++ b/Telegram/SourceFiles/history/history_inner_widget.h @@ -239,7 +239,6 @@ private: void itemRemoved(not_null item); void viewRemoved(not_null view); - void refreshView(not_null item); void touchResetSpeed(); void touchUpdateSpeed(); diff --git a/Telegram/SourceFiles/history/history_widget.cpp b/Telegram/SourceFiles/history/history_widget.cpp index e6751e62a..538770fb9 100644 --- a/Telegram/SourceFiles/history/history_widget.cpp +++ b/Telegram/SourceFiles/history/history_widget.cpp @@ -502,15 +502,6 @@ HistoryWidget::HistoryWidget( } }, lifetime()); - session().data().itemViewRefreshRequest( - ) | rpl::start_with_next([=](not_null item) { - // While HistoryInner doesn't own item views we must refresh them - // even if the list is not yet created / was destroyed. - if (!_list) { - item->refreshMainView(); - } - }, lifetime()); - Core::App().settings().largeEmojiChanges( ) | rpl::start_with_next([=] { crl::on_main(this, [=] {