diff --git a/Telegram/SourceFiles/media/player/media_player_volume_controller.cpp b/Telegram/SourceFiles/media/player/media_player_volume_controller.cpp index 37d058e8b5..53d207a28f 100644 --- a/Telegram/SourceFiles/media/player/media_player_volume_controller.cpp +++ b/Telegram/SourceFiles/media/player/media_player_volume_controller.cpp @@ -57,6 +57,10 @@ void VolumeController::setIsVertical(bool vertical) { _slider->setAlwaysDisplayMarker(vertical); } +void VolumeController::outerWheelEvent(not_null e) { + QGuiApplication::sendEvent(_slider.data(), e); +} + void VolumeController::resizeEvent(QResizeEvent *e) { _slider->setGeometry(rect()); } @@ -78,7 +82,8 @@ void VolumeController::applyVolumeChange(float64 volume) { void PrepareVolumeDropdown( not_null dropdown, - not_null controller) { + not_null controller, + rpl::producer> outerWheelEvents) { const auto volume = Ui::CreateChild( dropdown.get(), controller); @@ -98,6 +103,12 @@ void PrepareVolumeDropdown( - ((st::mediaPlayerVolumeSize.width() - st::mediaPlayerPanelPlayback.width) / 2))); }, volume->lifetime()); + + std::move( + outerWheelEvents + ) | rpl::start_with_next([=](not_null e) { + volume->outerWheelEvent(e); + }, volume->lifetime()); } } // namespace Media::Player diff --git a/Telegram/SourceFiles/media/player/media_player_volume_controller.h b/Telegram/SourceFiles/media/player/media_player_volume_controller.h index 05a9da23b5..49b4c8cb47 100644 --- a/Telegram/SourceFiles/media/player/media_player_volume_controller.h +++ b/Telegram/SourceFiles/media/player/media_player_volume_controller.h @@ -10,6 +10,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/rp_widget.h" #include "base/object_ptr.h" +class QWheelEvent; + namespace Ui { class MediaSlider; } // namespace Ui @@ -29,6 +31,7 @@ public: not_null controller); void setIsVertical(bool vertical); + void outerWheelEvent(not_null e); protected: void resizeEvent(QResizeEvent *e) override; @@ -43,6 +46,7 @@ private: void PrepareVolumeDropdown( not_null dropdown, - not_null controller); + not_null controller, + rpl::producer> outerWheelEvents); } // namespace Media::Player diff --git a/Telegram/SourceFiles/media/player/media_player_widget.cpp b/Telegram/SourceFiles/media/player/media_player_widget.cpp index 43ac0a60c6..fbebd36c50 100644 --- a/Telegram/SourceFiles/media/player/media_player_widget.cpp +++ b/Telegram/SourceFiles/media/player/media_player_widget.cpp @@ -515,7 +515,12 @@ Widget::Widget( handleSongUpdate(state); }, lifetime()); - PrepareVolumeDropdown(_volume.get(), controller); + PrepareVolumeDropdown(_volume.get(), controller, _volumeToggle->events( + ) | rpl::filter([=](not_null e) { + return (e->type() == QEvent::Wheel); + }) | rpl::map([=](not_null e) { + return not_null{ static_cast(e.get()) }; + })); _volumeToggle->installEventFilter(_volume.get()); _volume->events( ) | rpl::start_with_next([=](not_null e) {