Fix opening topic first time, jump down on second click.

This commit is contained in:
John Preston 2022-11-01 16:13:37 +04:00
parent 57dc0c632e
commit f6e501a431
2 changed files with 25 additions and 10 deletions

View file

@ -452,6 +452,7 @@ void ListWidget::refreshRows(const Data::MessagesSlice &old) {
1 1
) - 1; ) - 1;
auto destroyingBarElement = _bar.element;
_items.clear(); _items.clear();
_items.reserve(_slice.ids.size()); _items.reserve(_slice.ids.size());
auto nearestIndex = -1; auto nearestIndex = -1;
@ -460,9 +461,17 @@ void ListWidget::refreshRows(const Data::MessagesSlice &old) {
if (_slice.nearestToAround == fullId) { if (_slice.nearestToAround == fullId) {
nearestIndex = int(_items.size()); nearestIndex = int(_items.size());
} }
_items.push_back(enforceViewForItem(item)); const auto view = enforceViewForItem(item);
_items.push_back(view);
if (destroyingBarElement == view) {
destroyingBarElement = nullptr;
}
} }
} }
if (destroyingBarElement) {
destroyingBarElement->destroyUnreadBar();
_bar = {};
}
for (auto e = end(_items), i = e - addedToEndCount; i != e; ++i) { for (auto e = end(_items), i = e - addedToEndCount; i != e; ++i) {
_itemRevealPending.emplace(*i); _itemRevealPending.emplace(*i);
} }

View file

@ -164,13 +164,6 @@ void RepliesMemento::setReadInformation(
} }
_replies->setInboxReadTill(inboxReadTillId, unreadCount); _replies->setInboxReadTill(inboxReadTillId, unreadCount);
_replies->setOutboxReadTill(outboxReadTillId); _replies->setOutboxReadTill(outboxReadTillId);
if (!_list.aroundPosition().fullId
&& _replies->computeInboxReadTillFull() == MsgId(1)) {
_list.setAroundPosition(Data::MinMessagePosition);
_list.setScrollTopState(ListMemento::ScrollTopState{
Data::MinMessagePosition
});
}
} }
object_ptr<Window::SectionWidget> RepliesMemento::createWidget( object_ptr<Window::SectionWidget> RepliesMemento::createWidget(
@ -181,6 +174,14 @@ object_ptr<Window::SectionWidget> RepliesMemento::createWidget(
if (column == Window::Column::Third) { if (column == Window::Column::Third) {
return nullptr; return nullptr;
} }
if (!_list.aroundPosition().fullId
&& _replies
&& _replies->computeInboxReadTillFull() == MsgId(1)) {
_list.setAroundPosition(Data::MinMessagePosition);
_list.setScrollTopState(ListMemento::ScrollTopState{
Data::MinMessagePosition
});
}
auto result = object_ptr<RepliesWidget>( auto result = object_ptr<RepliesWidget>(
parent, parent,
controller, controller,
@ -1886,6 +1887,9 @@ bool RepliesWidget::showInternal(
if (logMemento->getHistory() == history() if (logMemento->getHistory() == history()
&& logMemento->getRootId() == _rootId) { && logMemento->getRootId() == _rootId) {
restoreState(logMemento); restoreState(logMemento);
if (!logMemento->getHighlightId()) {
showAtPosition(Data::UnreadMessagePosition);
}
return true; return true;
} }
} }
@ -2073,9 +2077,11 @@ void RepliesWidget::updateControlsGeometry() {
const auto newScrollTop = _scroll->isHidden() const auto newScrollTop = _scroll->isHidden()
? std::nullopt ? std::nullopt
: base::make_optional(_scroll->scrollTop() : _scroll->scrollTop()
? base::make_optional(_scroll->scrollTop()
+ topDelta() + topDelta()
+ _scrollTopDelta); + _scrollTopDelta)
: 0;
_topBar->resizeToWidth(contentWidth); _topBar->resizeToWidth(contentWidth);
_topBarShadow->resize(contentWidth, st::lineWidth); _topBarShadow->resize(contentWidth, st::lineWidth);
if (_rootView) { if (_rootView) {