aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items/qquickitemview.cpp
diff options
context:
space:
mode:
authorMitch Curtis <mitch.curtis@theqtcompany.com>2015-11-25 15:20:22 +0100
committerMitch Curtis <mitch.curtis@theqtcompany.com>2015-12-08 09:40:41 +0000
commitd1fbfbbab7f78e0a1050acce3540c02660a0d68f (patch)
tree9326407c3374dddc083fdc3dc58fe6ef43a58039 /src/quick/items/qquickitemview.cpp
parentd9763f2565445ada2d11bde3c1f46b5217b17dab (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.cpp26
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);
}