diff options
Diffstat (limited to 'src/quicktemplates2/qquickpopup.cpp')
-rw-r--r-- | src/quicktemplates2/qquickpopup.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/quicktemplates2/qquickpopup.cpp b/src/quicktemplates2/qquickpopup.cpp index 4a5e98113d..fa84580777 100644 --- a/src/quicktemplates2/qquickpopup.cpp +++ b/src/quicktemplates2/qquickpopup.cpp @@ -324,7 +324,8 @@ bool QQuickPopupPrivate::tryClose(const QPointF &pos, QQuickPopup::ClosePolicy f const bool onOutside = closePolicy & (flags & outsideFlags); const bool onOutsideParent = closePolicy & (flags & outsideParentFlags); - if (onOutside || onOutsideParent) { + + if ((onOutside && outsidePressed) || (onOutsideParent && outsideParentPressed)) { if (!contains(pos) && (!dimmer || dimmer->contains(dimmer->mapFromScene(pos)))) { if (!onOutsideParent || !parentItem || !parentItem->contains(parentItem->mapFromScene(pos))) { closeOrReject(); @@ -368,6 +369,8 @@ bool QQuickPopupPrivate::handlePress(QQuickItem *item, const QPointF &point, ulo { Q_UNUSED(timestamp); pressPoint = point; + outsidePressed = !contains(point); + outsideParentPressed = outsidePressed && parentItem && !parentItem->contains(parentItem->mapFromScene(point)); tryClose(point, QQuickPopup::CloseOnPressOutside | QQuickPopup::CloseOnPressOutsideParent); return blockInput(item, point); } @@ -384,6 +387,8 @@ bool QQuickPopupPrivate::handleRelease(QQuickItem *item, const QPointF &point, u if (item != popupItem && !contains(pressPoint)) tryClose(point, QQuickPopup::CloseOnReleaseOutside | QQuickPopup::CloseOnReleaseOutsideParent); pressPoint = QPointF(); + outsidePressed = false; + outsideParentPressed = false; touchId = -1; return blockInput(item, point); } |