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)
|
||||
: 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*) {
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Reference in New Issue