From 7f3e3c1099f42cff46bbd267c70587bcf72024fc Mon Sep 17 00:00:00 2001 From: Albert Astals Cid Date: Tue, 8 Oct 2013 13:43:26 +0200 Subject: [PATCH] Compare QIcon QVariants by their cache key MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This makes it so that two QVariants created from the same QIcon (or from QIcons that were assigned one from eachother) compare to true. Unfortunately creating two QIcons with the same path and comparing them still gives false as they have different cacheKeys Change-Id: Iafe2bc4082a830f9c6469f083c26a7abbe4b35c5 Reviewed-by: Jędrzej Nowacki --- src/gui/kernel/qguivariant.cpp | 2 +- .../gui/kernel/qguivariant/test/black.png | Bin 0 -> 697 bytes .../gui/kernel/qguivariant/test/black2.png | Bin 0 -> 697 bytes .../auto/gui/kernel/qguivariant/test/test.pro | 1 + .../qguivariant/test/tst_qguivariant.cpp | 29 ++++++++++++++++++ .../qguivariant/test/tst_qguivariant.qrc | 6 ++++ .../itemviews/qtreewidget/tst_qtreewidget.cpp | 4 +-- 7 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 tests/auto/gui/kernel/qguivariant/test/black.png create mode 100644 tests/auto/gui/kernel/qguivariant/test/black2.png create mode 100644 tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.qrc diff --git a/src/gui/kernel/qguivariant.cpp b/src/gui/kernel/qguivariant.cpp index 2842211e1d..65f57aed84 100644 --- a/src/gui/kernel/qguivariant.cpp +++ b/src/gui/kernel/qguivariant.cpp @@ -164,7 +164,7 @@ public: #ifndef QT_NO_ICON bool delegate(const QIcon *) { - return false; + return v_cast(Base::m_a)->cacheKey() == v_cast(Base::m_b)->cacheKey(); } #endif bool delegate(const void *p) { return Base::delegate(p); } diff --git a/tests/auto/gui/kernel/qguivariant/test/black.png b/tests/auto/gui/kernel/qguivariant/test/black.png new file mode 100644 index 0000000000000000000000000000000000000000..6c94085ed5b3b7274246af1f45c25b8e380c586c GIT binary patch literal 697 zcmV;q0!ICbP)zxGTA+dZrk?wnYk-<`4-yEDY)i5N znbQmd197sem1M~Pv>Ux?4Qm~|-v|z9^dAV&C%|_`AgQ4MARW=8QjqkiylEjp4&cc{ zITMK(BRPO~DWj+Ya!#&2t4S=xQImX9Z=m2eiZMQZ3?XnyjunriwF;St&VZ?s#4p4O z&q0k`y+K~&ytaUwJ(kK8&P=HEA_6i-Z8?m)Lgl_;CGb(-MHa8QVURiO9o__)#A7HoF z+yG#j*I#P;OtS(cjr#>W4?3_pawl^^uT4$b%2Lv862L$J6U7*l@AI$cwG*|p(5Pq| zfZMcE&oAC4x??~@fqE}Ws8m30+;d@&hRx}8dVIcKuOd$}B-{xwvJRWLw}3B@s4CHG zy2DcFq^1R57^I47^wyHeRhcF3Ejw>!7q6<(Rl*Qv7PXMP`>Nq7)o z)cDR^GS1+C=X(#-N&=n0vmWc6r_BhgLIH;--*^)pf&pVoq!~p=ekvJ#; fIf(-kkdgQUci>@sU(Oae00000NkvXXu0mjf9U?a- literal 0 HcmV?d00001 diff --git a/tests/auto/gui/kernel/qguivariant/test/black2.png b/tests/auto/gui/kernel/qguivariant/test/black2.png new file mode 100644 index 0000000000000000000000000000000000000000..6c94085ed5b3b7274246af1f45c25b8e380c586c GIT binary patch literal 697 zcmV;q0!ICbP)zxGTA+dZrk?wnYk-<`4-yEDY)i5N znbQmd197sem1M~Pv>Ux?4Qm~|-v|z9^dAV&C%|_`AgQ4MARW=8QjqkiylEjp4&cc{ zITMK(BRPO~DWj+Ya!#&2t4S=xQImX9Z=m2eiZMQZ3?XnyjunriwF;St&VZ?s#4p4O z&q0k`y+K~&ytaUwJ(kK8&P=HEA_6i-Z8?m)Lgl_;CGb(-MHa8QVURiO9o__)#A7HoF z+yG#j*I#P;OtS(cjr#>W4?3_pawl^^uT4$b%2Lv862L$J6U7*l@AI$cwG*|p(5Pq| zfZMcE&oAC4x??~@fqE}Ws8m30+;d@&hRx}8dVIcKuOd$}B-{xwvJRWLw}3B@s4CHG zy2DcFq^1R57^I47^wyHeRhcF3Ejw>!7q6<(Rl*Qv7PXMP`>Nq7)o z)cDR^GS1+C=X(#-N&=n0vmWc6r_BhgLIH;--*^)pf&pVoq!~p=ekvJ#; fIf(-kkdgQUci>@sU(Oae00000NkvXXu0mjf9U?a- literal 0 HcmV?d00001 diff --git a/tests/auto/gui/kernel/qguivariant/test/test.pro b/tests/auto/gui/kernel/qguivariant/test/test.pro index d47cf7bf6f..86ab17d9cd 100644 --- a/tests/auto/gui/kernel/qguivariant/test/test.pro +++ b/tests/auto/gui/kernel/qguivariant/test/test.pro @@ -2,5 +2,6 @@ CONFIG += testcase CONFIG += parallel_test TARGET = tst_qguivariant SOURCES += tst_qguivariant.cpp +RESOURCES = tst_qguivariant.qrc INCLUDEPATH += $$PWD/../../../../other/qvariant_common QT += testlib diff --git a/tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.cpp b/tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.cpp index 6fdf3dc843..d5ec9fcfaa 100644 --- a/tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.cpp +++ b/tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.cpp @@ -124,6 +124,8 @@ private slots: void implicitConstruction(); void guiVariantAtExit(); + + void iconEquality(); }; void tst_QGuiVariant::constructor_invalid_data() @@ -702,5 +704,32 @@ void tst_QGuiVariant::guiVariantAtExit() QVERIFY(true); } +void tst_QGuiVariant::iconEquality() +{ + QIcon i; + QVariant a = i; + QVariant b = i; + QCOMPARE(a, b); + + i = QIcon(":/black.png"); + a = i; + QVERIFY(a != b); + + b = a; + QCOMPARE(a, b); + + i = QIcon(":/black2.png"); + a = i; + QVERIFY(a != b); + + b = i; + QCOMPARE(a, b); + + // This is a "different" QIcon + // even if the contents are the same + b = QIcon(":/black2.png"); + QVERIFY(a != b); +} + QTEST_MAIN(tst_QGuiVariant) #include "tst_qguivariant.moc" diff --git a/tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.qrc b/tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.qrc new file mode 100644 index 0000000000..15cfde5788 --- /dev/null +++ b/tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.qrc @@ -0,0 +1,6 @@ + + +black.png +black2.png + + diff --git a/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp b/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp index 83ba1ddcda..d2625c400a 100644 --- a/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp +++ b/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp @@ -1758,9 +1758,7 @@ void tst_QTreeWidget::setData() QCOMPARE(qvariant_cast(args.at(0)), item); QCOMPARE(qvariant_cast(args.at(1)), j); item->setIcon(j, icon); - // #### shouldn't cause dataChanged() - QCOMPARE(itemChangedSpy.count(), 1); - itemChangedSpy.clear(); + QCOMPARE(itemChangedSpy.count(), 0); QString toolTip = QString("toolTip %0").arg(i); item->setToolTip(j, toolTip);