From 21fa3264e3b1281cb8dc46a40c496a77fc30d964 Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 21 Jul 2023 16:40:20 +0400 Subject: [PATCH] Pause video while caption is expanded. --- .../media_stories_caption_full_view.cpp | 8 +++++-- .../stories/media_stories_controller.cpp | 22 +++++++++++++++---- .../media/stories/media_stories_controller.h | 2 ++ .../media/stories/media_stories_view.cpp | 4 ++++ .../media/stories/media_stories_view.h | 1 + .../media/view/media_view_overlay_widget.cpp | 11 ++++++++-- 6 files changed, 40 insertions(+), 8 deletions(-) diff --git a/Telegram/SourceFiles/media/stories/media_stories_caption_full_view.cpp b/Telegram/SourceFiles/media/stories/media_stories_caption_full_view.cpp index b301ced92..6506dd62c 100644 --- a/Telegram/SourceFiles/media/stories/media_stories_caption_full_view.cpp +++ b/Telegram/SourceFiles/media/stories/media_stories_caption_full_view.cpp @@ -68,13 +68,17 @@ void CaptionFullView::resizeEvent(QResizeEvent *e) { void CaptionFullView::keyPressEvent(QKeyEvent *e) { if (e->key() == Qt::Key_Escape) { - _close(); + if (const auto onstack = _close) { + onstack(); + } } } void CaptionFullView::mousePressEvent(QMouseEvent *e) { if (e->button() == Qt::LeftButton) { - _close(); + if (const auto onstack = _close) { + onstack(); + } } } diff --git a/Telegram/SourceFiles/media/stories/media_stories_controller.cpp b/Telegram/SourceFiles/media/stories/media_stories_controller.cpp index f32aec6c6..bb9480c26 100644 --- a/Telegram/SourceFiles/media/stories/media_stories_controller.cpp +++ b/Telegram/SourceFiles/media/stories/media_stories_controller.cpp @@ -345,10 +345,11 @@ Controller::~Controller() { } void Controller::updateContentFaded() { - if (_contentFaded == _replyActive) { + const auto faded = _replyActive || _captionFullView || _captionExpanded; + if (_contentFaded == faded) { return; } - _contentFaded = _replyActive; + _contentFaded = faded; _contentFadeAnimation.start( [=] { _delegate->storiesRepaint(); }, _contentFaded ? 0. : 1., @@ -570,16 +571,24 @@ TextWithEntities Controller::captionText() const { return _captionText; } +void Controller::setCaptionExpanded(bool expanded) { + if (_captionExpanded == expanded) { + return; + } + _captionExpanded = expanded; + updateContentFaded(); +} + void Controller::showFullCaption() { if (_captionText.empty()) { return; } - togglePaused(true); _captionFullView = std::make_unique( wrap(), &_delegate->storiesShow()->session(), _captionText, - [=] { togglePaused(false); }); + [=] { _captionFullView = nullptr; updateContentFaded(); }); + updateContentFaded(); } std::shared_ptr Controller::uiShow() const { @@ -796,6 +805,9 @@ void Controller::show( _captionText = story->caption(); _captionFullView = nullptr; + _captionExpanded = false; + _contentFaded = false; + _contentFadeAnimation.stop(); const auto document = story->document(); _header->show({ .user = user, @@ -942,6 +954,8 @@ void Controller::updatePlayingAllowed() { && _windowActive && !_paused && !_replyActive + && !_captionFullView + && !_captionExpanded && !_layerShown && !_menuShown); } diff --git a/Telegram/SourceFiles/media/stories/media_stories_controller.h b/Telegram/SourceFiles/media/stories/media_stories_controller.h index d234d540c..a7dd60da2 100644 --- a/Telegram/SourceFiles/media/stories/media_stories_controller.h +++ b/Telegram/SourceFiles/media/stories/media_stories_controller.h @@ -122,6 +122,7 @@ public: [[nodiscard]] bool closeByClickAt(QPoint position) const; [[nodiscard]] Data::FileOrigin fileOrigin() const; [[nodiscard]] TextWithEntities captionText() const; + void setCaptionExpanded(bool expanded); void showFullCaption(); [[nodiscard]] std::shared_ptr uiShow() const; @@ -241,6 +242,7 @@ private: Ui::Animations::Simple _contentFadeAnimation; bool _contentFaded = false; + bool _captionExpanded = false; bool _windowActive = false; bool _replyFocused = false; bool _replyActive = false; diff --git a/Telegram/SourceFiles/media/stories/media_stories_view.cpp b/Telegram/SourceFiles/media/stories/media_stories_view.cpp index 240a39b4e..159999281 100644 --- a/Telegram/SourceFiles/media/stories/media_stories_view.cpp +++ b/Telegram/SourceFiles/media/stories/media_stories_view.cpp @@ -123,6 +123,10 @@ TextWithEntities View::captionText() const { return _controller->captionText(); } +void View::setCaptionExpanded(bool expanded) { + _controller->setCaptionExpanded(expanded); +} + void View::showFullCaption() { _controller->showFullCaption(); } diff --git a/Telegram/SourceFiles/media/stories/media_stories_view.h b/Telegram/SourceFiles/media/stories/media_stories_view.h index 099689e31..57e38e70b 100644 --- a/Telegram/SourceFiles/media/stories/media_stories_view.h +++ b/Telegram/SourceFiles/media/stories/media_stories_view.h @@ -64,6 +64,7 @@ public: [[nodiscard]] SiblingView sibling(SiblingType type) const; [[nodiscard]] Data::FileOrigin fileOrigin() const; [[nodiscard]] TextWithEntities captionText() const; + void setCaptionExpanded(bool expanded); void showFullCaption(); void updatePlayback(const Player::TrackState &state); diff --git a/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp b/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp index 9a58198e3..32fd05e73 100644 --- a/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp +++ b/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp @@ -486,6 +486,10 @@ OverlayWidget::OverlayWidget() return base::EventFilterResult::Cancel; } else if (type == QEvent::ThemeChange && Platform::IsLinux()) { _window->setWindowIcon(Window::CreateIcon(_session)); + } else if (type == QEvent::FocusOut) { + if (const auto popup = QApplication::activePopupWidget()) { + int a = popup->x(); + } } return base::EventFilterResult::Continue; }); @@ -1384,8 +1388,9 @@ void OverlayWidget::refreshCaptionGeometry() { _captionFitsIfExpanded = _stories && (wantedHeight <= maxExpandedHeight); _captionShownFull = (wantedHeight <= maxCollapsedHeight); - if (_captionShownFull) { + if (_captionShownFull && _captionExpanded && _stories) { _captionExpanded = false; + _stories->setCaptionExpanded(false); } _captionRect = QRect( (width() - captionWidth) / 2, @@ -3120,7 +3125,7 @@ void OverlayWidget::setCursor(style::cursor cursor) { } void OverlayWidget::setFocus() { - _widget->setFocus(); + _body->setFocus(); } bool OverlayWidget::takeFocusFrom(not_null window) const { @@ -5570,10 +5575,12 @@ ClickHandlerPtr OverlayWidget::ensureCaptionExpandLink() { return; } else if (_captionExpanded) { _captionExpanded = false; + _stories->setCaptionExpanded(false); refreshCaptionGeometry(); update(); } else if (_captionFitsIfExpanded) { _captionExpanded = true; + _stories->setCaptionExpanded(true); refreshCaptionGeometry(); update(); } else {