diff options
-rw-r--r-- | src/qml/types/qqmlconnections.cpp | 9 | ||||
-rw-r--r-- | src/quick/items/qquickaccessibleattached.cpp | 15 | ||||
-rw-r--r-- | src/quick/items/qquickaccessibleattached_p.h | 2 | ||||
-rw-r--r-- | src/quick/items/qquicktextutil.cpp | 2 | ||||
-rw-r--r-- | src/quick/items/qquickwindowmodule.cpp | 16 | ||||
-rw-r--r-- | src/quick/items/qquickwindowmodule_p.h | 3 | ||||
-rw-r--r-- | tests/auto/quick/qquickaccessible/tst_qquickaccessible.cpp | 15 |
7 files changed, 49 insertions, 13 deletions
diff --git a/src/qml/types/qqmlconnections.cpp b/src/qml/types/qqmlconnections.cpp index 29946b1da4..c913e2d11a 100644 --- a/src/qml/types/qqmlconnections.cpp +++ b/src/qml/types/qqmlconnections.cpp @@ -47,6 +47,7 @@ #include <private/qqmlvmemetaobject_p.h> #include <qqmlinfo.h> +#include <QtCore/qloggingcategory.h> #include <QtCore/qdebug.h> #include <QtCore/qstringlist.h> @@ -54,6 +55,8 @@ QT_BEGIN_NAMESPACE +Q_LOGGING_CATEGORY(lcQmlConnections, "qt.qml.connections") + class QQmlConnectionsPrivate : public QObjectPrivate { public: @@ -276,8 +279,10 @@ void QQmlConnections::connectSignals() connectSignalsToMethods(); } else { #if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) - qmlWarning(this) << tr("Implicitly defined onFoo properties in Connections are deprecated. " - "Use this syntax instead: function onFoo(<arguments>) { ... }"); + if (lcQmlConnections().isWarningEnabled()) { + qmlWarning(this) << tr("Implicitly defined onFoo properties in Connections are deprecated. " + "Use this syntax instead: function onFoo(<arguments>) { ... }"); + } #endif connectSignalsToBindings(); } diff --git a/src/quick/items/qquickaccessibleattached.cpp b/src/quick/items/qquickaccessibleattached.cpp index ae23c4c07e..67d17c98e5 100644 --- a/src/quick/items/qquickaccessibleattached.cpp +++ b/src/quick/items/qquickaccessibleattached.cpp @@ -41,6 +41,8 @@ #if QT_CONFIG(accessibility) +#include <QtQml/qqmlinfo.h> + #include "private/qquickitem_p.h" QT_BEGIN_NAMESPACE @@ -335,14 +337,15 @@ QQuickAccessibleAttached::QQuickAccessibleAttached(QObject *parent) : QObject(parent), m_role(QAccessible::NoRole) { Q_ASSERT(parent); - QQuickItem *item = qobject_cast<QQuickItem*>(parent); - if (!item) + if (!item()) { + qmlWarning(parent) << "Accessible must be attached to an Item"; return; + } // Enable accessibility for items with accessible content. This also // enables accessibility for the ancestors of souch items. - item->d_func()->setAccessible(); - QAccessibleEvent ev(item, QAccessible::ObjectCreated); + item()->d_func()->setAccessible(); + QAccessibleEvent ev(item(), QAccessible::ObjectCreated); QAccessible::updateAccessibility(&ev); if (!parent->property("value").isNull()) { @@ -433,12 +436,12 @@ QQuickAccessibleAttached *QQuickAccessibleAttached::qmlAttachedProperties(QObjec bool QQuickAccessibleAttached::ignored() const { - return !item()->d_func()->isAccessible; + return item() ? !item()->d_func()->isAccessible : false; } void QQuickAccessibleAttached::setIgnored(bool ignored) { - if (this->ignored() != ignored) { + if (this->ignored() != ignored && item()) { item()->d_func()->isAccessible = !ignored; emit ignoredChanged(); } diff --git a/src/quick/items/qquickaccessibleattached_p.h b/src/quick/items/qquickaccessibleattached_p.h index 8a71c492a3..c4ccbb5a10 100644 --- a/src/quick/items/qquickaccessibleattached_p.h +++ b/src/quick/items/qquickaccessibleattached_p.h @@ -219,7 +219,7 @@ Q_SIGNALS: void nextPageAction(); private: - QQuickItem *item() const { return static_cast<QQuickItem*>(parent()); } + QQuickItem *item() const { return qobject_cast<QQuickItem*>(parent()); } QAccessible::Role m_role; QAccessible::State m_state; diff --git a/src/quick/items/qquicktextutil.cpp b/src/quick/items/qquicktextutil.cpp index eb356a9c48..024b2b7a5b 100644 --- a/src/quick/items/qquicktextutil.cpp +++ b/src/quick/items/qquicktextutil.cpp @@ -87,7 +87,7 @@ qreal QQuickTextUtil::alignedX(const qreal textWidth, const qreal itemWidth, int x = itemWidth - textWidth; break; case Qt::AlignHCenter: - x = (itemWidth - textWidth) / 2; + x = qRound(itemWidth / 2.0) - textWidth / 2.0; break; } return x; diff --git a/src/quick/items/qquickwindowmodule.cpp b/src/quick/items/qquickwindowmodule.cpp index 6100d1466a..7d7cf20210 100644 --- a/src/quick/items/qquickwindowmodule.cpp +++ b/src/quick/items/qquickwindowmodule.cpp @@ -39,6 +39,7 @@ #include "qquickwindowmodule_p.h" #include "qquickwindowattached_p.h" +#include "qquickrendercontrol.h" #include "qquickscreen_p.h" #include "qquickview_p.h" #include "qquickwindowmodule_p_p.h" @@ -68,7 +69,7 @@ void QQuickWindowQmlImpl::setVisible(bool visible) { Q_D(QQuickWindowQmlImpl); d->visible = visible; - if (d->complete && (!transientParent() || transientParent()->isVisible())) + if (d->complete && (!transientParent() || transientParentVisible())) QQuickWindow::setVisible(visible); } @@ -135,7 +136,7 @@ QQuickWindowQmlImpl::QQuickWindowQmlImpl(QQuickWindowQmlImplPrivate &dd, QWindow void QQuickWindowQmlImpl::setWindowVisibility() { Q_D(QQuickWindowQmlImpl); - if (transientParent() && !transientParent()->isVisible()) + if (transientParent() && !transientParentVisible()) return; if (QQuickItem *senderItem = qmlobject_cast<QQuickItem *>(sender())) { @@ -189,6 +190,17 @@ void QQuickWindowQmlImpl::setScreen(QObject *screen) QWindow::setScreen(screenWrapper ? screenWrapper->wrappedScreen() : nullptr); } +bool QQuickWindowQmlImpl::transientParentVisible() +{ + Q_ASSERT(transientParent()); + if (!transientParent()->isVisible()) { + // handle case where transient parent is offscreen window + QWindow *rw = QQuickRenderControl::renderWindowFor(qobject_cast<QQuickWindow*>(transientParent())); + return rw && rw->isVisible(); + } + return true; +} + QT_END_NAMESPACE #include "moc_qquickwindowmodule_p.cpp" diff --git a/src/quick/items/qquickwindowmodule_p.h b/src/quick/items/qquickwindowmodule_p.h index dc260dd47a..87f0b240b8 100644 --- a/src/quick/items/qquickwindowmodule_p.h +++ b/src/quick/items/qquickwindowmodule_p.h @@ -96,6 +96,9 @@ private Q_SLOTS: void setWindowVisibility(); private: + bool transientParentVisible(); + +private: Q_DISABLE_COPY(QQuickWindowQmlImpl) Q_DECLARE_PRIVATE(QQuickWindowQmlImpl) }; diff --git a/tests/auto/quick/qquickaccessible/tst_qquickaccessible.cpp b/tests/auto/quick/qquickaccessible/tst_qquickaccessible.cpp index 061d5f8a1a..0e6c3b3ad9 100644 --- a/tests/auto/quick/qquickaccessible/tst_qquickaccessible.cpp +++ b/tests/auto/quick/qquickaccessible/tst_qquickaccessible.cpp @@ -169,9 +169,22 @@ void tst_QQuickAccessible::quickAttachedProperties() delete object; } - // Attached property + // Attaching to non-item { QObject parent; + QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: QML QtObject: Accessible must be attached to an Item"); + QQuickAccessibleAttached *attachedObj = new QQuickAccessibleAttached(&parent); + + QCOMPARE(attachedObj->ignored(), false); + attachedObj->setIgnored(true); + QCOMPARE(attachedObj->ignored(), false); + attachedObj->setIgnored(false); + QCOMPARE(attachedObj->ignored(), false); + } + + // Attached property + { + QQuickItem parent; QQuickAccessibleAttached *attachedObj = new QQuickAccessibleAttached(&parent); attachedObj->name(); |