From 8b8e53f7267911c4f406f5c6f54e4a60a0f32112 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Sat, 16 Dec 2017 22:55:11 +0100 Subject: QScroller: maintain activeScrollers as a QList, not a QSet The number of active scrollers is probably very low, so O(N) vs. O(1) search can be neglected, compared to the higher cost of allocating and iterating a QSet. The tipping point is that the public API uses QList, and the QSet needs to be converted toList() on each (external) access. Just use a QList. Change-Id: I5f0b37761923dc94d6dbbbf92973da73f5335e4a Reviewed-by: Friedemann Kleint --- src/widgets/util/qscroller.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/util/qscroller.cpp b/src/widgets/util/qscroller.cpp index 8a1bcdae05..50351ea568 100644 --- a/src/widgets/util/qscroller.cpp +++ b/src/widgets/util/qscroller.cpp @@ -281,10 +281,9 @@ private: */ typedef QMap ScrollerHash; -typedef QSet ScrollerSet; Q_GLOBAL_STATIC(ScrollerHash, qt_allScrollers) -Q_GLOBAL_STATIC(ScrollerSet, qt_activeScrollers) +Q_GLOBAL_STATIC(QList, qt_activeScrollers) /*! Returns \c true if a QScroller object was already created for \a target; \c false otherwise. @@ -335,7 +334,7 @@ const QScroller *QScroller::scroller(const QObject *target) */ QList QScroller::activeScrollers() { - return qt_activeScrollers()->toList(); + return *qt_activeScrollers(); } /*! @@ -512,7 +511,7 @@ QScroller::~QScroller() d->recognizer = 0; #endif qt_allScrollers()->remove(d->target); - qt_activeScrollers()->remove(this); + qt_activeScrollers()->removeOne(this); delete d_ptr; } @@ -1768,9 +1767,9 @@ void QScrollerPrivate::setState(QScroller::State newstate) firstScroll = true; } if (state == QScroller::Dragging || state == QScroller::Scrolling) - qt_activeScrollers()->insert(q); + qt_activeScrollers()->push_back(q); else - qt_activeScrollers()->remove(q); + qt_activeScrollers()->removeOne(q); emit q->stateChanged(state); } -- cgit v1.2.3