summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gui/image/qicon.cpp8
-rw-r--r--tests/auto/gui/image/qicon/tst_qicon.cpp15
2 files changed, 23 insertions, 0 deletions
diff --git a/src/gui/image/qicon.cpp b/src/gui/image/qicon.cpp
index b2d9ed18f5..dc6cbfed1f 100644
--- a/src/gui/image/qicon.cpp
+++ b/src/gui/image/qicon.cpp
@@ -1208,6 +1208,12 @@ bool QIcon::hasThemeIcon(const QString &name)
*/
void QIcon::setIsMask(bool isMask)
{
+ if (!d) {
+ d = new QIconPrivate;
+ d->engine = new QPixmapIconEngine;
+ } else {
+ detach();
+ }
d->is_mask = isMask;
}
@@ -1222,6 +1228,8 @@ void QIcon::setIsMask(bool isMask)
*/
bool QIcon::isMask() const
{
+ if (!d)
+ return false;
return d->is_mask;
}
diff --git a/tests/auto/gui/image/qicon/tst_qicon.cpp b/tests/auto/gui/image/qicon/tst_qicon.cpp
index 9ed3873682..7333dd739f 100644
--- a/tests/auto/gui/image/qicon/tst_qicon.cpp
+++ b/tests/auto/gui/image/qicon/tst_qicon.cpp
@@ -53,6 +53,7 @@ private slots:
void actualSize2_data(); // test with 2 pixmaps with different aspect ratio
void actualSize2();
void isNull();
+ void isMask();
void swap();
void bestMatch();
void cacheKey();
@@ -218,6 +219,20 @@ void tst_QIcon::isNull() {
QVERIFY(iconSupportedFormat.actualSize(QSize(32, 32)).isValid());
}
+void tst_QIcon::isMask()
+{
+ QIcon icon;
+ icon.setIsMask(true);
+ icon.addPixmap(QPixmap());
+ QVERIFY(icon.isMask());
+
+ QIcon icon2;
+ icon2.setIsMask(true);
+ QVERIFY(icon2.isMask());
+ icon2.setIsMask(false);
+ QVERIFY(!icon2.isMask());
+}
+
void tst_QIcon::swap()
{
QPixmap p1(1, 1), p2(2, 2);