summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/widgets/widgets/qscrollbar.cpp20
-rw-r--r--src/widgets/widgets/qscrollbar.h3
-rw-r--r--tests/auto/widgets/widgets/qscrollbar/tst_qscrollbar.cpp19
3 files changed, 34 insertions, 8 deletions
diff --git a/src/widgets/widgets/qscrollbar.cpp b/src/widgets/widgets/qscrollbar.cpp
index efb17afedb..9ef56b7f95 100644
--- a/src/widgets/widgets/qscrollbar.cpp
+++ b/src/widgets/widgets/qscrollbar.cpp
@@ -476,8 +476,18 @@ bool QScrollBar::event(QEvent *event)
if (const QHoverEvent *he = static_cast<const QHoverEvent *>(event))
d_func()->updateHoverControl(he->pos());
break;
+ default:
+ break;
+ }
+ return QAbstractSlider::event(event);
+}
+
+/*!
+ \reimp
+*/
#ifndef QT_NO_WHEELEVENT
- case QEvent::Wheel: {
+void QScrollBar::wheelEvent(QWheelEvent *event)
+{
event->ignore();
// override wheel event without adding virtual function override
QWheelEvent *ev = static_cast<QWheelEvent *>(event);
@@ -492,14 +502,8 @@ bool QScrollBar::event(QEvent *event)
Q_D(QScrollBar);
if (d->scrollByDelta(ev->orientation(), ev->modifiers(), delta))
event->accept();
- return true;
- }
-#endif
- default:
- break;
- }
- return QAbstractSlider::event(event);
}
+#endif
/*!
\reimp
diff --git a/src/widgets/widgets/qscrollbar.h b/src/widgets/widgets/qscrollbar.h
index 95943f2676..48863616ff 100644
--- a/src/widgets/widgets/qscrollbar.h
+++ b/src/widgets/widgets/qscrollbar.h
@@ -67,6 +67,9 @@ public:
bool event(QEvent *event);
protected:
+#ifndef QT_NO_WHEELEVENT
+ void wheelEvent(QWheelEvent *);
+#endif
void paintEvent(QPaintEvent *);
void mousePressEvent(QMouseEvent *);
void mouseReleaseEvent(QMouseEvent *);
diff --git a/tests/auto/widgets/widgets/qscrollbar/tst_qscrollbar.cpp b/tests/auto/widgets/widgets/qscrollbar/tst_qscrollbar.cpp
index 88c498cf07..4940372db9 100644
--- a/tests/auto/widgets/widgets/qscrollbar/tst_qscrollbar.cpp
+++ b/tests/auto/widgets/widgets/qscrollbar/tst_qscrollbar.cpp
@@ -56,6 +56,9 @@ public slots:
private slots:
void scrollSingleStep();
void task_209492();
+#ifndef QT_NO_WHEELEVENT
+ void QTBUG_27308();
+#endif
private:
QScrollBar *testWidget;
@@ -143,5 +146,21 @@ void tst_QScrollBar::task_209492()
QCOMPARE(spy.count(), 1);
}
+#ifndef QT_NO_WHEELEVENT
+#define WHEEL_DELTA 120 // copied from tst_QAbstractSlider / tst_QComboBox
+void tst_QScrollBar::QTBUG_27308()
+{
+ // https://bugreports.qt-project.org/browse/QTBUG-27308
+ // Check that a disabled scrollbar doesn't react on wheel events anymore
+
+ testWidget->setValue(testWidget->minimum());
+ testWidget->setEnabled(false);
+ QWheelEvent event(testWidget->rect().center(),
+ -WHEEL_DELTA, Qt::NoButton, Qt::NoModifier, testWidget->orientation());
+ qApp->sendEvent(testWidget, &event);
+ QCOMPARE(testWidget->value(), testWidget->minimum());
+}
+#endif
+
QTEST_MAIN(tst_QScrollBar)
#include "tst_qscrollbar.moc"