diff --git a/src/Gui/NavigationAnimation.h b/src/Gui/NavigationAnimation.h index b60da2e4b2..3eddf2b90b 100644 --- a/src/Gui/NavigationAnimation.h +++ b/src/Gui/NavigationAnimation.h @@ -34,9 +34,14 @@ namespace Gui class GuiExport NavigationAnimation : protected QVariantAnimation { + Q_OBJECT public: + using QVariantAnimation::QObject; explicit NavigationAnimation(NavigationStyle* navigation); +Q_SIGNALS: + void interrupted(); + protected: NavigationStyle* navigation; diff --git a/src/Gui/NavigationAnimator.cpp b/src/Gui/NavigationAnimator.cpp index 68b6c59b18..4f3a73eff4 100644 --- a/src/Gui/NavigationAnimator.cpp +++ b/src/Gui/NavigationAnimator.cpp @@ -68,6 +68,10 @@ bool NavigationAnimator::startAndWait(const std::shared_ptr bool finished = true; QEventLoop loop; connect(animation.get(), &NavigationAnimation::finished, &loop, &QEventLoop::quit); + connect(animation.get(), &NavigationAnimation::interrupted, &loop, [&finished, &loop]() { + finished = false; + loop.quit(); + }); start(animation); loop.exec(); return finished; @@ -80,6 +84,7 @@ void NavigationAnimator::stop() { if (activeAnimation && activeAnimation->state() != QAbstractAnimation::State::Stopped) { disconnect(activeAnimation.get(), &NavigationAnimation::finished, 0, 0); + Q_EMIT activeAnimation->interrupted(); activeAnimation->stop(); activeAnimation->onStop(false); activeAnimation.reset();