diff --git a/Telegram/SourceFiles/media/view/media_view_pip.cpp b/Telegram/SourceFiles/media/view/media_view_pip.cpp index 8d59f2b827..bde3895bb0 100644 --- a/Telegram/SourceFiles/media/view/media_view_pip.cpp +++ b/Telegram/SourceFiles/media/view/media_view_pip.cpp @@ -734,6 +734,9 @@ void Pip::setupPanel() { case QEvent::MouseButtonRelease: handleMouseRelease(static_cast(e.get())->button()); break; + case QEvent::MouseButtonDblClick: + handleDoubleClick(static_cast(e.get())->button()); + break; } }, _panel.lifetime()); } @@ -797,9 +800,11 @@ void Pip::handleMouseRelease(Qt::MouseButton button) { || _panel.dragging() || !pressed || *pressed != _over) { + _lastHandledPress = std::nullopt; return; } + _lastHandledPress = _over; switch (_over) { case OverState::Close: _panel.close(); break; case OverState::Enlarge: _closeAndContinue(); break; @@ -807,6 +812,16 @@ void Pip::handleMouseRelease(Qt::MouseButton button) { } } +void Pip::handleDoubleClick(Qt::MouseButton button) { + if (_over != OverState::Other + || !_lastHandledPress + || *_lastHandledPress != _over) { + return; + } + playbackPauseResume(); // Un-click the first click. + _closeAndContinue(); +} + void Pip::setupButtons() { _close.state = OverState::Close; _enlarge.state = OverState::Enlarge; diff --git a/Telegram/SourceFiles/media/view/media_view_pip.h b/Telegram/SourceFiles/media/view/media_view_pip.h index 7ad9170294..d59294f113 100644 --- a/Telegram/SourceFiles/media/view/media_view_pip.h +++ b/Telegram/SourceFiles/media/view/media_view_pip.h @@ -153,6 +153,7 @@ private: void handleMouseMove(QPoint position); void handleMousePress(Qt::MouseButton button); void handleMouseRelease(Qt::MouseButton button); + void handleDoubleClick(Qt::MouseButton button); void handleLeave(); void handleClose(); @@ -166,6 +167,7 @@ private: bool _showPause = false; OverState _over = OverState::None; std::optional _pressed; + std::optional _lastHandledPress; Button _close; Button _enlarge; Button _playback;