From 777bf7d8d9b11a988d368ac8cb79e9e8cc90585d Mon Sep 17 00:00:00 2001 From: John Preston Date: Wed, 6 Jun 2018 11:56:39 +0300 Subject: [PATCH] Fix video seeking. Regression was introduced in d0e854e9d8. Each time you hide() a widget its mousePress state is reset and mouseMoveEvent() / mouseReleaseEvent() handlers are never called. So you can't toggle (hide + show) widgets that are mouse-pressed. Fixes #4802. --- .../SourceFiles/media/view/media_clip_controller.cpp | 10 +++++++--- Telegram/SourceFiles/mediaview.cpp | 3 --- Telegram/SourceFiles/ui/widgets/continuous_sliders.cpp | 7 +++++++ Telegram/SourceFiles/ui/widgets/continuous_sliders.h | 2 ++ 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/Telegram/SourceFiles/media/view/media_clip_controller.cpp b/Telegram/SourceFiles/media/view/media_clip_controller.cpp index b1d0cace14..361d7f7427 100644 --- a/Telegram/SourceFiles/media/view/media_clip_controller.cpp +++ b/Telegram/SourceFiles/media/view/media_clip_controller.cpp @@ -79,17 +79,21 @@ template void Controller::startFading(Callback start) { if (!_fadeAnimation->animating()) { showChildren(); - _playbackSlider->hide(); + _playbackSlider->disablePaint(true); _childrenHidden = false; } start(); if (_fadeAnimation->animating()) { - hideChildren(); + for (const auto child : children()) { + if (child->isWidgetType() && child != _playbackSlider) { + static_cast(child)->hide(); + } + } _childrenHidden = true; } else { fadeFinished(); } - _playbackSlider->show(); + _playbackSlider->disablePaint(false); } void Controller::showAnimated() { diff --git a/Telegram/SourceFiles/mediaview.cpp b/Telegram/SourceFiles/mediaview.cpp index 06be4b2b5a..572781caaf 100644 --- a/Telegram/SourceFiles/mediaview.cpp +++ b/Telegram/SourceFiles/mediaview.cpp @@ -2961,9 +2961,6 @@ bool MediaView::eventFilter(QObject *obj, QEvent *e) { activate = true; } if (activate) { - if (_controlsState == ControlsHiding || _controlsState == ControlsHidden) { - int a = 0; - } activateControls(); } } diff --git a/Telegram/SourceFiles/ui/widgets/continuous_sliders.cpp b/Telegram/SourceFiles/ui/widgets/continuous_sliders.cpp index f9366c8f51..691461c4e5 100644 --- a/Telegram/SourceFiles/ui/widgets/continuous_sliders.cpp +++ b/Telegram/SourceFiles/ui/widgets/continuous_sliders.cpp @@ -195,7 +195,14 @@ float64 MediaSlider::getOverDuration() const { return _st.duration; } +void MediaSlider::disablePaint(bool disabled) { + _paintDisabled = disabled; +} + void MediaSlider::paintEvent(QPaintEvent *e) { + if (_paintDisabled) { + return; + } Painter p(this); PainterHighQualityEnabler hq(p); diff --git a/Telegram/SourceFiles/ui/widgets/continuous_sliders.h b/Telegram/SourceFiles/ui/widgets/continuous_sliders.h index 847ab226f1..92d9ca6de4 100644 --- a/Telegram/SourceFiles/ui/widgets/continuous_sliders.h +++ b/Telegram/SourceFiles/ui/widgets/continuous_sliders.h @@ -124,6 +124,7 @@ public: _alwaysDisplayMarker = alwaysDisplayMarker; update(); } + void disablePaint(bool disabled); protected: void paintEvent(QPaintEvent *e) override; @@ -134,6 +135,7 @@ private: const style::MediaSlider &_st; bool _alwaysDisplayMarker = false; + bool _paintDisabled = false; };