diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp index 67da4c8fc8..c5d55cf6b3 100644 --- a/src/quick/items/qquickitem.cpp +++ b/src/quick/items/qquickitem.cpp @@ -4009,11 +4009,7 @@ bool QQuickItemPrivate::setEffectiveVisibleRecur(bool newEffectiveVisible) for (int ii = 0; ii < childItems.count(); ++ii) childVisibilityChanged |= QQuickItemPrivate::get(childItems.at(ii))->setEffectiveVisibleRecur(newEffectiveVisible); - for (int ii = 0; ii < changeListeners.count(); ++ii) { - const QQuickItemPrivate::ChangeListener &change = changeListeners.at(ii); - if (change.types & QQuickItemPrivate::Visibility) - change.listener->itemVisibilityChanged(q); - } + itemChange(QQuickItem::ItemVisibleHasChanged, effectiveVisible); if (isAccessible) QAccessible::updateAccessibility(QAccessibleEvent(effectiveVisible ? QAccessible::ObjectShow : QAccessible::ObjectHide, q, 0)); diff --git a/src/quick/items/qquickitem.h b/src/quick/items/qquickitem.h index 91771c809b..16a6074354 100644 --- a/src/quick/items/qquickitem.h +++ b/src/quick/items/qquickitem.h @@ -168,7 +168,7 @@ class Q_QUICK_EXPORT QQuickItem : public QObject, public QDeclarativeParserStatu ItemChildAddedChange, // value.item ItemChildRemovedChange, // value.item ItemSceneChange, // value.canvas - ItemVisibleHasChanged, // value.realValue + ItemVisibleHasChanged, // value.boolValue ItemParentHasChanged, // value.item ItemOpacityHasChanged, // value.realValue ItemActiveFocusHasChanged, // value.boolValue diff --git a/tests/auto/qtquick2/qquickmousearea/data/hoverVisible.qml b/tests/auto/qtquick2/qquickmousearea/data/hoverVisible.qml new file mode 100644 index 0000000000..2d65b5573e --- /dev/null +++ b/tests/auto/qtquick2/qquickmousearea/data/hoverVisible.qml @@ -0,0 +1,15 @@ +import QtQuick 2.0 + +Rectangle { + width: 400; height: 400; + + Rectangle { + width: 100; height: 100; + MouseArea { + id: mousetracker; objectName: "mousetracker" + anchors.fill: parent + visible: false + hoverEnabled: true + } + } +} diff --git a/tests/auto/qtquick2/qquickmousearea/tst_qquickmousearea.cpp b/tests/auto/qtquick2/qquickmousearea/tst_qquickmousearea.cpp index 1520dd5d6e..66f651329a 100644 --- a/tests/auto/qtquick2/qquickmousearea/tst_qquickmousearea.cpp +++ b/tests/auto/qtquick2/qquickmousearea/tst_qquickmousearea.cpp @@ -71,6 +71,7 @@ private slots: void clickThrough(); void hoverPosition(); void hoverPropagation(); + void hoverVisible(); private: QQuickView *createView(); @@ -771,6 +772,35 @@ void tst_QQuickMouseArea::hoverPropagation() delete canvas; } +void tst_QQuickMouseArea::hoverVisible() +{ + QQuickView *canvas = createView(); + canvas->setSource(testFileUrl("hoverVisible.qml")); + + QQuickItem *root = canvas->rootObject(); + QVERIFY(root != 0); + + QQuickMouseArea *mouseTracker = canvas->rootObject()->findChild("mousetracker"); + QVERIFY(mouseTracker != 0); + + QSignalSpy enteredSpy(mouseTracker, SIGNAL(entered())); + + QTest::mouseMove(canvas,QPoint(10,32)); + + QCOMPARE(mouseTracker->hovered(), false); + QCOMPARE(enteredSpy.count(), 0); + + mouseTracker->setVisible(true); + + QCOMPARE(mouseTracker->hovered(), true); + QCOMPARE(enteredSpy.count(), 1); + + QEXPECT_FAIL("", "QTBUG-24282", Continue); + QCOMPARE(QPointF(mouseTracker->mouseX(), mouseTracker->mouseY()), QPointF(10,32)); + + delete canvas; +} + QTEST_MAIN(tst_QQuickMouseArea) #include "tst_qquickmousearea.moc"