VolumeSlider: Fix infinite loop when adjusting volume using mouse wheel
Fixes #1089
This commit is contained in:
parent
f353c022f6
commit
25323b4a3a
|
@ -47,6 +47,7 @@
|
||||||
SliderSlider::SliderSlider(const Qt::Orientation orientation, QWidget *parent, const int max)
|
SliderSlider::SliderSlider(const Qt::Orientation orientation, QWidget *parent, const int max)
|
||||||
: QSlider(orientation, parent),
|
: QSlider(orientation, parent),
|
||||||
sliding_(false),
|
sliding_(false),
|
||||||
|
wheeling_(false),
|
||||||
outside_(false),
|
outside_(false),
|
||||||
prev_value_(0) {
|
prev_value_(0) {
|
||||||
|
|
||||||
|
@ -62,6 +63,8 @@ void SliderSlider::wheelEvent(QWheelEvent *e) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wheeling_ = true;
|
||||||
|
|
||||||
// Position Slider (horizontal)
|
// Position Slider (horizontal)
|
||||||
int step = e->angleDelta().y() * 1500 / 18;
|
int step = e->angleDelta().y() * 1500 / 18;
|
||||||
int nval = qBound(minimum(), QSlider::value() + step, maximum());
|
int nval = qBound(minimum(), QSlider::value() + step, maximum());
|
||||||
|
@ -70,6 +73,8 @@ void SliderSlider::wheelEvent(QWheelEvent *e) {
|
||||||
|
|
||||||
emit SliderReleased(value());
|
emit SliderReleased(value());
|
||||||
|
|
||||||
|
wheeling_ = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SliderSlider::mouseMoveEvent(QMouseEvent *e) {
|
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!
|
// Don't adjust the slider while the user is dragging it!
|
||||||
|
|
||||||
if (!sliding_ || outside_) {
|
if ((!sliding_ || outside_) && !wheeling_) {
|
||||||
QSlider::setValue(adjustValue(value));
|
QSlider::setValue(adjustValue(value));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -310,10 +315,14 @@ void VolumeSlider::slideEvent(QMouseEvent *e) {
|
||||||
|
|
||||||
void VolumeSlider::wheelEvent(QWheelEvent *e) {
|
void VolumeSlider::wheelEvent(QWheelEvent *e) {
|
||||||
|
|
||||||
|
wheeling_ = true;
|
||||||
|
|
||||||
const int step = e->angleDelta().y() / (e->angleDelta().x() == 0 ? 30 : -30);
|
const int step = e->angleDelta().y() / (e->angleDelta().x() == 0 ? 30 : -30);
|
||||||
QSlider::setValue(SliderSlider::value() + step);
|
QSlider::setValue(SliderSlider::value() + step);
|
||||||
emit SliderReleased(value());
|
emit SliderReleased(value());
|
||||||
|
|
||||||
|
wheeling_ = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void VolumeSlider::paintEvent(QPaintEvent*) {
|
void VolumeSlider::paintEvent(QPaintEvent*) {
|
||||||
|
|
|
@ -62,6 +62,7 @@ class SliderSlider : public QSlider {
|
||||||
virtual void slideEvent(QMouseEvent*);
|
virtual void slideEvent(QMouseEvent*);
|
||||||
|
|
||||||
bool sliding_;
|
bool sliding_;
|
||||||
|
bool wheeling_;
|
||||||
|
|
||||||
/// we flip the value for vertical sliders
|
/// we flip the value for vertical sliders
|
||||||
int adjustValue(int v) const {
|
int adjustValue(int v) const {
|
||||||
|
|
Loading…
Reference in New Issue