diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2016-05-11 23:23:55 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2016-05-12 07:57:27 +0000 |
commit | 8857bdecc2174fd3ab5935af597f1b8a30d15c96 (patch) | |
tree | 131d8f317981a28b9aab9306aa176599faa27ebf | |
parent | 9cf30f1613bc18a1f16c70c8d293dad3bc23b6d9 (diff) |
Popup: respect "dim: false" for modal popups
Task-number: QTBUG-53309
Change-Id: I024dfa32342a7c936f5ea53586c11e50d65845e9
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
-rw-r--r-- | src/quicktemplates2/qquickoverlay.cpp | 17 | ||||
-rw-r--r-- | tests/auto/controls/data/tst_popup.qml | 18 |
2 files changed, 28 insertions, 7 deletions
diff --git a/src/quicktemplates2/qquickoverlay.cpp b/src/quicktemplates2/qquickoverlay.cpp index 04ed8470..0fb9f3ca 100644 --- a/src/quicktemplates2/qquickoverlay.cpp +++ b/src/quicktemplates2/qquickoverlay.cpp @@ -68,14 +68,14 @@ void QQuickOverlayPrivate::popupAboutToShow() { Q_Q(QQuickOverlay); QQuickPopup *popup = qobject_cast<QQuickPopup *>(q->sender()); - if (!popup) + if (!popup || !popup->dim()) return; // use QQmlProperty instead of QQuickItem::setOpacity() to trigger QML Behaviors if (popup->isModal()) { if (modal) QQmlProperty::write(modal, QStringLiteral("opacity"), 1.0); - } else if (popup->dim()) { + } else { if (modeless) QQmlProperty::write(modeless, QStringLiteral("opacity"), 1.0); } @@ -85,14 +85,14 @@ void QQuickOverlayPrivate::popupAboutToHide() { Q_Q(QQuickOverlay); QQuickPopup *popup = qobject_cast<QQuickPopup *>(q->sender()); - if (!popup) + if (!popup || !popup->dim()) return; // use QQmlProperty instead of QQuickItem::setOpacity() to trigger QML Behaviors if (popup->isModal()) { if (modal && modalPopups <= 1) QQmlProperty::write(modal, QStringLiteral("opacity"), 0.0); - } else if (popup->dim()) { + } else { if (modeless) QQmlProperty::write(modeless, QStringLiteral("opacity"), 0.0); } @@ -102,7 +102,7 @@ void QQuickOverlayPrivate::drawerPositionChange() { Q_Q(QQuickOverlay); QQuickDrawer *drawer = qobject_cast<QQuickDrawer *>(q->sender()); - if (!drawer) + if (!drawer || !drawer->dim()) return; // call QQuickItem::setOpacity() directly to avoid triggering QML Behaviors @@ -110,7 +110,7 @@ void QQuickOverlayPrivate::drawerPositionChange() if (drawer->isModal()) { if (modal) modal->setOpacity(drawer->position()); - } else if (drawer->dim()) { + } else { if (modeless) modeless->setOpacity(drawer->position()); } @@ -133,10 +133,13 @@ void QQuickOverlayPrivate::restackOverlay() QQuickPopup *modelessPopup = nullptr; for (auto it = popups.crbegin(), end = popups.crend(); it != end; ++it) { QQuickPopup *popup = (*it); + if (!popup->dim()) + continue; + if (popup->isModal()) { if (!modalPopup || modalPopup->z() >= popup->z()) modalPopup = popup; - } else if (popup->dim()) { + } else { if (!modelessPopup) modelessPopup = popup; } diff --git a/tests/auto/controls/data/tst_popup.qml b/tests/auto/controls/data/tst_popup.qml index a681b2f9..20b5a551 100644 --- a/tests/auto/controls/data/tst_popup.qml +++ b/tests/auto/controls/data/tst_popup.qml @@ -971,6 +971,7 @@ TestCase { property alias modalPopup: modalPopup property alias modelessPopup: modelessPopup property alias plainPopup: plainPopup + property alias modalPopupWithoutDim: modalPopupWithoutDim visible: true Drawer { z: 5 @@ -1002,6 +1003,13 @@ TestCase { enter: Transition { PauseAnimation { duration: 200 } } exit: Transition { PauseAnimation { duration: 200 } } } + Popup { + id: modalPopupWithoutDim + z: 5 + dim: false + modal: true + exit: Transition { PauseAnimation { duration: 200 } } + } } } @@ -1067,6 +1075,16 @@ TestCase { compare(window.overlay.modal.opacity, 0.0) compare(window.overlay.modeless.opacity, 0.0) + window.modalPopupWithoutDim.open() + tryCompare(window.modalPopupWithoutDim, "visible", true) + compare(window.overlay.modal.opacity, 0.0) + compare(window.overlay.modeless.opacity, 0.0) + + window.modalPopupWithoutDim.close() + tryCompare(window.modalPopupWithoutDim, "visible", false) + compare(window.overlay.modal.opacity, 0.0) + compare(window.overlay.modeless.opacity, 0.0) + window.upperDrawer.open() compare(window.overlay.modal.z, 1.0) tryCompare(window.overlay.modal, "opacity", 1.0) |