diff --git a/src/libaudqt/volumebutton.cc b/src/libaudqt/volumebutton.cc index 102812818..35b099985 100644 --- a/src/libaudqt/volumebutton.cc +++ b/src/libaudqt/volumebutton.cc @@ -21,6 +21,7 @@ #include #include +#include #include #include #include @@ -39,6 +40,10 @@ class VolumeButton : public QToolButton public: VolumeButton(QWidget * parent = nullptr); +protected: + void mousePressEvent(QMouseEvent * e) override; + void wheelEvent(QWheelEvent * e) override; + private: void updateDelta(); void updateIcon(int val); @@ -46,13 +51,12 @@ class VolumeButton : public QToolButton void setVolume(int val); void setUpButton(QToolButton * button, int dir); - void wheelEvent(QWheelEvent * e); - QMenu m_menu; QWidgetAction m_action; QWidget m_container; QToolButton m_buttons[2]; QSlider m_slider; + int m_old_volume = 0; int m_scroll_delta = 0; HookReceiver update_hook{"set volume_delta", this, @@ -154,6 +158,24 @@ void VolumeButton::setUpButton(QToolButton * button, int dir) }); } +void VolumeButton::mousePressEvent(QMouseEvent * e) +{ + /* (un)mute with middle mouse button */ + if (e->button() == Qt::MiddleButton) + { + int current_volume = aud_drct_get_volume_main(); + if (current_volume) + { + m_old_volume = current_volume; + aud_drct_set_volume_main(0); + } + else + aud_drct_set_volume_main(m_old_volume); + } + + QToolButton::mousePressEvent(e); +} + void VolumeButton::wheelEvent(QWheelEvent * e) { m_scroll_delta += e->angleDelta().y();