From c3bb99eb01001a01da7575b28d40ad0a46fd67e1 Mon Sep 17 00:00:00 2001 From: kornes <28986062+kornes@users.noreply.github.com> Date: Sat, 1 Jun 2024 10:12:48 +0000 Subject: [PATCH] Fix: tabs move animation for duplicated tabs (#5426) * fix: check endValue for running animations only * exit early when move is not needed * ref: remove useless `positionChangedAnimationRunning_` * check for parent notebook visibility instead * ref: rename `pos` param to `targetPos` --- CHANGELOG.md | 1 + src/widgets/helper/NotebookTab.cpp | 25 ++++++++++++++----------- src/widgets/helper/NotebookTab.hpp | 3 +-- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f5c324e..15e552c4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ - Minor: Colored usernames now update on the fly when changing the "Color @usernames" setting. (#5300) - Minor: Added `flags.action` filter variable, allowing you to filter on `/me` messages. (#5397) - Minor: Added the ability to duplicate tabs. (#5277) +- Bugfix: Fixed tab move animation occasionally failing to start after closing a tab. (#5426) - Bugfix: If a network request errors with 200 OK, Qt's error code is now reported instead of the HTTP status. (#5378) - Bugfix: Fixed a crash that could occur when logging was enabled in IRC servers that were removed. (#5419) - Dev: Update Windows build from Qt 6.5.0 to Qt 6.7.1. (#5420) diff --git a/src/widgets/helper/NotebookTab.cpp b/src/widgets/helper/NotebookTab.cpp index 1084abca..a5d8cfb6 100644 --- a/src/widgets/helper/NotebookTab.cpp +++ b/src/widgets/helper/NotebookTab.cpp @@ -15,6 +15,7 @@ #include "widgets/splits/SplitContainer.hpp" #include +#include #include #include #include @@ -407,22 +408,24 @@ void NotebookTab::hideTabXChanged() this->update(); } -void NotebookTab::moveAnimated(QPoint pos, bool animated) +void NotebookTab::moveAnimated(QPoint targetPos, bool animated) { - this->positionAnimationDesiredPoint_ = pos; + this->positionAnimationDesiredPoint_ = targetPos; - QWidget *w = this->window(); - - if ((w != nullptr && !w->isVisible()) || !animated || - !this->positionChangedAnimationRunning_) + if (this->pos() == targetPos) { - this->move(pos); - - this->positionChangedAnimationRunning_ = true; return; } - if (this->positionChangedAnimation_.endValue() == pos) + if (!animated || !this->notebook_->isVisible()) + { + this->move(targetPos); + return; + } + + if (this->positionChangedAnimation_.state() == + QAbstractAnimation::Running && + this->positionChangedAnimation_.endValue() == targetPos) { return; } @@ -430,7 +433,7 @@ void NotebookTab::moveAnimated(QPoint pos, bool animated) this->positionChangedAnimation_.stop(); this->positionChangedAnimation_.setDuration(75); this->positionChangedAnimation_.setStartValue(this->pos()); - this->positionChangedAnimation_.setEndValue(pos); + this->positionChangedAnimation_.setEndValue(targetPos); this->positionChangedAnimation_.start(); } diff --git a/src/widgets/helper/NotebookTab.hpp b/src/widgets/helper/NotebookTab.hpp index 6dc7d946..7f746fd7 100644 --- a/src/widgets/helper/NotebookTab.hpp +++ b/src/widgets/helper/NotebookTab.hpp @@ -65,7 +65,7 @@ public: void setHighlightsEnabled(const bool &newVal); bool hasHighlightsEnabled() const; - void moveAnimated(QPoint pos, bool animated = true); + void moveAnimated(QPoint targetPos, bool animated = true); QRect getDesiredRect() const; void hideTabXChanged(); @@ -108,7 +108,6 @@ private: int normalTabWidthForHeight(int height) const; QPropertyAnimation positionChangedAnimation_; - bool positionChangedAnimationRunning_ = false; QPoint positionAnimationDesiredPoint_; Notebook *notebook_;