VolumeSlider: Fix infinite loop when adjusting volume using mouse wheel

Fixes #1089
This commit is contained in:
Jonas Kvinge 2023-01-01 17:46:26 +01:00
parent f353c022f6
commit 25323b4a3a
2 changed files with 11 additions and 1 deletions

View File

@ -47,6 +47,7 @@
SliderSlider::SliderSlider(const Qt::Orientation orientation, QWidget *parent, const int max)
: QSlider(orientation, parent),
sliding_(false),
wheeling_(false),
outside_(false),
prev_value_(0) {
@ -62,6 +63,8 @@ void SliderSlider::wheelEvent(QWheelEvent *e) {
return;
}
wheeling_ = true;
// Position Slider (horizontal)
int step = e->angleDelta().y() * 1500 / 18;
int nval = qBound(minimum(), QSlider::value() + step, maximum());
@ -70,6 +73,8 @@ void SliderSlider::wheelEvent(QWheelEvent *e) {
emit SliderReleased(value());
wheeling_ = false;
}
void SliderSlider::mouseMoveEvent(QMouseEvent *e) {
@ -151,7 +156,7 @@ void SliderSlider::setValue(int value) {
// Don't adjust the slider while the user is dragging it!
if (!sliding_ || outside_) {
if ((!sliding_ || outside_) && !wheeling_) {
QSlider::setValue(adjustValue(value));
}
else {
@ -310,10 +315,14 @@ void VolumeSlider::slideEvent(QMouseEvent *e) {
void VolumeSlider::wheelEvent(QWheelEvent *e) {
wheeling_ = true;
const int step = e->angleDelta().y() / (e->angleDelta().x() == 0 ? 30 : -30);
QSlider::setValue(SliderSlider::value() + step);
emit SliderReleased(value());
wheeling_ = false;
}
void VolumeSlider::paintEvent(QPaintEvent*) {

View File

@ -62,6 +62,7 @@ class SliderSlider : public QSlider {
virtual void slideEvent(QMouseEvent*);
bool sliding_;
bool wheeling_;
/// we flip the value for vertical sliders
int adjustValue(int v) const {