diff options
author | Mitch Curtis <mitch.curtis@theqtcompany.com> | 2015-11-25 15:20:22 +0100 |
---|---|---|
committer | Mitch Curtis <mitch.curtis@theqtcompany.com> | 2015-12-08 09:40:41 +0000 |
commit | d1fbfbbab7f78e0a1050acce3540c02660a0d68f (patch) | |
tree | 9326407c3374dddc083fdc3dc58fe6ef43a58039 /src/quick/items/qquickitemview.cpp | |
parent | d9763f2565445ada2d11bde3c1f46b5217b17dab (diff) |
ListView: add keyNavigationEnabled property
It is useful for applications that need to selectively enable or
disable mouse and keyboard interaction.
[ChangeLog][QtQuick][ListView] added keyNavigationEnabled property to
allow mouse and keyboard interaction to be selectively
enabled/disabled.
Change-Id: I1cdb73e7be105bcc5c131e3cf2ae242dc66e8a65
Task-number: QTBUG-17051
Reviewed-by: J-P Nurmi <jpnurmi@theqtcompany.com>
Diffstat (limited to 'src/quick/items/qquickitemview.cpp')
-rw-r--r-- | src/quick/items/qquickitemview.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/quick/items/qquickitemview.cpp b/src/quick/items/qquickitemview.cpp index b618daf64b..1cc3046b60 100644 --- a/src/quick/items/qquickitemview.cpp +++ b/src/quick/items/qquickitemview.cpp @@ -448,6 +448,29 @@ void QQuickItemView::setWrapEnabled(bool wrap) emit keyNavigationWrapsChanged(); } +bool QQuickItemView::isKeyNavigationEnabled() const +{ + Q_D(const QQuickItemView); + return d->explicitKeyNavigationEnabled ? d->keyNavigationEnabled : d->interactive; +} + +void QQuickItemView::setKeyNavigationEnabled(bool keyNavigationEnabled) +{ + // TODO: default binding to "interactive" can be removed in Qt 6; it only exists for compatibility reasons. + Q_D(QQuickItemView); + const bool wasImplicit = !d->explicitKeyNavigationEnabled; + if (wasImplicit) + QObject::disconnect(this, &QQuickFlickable::interactiveChanged, this, &QQuickItemView::keyNavigationEnabledChanged); + + d->explicitKeyNavigationEnabled = true; + + // Ensure that we emit the change signal in case there is no different in value. + if (d->keyNavigationEnabled != keyNavigationEnabled || wasImplicit) { + d->keyNavigationEnabled = keyNavigationEnabled; + emit keyNavigationEnabledChanged(); + } +} + int QQuickItemView::cacheBuffer() const { Q_D(const QQuickItemView); @@ -1526,6 +1549,8 @@ QQuickItemViewPrivate::QQuickItemViewPrivate() , transitioner(0) , minExtent(0), maxExtent(0) , ownModel(false), wrap(false) + , keyNavigationEnabled(true) + , explicitKeyNavigationEnabled(false) , inLayout(false), inViewportMoved(false), forceLayout(false), currentIndexCleared(false) , haveHighlightRange(false), autoHighlight(true), highlightRangeStartValid(false), highlightRangeEndValid(false) , fillCacheBuffer(false), inRequest(false) @@ -1654,6 +1679,7 @@ void QQuickItemViewPrivate::init() Q_Q(QQuickItemView); q->setFlag(QQuickItem::ItemIsFocusScope); QObject::connect(q, SIGNAL(movementEnded()), q, SLOT(animStopped())); + QObject::connect(q, &QQuickFlickable::interactiveChanged, q, &QQuickItemView::keyNavigationEnabledChanged); q->setFlickableDirection(QQuickFlickable::VerticalFlick); } |