diff --git a/src/widgets/graphicsview/qgraphicsview.cpp b/src/widgets/graphicsview/qgraphicsview.cpp index 338d5531082..37141c41667 100644 --- a/src/widgets/graphicsview/qgraphicsview.cpp +++ b/src/widgets/graphicsview/qgraphicsview.cpp @@ -613,6 +613,26 @@ void QGraphicsViewPrivate::updateScroll() dirtyScroll = false; } +/*! + \internal + + * don't start scrolling when a drag mode has been set + * don't start scrolling on a movable item +*/ +bool QGraphicsViewPrivate::canStartScrollingAt(const QPoint &startPos) const +{ + Q_Q(const QGraphicsView); + if (q->dragMode() != QGraphicsView::NoDrag) + return false; + + const QGraphicsItem *childItem = q->itemAt(startPos); + + if (childItem && (childItem->flags() & QGraphicsItem::ItemIsMovable)) + return false; + + return QAbstractScrollAreaPrivate::canStartScrollingAt(startPos); +} + /*! \internal */ diff --git a/src/widgets/graphicsview/qgraphicsview_p.h b/src/widgets/graphicsview/qgraphicsview_p.h index e877e6e8873..b58505b057b 100644 --- a/src/widgets/graphicsview/qgraphicsview_p.h +++ b/src/widgets/graphicsview/qgraphicsview_p.h @@ -117,6 +117,7 @@ public: QTransform matrix; qint64 scrollX, scrollY; void updateScroll(); + bool canStartScrollingAt(const QPoint &startPos) const override; qreal leftIndent; qreal topIndent; diff --git a/src/widgets/widgets/qabstractscrollarea.cpp b/src/widgets/widgets/qabstractscrollarea.cpp index 257cffda62c..3550df60d74 100644 --- a/src/widgets/widgets/qabstractscrollarea.cpp +++ b/src/widgets/widgets/qabstractscrollarea.cpp @@ -1361,28 +1361,13 @@ void QAbstractScrollArea::scrollContentsBy(int, int) viewport()->update(); } -bool QAbstractScrollAreaPrivate::canStartScrollingAt( const QPoint &startPos ) +bool QAbstractScrollAreaPrivate::canStartScrollingAt(const QPoint &startPos) const { - Q_Q(QAbstractScrollArea); - -#if QT_CONFIG(graphicsview) - // don't start scrolling when a drag mode has been set. - // don't start scrolling on a movable item. - if (QGraphicsView *view = qobject_cast(q)) { - if (view->dragMode() != QGraphicsView::NoDrag) - return false; - - QGraphicsItem *childItem = view->itemAt(startPos); - - if (childItem && (childItem->flags() & QGraphicsItem::ItemIsMovable)) - return false; - } -#endif + Q_Q(const QAbstractScrollArea); // don't start scrolling on a QAbstractSlider - if (qobject_cast(q->viewport()->childAt(startPos))) { + if (qobject_cast(q->viewport()->childAt(startPos))) return false; - } return true; } diff --git a/src/widgets/widgets/qabstractscrollarea_p.h b/src/widgets/widgets/qabstractscrollarea_p.h index 6d78b9db6de..5cba21c97c0 100644 --- a/src/widgets/widgets/qabstractscrollarea_p.h +++ b/src/widgets/widgets/qabstractscrollarea_p.h @@ -94,9 +94,8 @@ public: void init(); void layoutChildren(); void layoutChildren_helper(bool *needHorizontalScrollbar, bool *needVerticalScrollbar); - // ### Fix for 4.4, talk to Bjoern E or Girish. virtual void scrollBarPolicyChanged(Qt::Orientation, Qt::ScrollBarPolicy) {} - bool canStartScrollingAt( const QPoint &startPos ); + virtual bool canStartScrollingAt( const QPoint &startPos ) const; void flashScrollBars(); void setScrollBarTransient(QScrollBar *scrollBar, bool transient);