Wait for smooth scrolling animation to add new message (#2084)

Co-authored-by: Paweł <zneix@zneix.eu>
Co-authored-by: pajlada <rasmus.karlsson@pajlada.com>
This commit is contained in:
Andrew Opalach 2021-04-24 11:15:15 -04:00 committed by GitHub
parent 62bf843aaf
commit 24a2d8a86f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 21 additions and 0 deletions

View file

@ -2,6 +2,8 @@
## Unversioned ## Unversioned
- Bugfix: Fixed visual glitch with smooth scrolling. (#2084)
## 2.3.0 ## 2.3.0
- Major: Added custom FrankerFaceZ VIP Badges. (#2628) - Major: Added custom FrankerFaceZ VIP Badges. (#2628)

View file

@ -188,6 +188,11 @@ qreal Scrollbar::getCurrentValue() const
return this->currentValue_; return this->currentValue_;
} }
const QPropertyAnimation &Scrollbar::getCurrentValueAnimation() const
{
return this->currentValueAnimation_;
}
void Scrollbar::offset(qreal value) void Scrollbar::offset(qreal value)
{ {
if (this->currentValueAnimation_.state() == QPropertyAnimation::Running) if (this->currentValueAnimation_.state() == QPropertyAnimation::Running)

View file

@ -44,6 +44,8 @@ public:
qreal getDesiredValue() const; qreal getDesiredValue() const;
qreal getCurrentValue() const; qreal getCurrentValue() const;
const QPropertyAnimation &getCurrentValueAnimation() const;
// offset the desired value without breaking smooth scolling // offset the desired value without breaking smooth scolling
void offset(qreal value); void offset(qreal value);
pajlada::Signals::NoArgSignal &getCurrentValueChanged(); pajlada::Signals::NoArgSignal &getCurrentValueChanged();

View file

@ -785,6 +785,18 @@ void ChannelView::messageAppended(MessagePtr &message,
this->lastMessageHasAlternateBackground_ = this->lastMessageHasAlternateBackground_ =
!this->lastMessageHasAlternateBackground_; !this->lastMessageHasAlternateBackground_;
if (!this->scrollBar_->isAtBottom() &&
this->scrollBar_->getCurrentValueAnimation().state() ==
QPropertyAnimation::Running)
{
QEventLoop loop;
connect(&this->scrollBar_->getCurrentValueAnimation(),
&QAbstractAnimation::stateChanged, &loop, &QEventLoop::quit);
loop.exec();
}
if (this->messages_.pushBack(MessageLayoutPtr(messageRef), deleted)) if (this->messages_.pushBack(MessageLayoutPtr(messageRef), deleted))
{ {
if (this->paused()) if (this->paused())