aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates2
diff options
context:
space:
mode:
authorJan Arve Sæther <jan-arve.saether@qt.io>2020-12-10 22:57:31 +0100
committerJan Arve Sæther <jan-arve.saether@qt.io>2020-12-11 15:55:54 +0100
commit121c923d46a1ccfc10e3d0094b1db9510fd08166 (patch)
tree8d15ea054a89118e6f5e8647f313459cdca023a4 /src/quicktemplates2
parentd30636bc7082ebd707859a198360fabe03cacf40 (diff)
Do not crash because of missing context on the indicator buttons
This now follows the same pattern as QQuickSpinBox does it for it's own indicator buttons. a11y::ScrollBar crashed because of this Change-Id: I5669fa2bf130b37ad46573aae5c6bebd8e0d0434 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src/quicktemplates2')
-rw-r--r--src/quicktemplates2/qquickscrollbar.cpp28
-rw-r--r--src/quicktemplates2/qquickscrollbar_p.h3
2 files changed, 27 insertions, 4 deletions
diff --git a/src/quicktemplates2/qquickscrollbar.cpp b/src/quicktemplates2/qquickscrollbar.cpp
index 4c89b330..cc338b65 100644
--- a/src/quicktemplates2/qquickscrollbar.cpp
+++ b/src/quicktemplates2/qquickscrollbar.cpp
@@ -388,6 +388,9 @@ void QQuickScrollBarPrivate::updateHover(const QPointF &pos, std::optional<bool>
QQuickScrollBar::QQuickScrollBar(QQuickItem *parent)
: QQuickControl(*(new QQuickScrollBarPrivate), parent)
{
+ Q_D(QQuickScrollBar);
+ d->decreaseVisual = new QQuickIndicatorButton(this);
+ d->increaseVisual = new QQuickIndicatorButton(this);
setKeepMouseGrab(true);
setAcceptedMouseButtons(Qt::LeftButton);
#if QT_CONFIG(quicktemplates2_multitouch)
@@ -771,16 +774,12 @@ qreal QQuickScrollBar::visualPosition() const
QQuickIndicatorButton *QQuickScrollBar::decreaseVisual()
{
Q_D(QQuickScrollBar);
- if (!d->decreaseVisual)
- d->decreaseVisual = new QQuickIndicatorButton(this);
return d->decreaseVisual;
}
QQuickIndicatorButton *QQuickScrollBar::increaseVisual()
{
Q_D(QQuickScrollBar);
- if (!d->increaseVisual)
- d->increaseVisual = new QQuickIndicatorButton(this);
return d->increaseVisual;
}
@@ -855,6 +854,27 @@ void QQuickScrollBar::hoverLeaveEvent(QHoverEvent *event)
d->updateHover(QPoint(), false); //position is not needed when we force it to unhover
}
+void QQuickScrollBar::classBegin()
+{
+ Q_D(QQuickScrollBar);
+ QQuickControl::classBegin();
+
+ QQmlContext *context = qmlContext(this);
+ if (context) {
+ QQmlEngine::setContextForObject(d->decreaseVisual, context);
+ QQmlEngine::setContextForObject(d->increaseVisual, context);
+ }
+}
+
+void QQuickScrollBar::componentComplete()
+{
+ Q_D(QQuickScrollBar);
+ QQuickIndicatorButtonPrivate::get(d->decreaseVisual)->executeIndicator(true);
+ QQuickIndicatorButtonPrivate::get(d->increaseVisual)->executeIndicator(true);
+
+ QQuickControl::componentComplete();
+}
+
#if QT_CONFIG(accessibility)
void QQuickScrollBar::accessibilityActiveChanged(bool active)
{
diff --git a/src/quicktemplates2/qquickscrollbar_p.h b/src/quicktemplates2/qquickscrollbar_p.h
index b35575b9..b7de290b 100644
--- a/src/quicktemplates2/qquickscrollbar_p.h
+++ b/src/quicktemplates2/qquickscrollbar_p.h
@@ -174,6 +174,9 @@ protected:
void hoverLeaveEvent(QHoverEvent *event) override;
#endif
+ void classBegin() override;
+ void componentComplete() override;
+
#if QT_CONFIG(accessibility)
void accessibilityActiveChanged(bool active) override;
QAccessible::Role accessibleRole() const override;