diff options
author | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2021-02-25 16:58:27 +0100 |
---|---|---|
committer | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2021-03-03 10:00:22 +0100 |
commit | 98db99657649d4668c766eaa36b8d29c58d19754 (patch) | |
tree | aef586eda9a58453472e51b66ff36dc52f63b320 /src/widgets/graphicsview/qgraphicsitem.cpp | |
parent | b1ad7f938e2f71288e65a8c9a86b732b89a6a345 (diff) |
Add nullptr checks to QGraphicsView classes
The styleInfo parameter defaults to nullptr, and the scene can evidently
be nullptr since we test for it before ungrabbing the mouse.
Fixes static analyzer warnings
fbd03604cc701651595a2ea33c5562b4 and
30fcb05194f3a2d121fc57b05e0ccf10
Pick-to: 6.1
Change-Id: I8e9d4fe4055115c366ada1cbb22a8f0839ba41da
Reviewed-by: David Skoland <david.skoland@qt.io>
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
Diffstat (limited to 'src/widgets/graphicsview/qgraphicsitem.cpp')
-rw-r--r-- | src/widgets/graphicsview/qgraphicsitem.cpp | 38 |
1 files changed, 20 insertions, 18 deletions
diff --git a/src/widgets/graphicsview/qgraphicsitem.cpp b/src/widgets/graphicsview/qgraphicsitem.cpp index e426e09adf..bad40b0cff 100644 --- a/src/widgets/graphicsview/qgraphicsitem.cpp +++ b/src/widgets/graphicsview/qgraphicsitem.cpp @@ -2652,23 +2652,25 @@ void QGraphicsItemPrivate::setEnabledHelper(bool newEnabled, bool explicitly, bo // Certain properties are dropped when an item is disabled. if (!newEnabled) { - if (scene && scene->mouseGrabberItem() == q_ptr) - q_ptr->ungrabMouse(); - if (q_ptr->hasFocus()) { - // Disabling the closest non-panel ancestor of the focus item - // causes focus to pop to the next item, otherwise it's cleared. - QGraphicsItem *focusItem = scene->focusItem(); - bool clear = true; - if (isWidget && !focusItem->isPanel() && q_ptr->isAncestorOf(focusItem)) { - do { - if (focusItem == q_ptr) { - clear = !static_cast<QGraphicsWidget *>(q_ptr)->focusNextPrevChild(true); - break; - } - } while ((focusItem = focusItem->parentWidget()) && !focusItem->isPanel()); + if (scene) { + if (scene->mouseGrabberItem() == q_ptr) + q_ptr->ungrabMouse(); + if (q_ptr->hasFocus()) { + // Disabling the closest non-panel ancestor of the focus item + // causes focus to pop to the next item, otherwise it's cleared. + QGraphicsItem *focusItem = scene->focusItem(); + bool clear = true; + if (isWidget && !focusItem->isPanel() && q_ptr->isAncestorOf(focusItem)) { + do { + if (focusItem == q_ptr) { + clear = !static_cast<QGraphicsWidget *>(q_ptr)->focusNextPrevChild(true); + break; + } + } while ((focusItem = focusItem->parentWidget()) && !focusItem->isPanel()); + } + if (clear) + q_ptr->clearFocus(); } - if (clear) - q_ptr->clearFocus(); } if (q_ptr->isSelected()) q_ptr->setSelected(false); @@ -7149,14 +7151,14 @@ void QGraphicsItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) if ((item->flags() & ItemIsMovable) && !QGraphicsItemPrivate::movableAncestorIsSelected(item)) { QPointF currentParentPos; QPointF buttonDownParentPos; - if (item->d_ptr->ancestorFlags & QGraphicsItemPrivate::AncestorIgnoresTransformations) { + if (view && (item->d_ptr->ancestorFlags & QGraphicsItemPrivate::AncestorIgnoresTransformations)) { // Items whose ancestors ignore transformations need to // map screen coordinates to local coordinates, then map // those to the parent. QTransform viewToItemTransform = (item->deviceTransform(view->viewportTransform())).inverted(); currentParentPos = mapToParent(viewToItemTransform.map(QPointF(view->mapFromGlobal(event->screenPos())))); buttonDownParentPos = mapToParent(viewToItemTransform.map(QPointF(view->mapFromGlobal(event->buttonDownScreenPos(Qt::LeftButton))))); - } else if (item->flags() & ItemIgnoresTransformations) { + } else if (view && (item->flags() & ItemIgnoresTransformations)) { // Root items that ignore transformations need to // calculate their diff by mapping viewport coordinates // directly to parent coordinates. |