From d1fbfbbab7f78e0a1050acce3540c02660a0d68f Mon Sep 17 00:00:00 2001 From: Mitch Curtis Date: Wed, 25 Nov 2015 15:20:22 +0100 Subject: 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 --- src/quick/items/qquickitemview.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'src/quick/items/qquickitemview.cpp') 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); } -- cgit v1.2.3