From bab4cfa5aaac7fb50c13809d37eb51f76538bb67 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Thu, 24 Dec 2020 13:53:19 +0300 Subject: [PATCH] Fixed crash in mute button disconnect with disabled animations. --- ui/widgets/call_mute_button.cpp | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/ui/widgets/call_mute_button.cpp b/ui/widgets/call_mute_button.cpp index 15e3820..6cd6958 100644 --- a/ui/widgets/call_mute_button.cpp +++ b/ui/widgets/call_mute_button.cpp @@ -553,25 +553,33 @@ void CallMuteButton::init() { }, _centerLabel->lifetime()); _centerLabel->setAttribute(Qt::WA_TransparentForMouseEvents); - _radialInfo.rawShowProgress.value( - ) | rpl::start_with_next([=](float64 value) { + rpl::combine( + _radialInfo.rawShowProgress.value(), + anim::Disables() + ) | rpl::start_with_next([=](float64 value, bool disabled) { auto &info = _radialInfo; info.realShowProgress = (1. - value) / kRadialEndPartAnimation; - if (((value == 0.) || anim::Disabled()) && _radial) { + const auto guard = gsl::finally([&] { + _content->update(); + }); + + if (((value == 0.) || disabled) && _radial) { _radial->stop(); _radial = nullptr; return; } - if ((value > 0.) && !anim::Disabled() && !_radial) { + if ((value > 0.) && !disabled && !_radial) { _radial = std::make_unique( [=] { _content->update(); }, _radialInfo.st); _radial->start(); } if ((info.realShowProgress < 1.) && !info.isDirectionToShow) { - _radial->stop(anim::type::instant); - _radial->start(); + if (_radial) { + _radial->stop(anim::type::instant); + _radial->start(); + } info.state = std::nullopt; return; }