summaryrefslogtreecommitdiffstats
path: root/src/printsupport/kernel/qprinterinfo.cpp
diff options
context:
space:
mode:
authorJohn Layt <jlayt@kde.org>2013-11-25 20:36:58 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-11-26 18:45:10 +0100
commitdb4afbef7d1e2405a3b8f007e9009f509b4a3eac (patch)
tree443b4405a5d7c464e7b9e15b75a7268a91c8bf34 /src/printsupport/kernel/qprinterinfo.cpp
parent42fa59b151eb4a6fecbe5b5672112c9f78b856a9 (diff)
QPrinterInfo - Fix isNull() by fixing constructors
The QPrinterInfo copy and QPrinter constructors and the assignment operator were not taking the shared_null into account, and so any use of them resulted in a new null QPrinterInfo different to shared_null, which lead to isNull() always returning true in anything other than the simplest use case. While fixing this also make the shared_null a Q_GLOBAL_STATIC. Task-number: QTBUG-21087 Change-Id: I0beb24088208e9ed58d21ca26b0c8d00b02e5b8f Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
Diffstat (limited to 'src/printsupport/kernel/qprinterinfo.cpp')
-rw-r--r--src/printsupport/kernel/qprinterinfo.cpp29
1 files changed, 22 insertions, 7 deletions
diff --git a/src/printsupport/kernel/qprinterinfo.cpp b/src/printsupport/kernel/qprinterinfo.cpp
index f863b23e34..e02617fe93 100644
--- a/src/printsupport/kernel/qprinterinfo.cpp
+++ b/src/printsupport/kernel/qprinterinfo.cpp
@@ -35,8 +35,17 @@
QT_BEGIN_NAMESPACE
-QPrinterInfoPrivate QPrinterInfoPrivate::shared_null;
+Q_GLOBAL_STATIC(QPrinterInfoPrivate, shared_null);
+class QPrinterInfoPrivateDeleter
+{
+public:
+ static inline void cleanup(QPrinterInfoPrivate *d)
+ {
+ if (d != shared_null)
+ delete d;
+ }
+};
/*!
\class QPrinterInfo
@@ -83,7 +92,7 @@ QPrinterInfoPrivate QPrinterInfoPrivate::shared_null;
\sa isNull()
*/
QPrinterInfo::QPrinterInfo()
- : d_ptr(&QPrinterInfoPrivate::shared_null)
+ : d_ptr(shared_null)
{
}
@@ -91,7 +100,7 @@ QPrinterInfo::QPrinterInfo()
Constructs a copy of \a other.
*/
QPrinterInfo::QPrinterInfo(const QPrinterInfo &other)
- : d_ptr(new QPrinterInfoPrivate(*other.d_ptr))
+ : d_ptr((other.d_ptr.data() == shared_null) ? shared_null : new QPrinterInfoPrivate(*other.d_ptr))
{
}
@@ -99,12 +108,15 @@ QPrinterInfo::QPrinterInfo(const QPrinterInfo &other)
Constructs a QPrinterInfo object from \a printer.
*/
QPrinterInfo::QPrinterInfo(const QPrinter &printer)
- : d_ptr(&QPrinterInfoPrivate::shared_null)
+ : d_ptr(shared_null)
{
QPlatformPrinterSupport *ps = QPlatformPrinterSupportPlugin::get();
if (ps) {
QPrinterInfo pi = ps->printerInfo(printer.printerName());
- d_ptr.reset(new QPrinterInfoPrivate(*pi.d_ptr));
+ if (pi.d_ptr.data() == shared_null)
+ d_ptr.reset(shared_null);
+ else
+ d_ptr.reset(new QPrinterInfoPrivate(*pi.d_ptr));
}
}
@@ -130,7 +142,10 @@ QPrinterInfo::~QPrinterInfo()
QPrinterInfo &QPrinterInfo::operator=(const QPrinterInfo &other)
{
Q_ASSERT(d_ptr);
- d_ptr.reset(new QPrinterInfoPrivate(*other.d_ptr));
+ if (other.d_ptr.data() == shared_null)
+ d_ptr.reset(shared_null);
+ else
+ d_ptr.reset(new QPrinterInfoPrivate(*other.d_ptr));
return *this;
}
@@ -191,7 +206,7 @@ QString QPrinterInfo::makeAndModel() const
bool QPrinterInfo::isNull() const
{
Q_D(const QPrinterInfo);
- return d == &QPrinterInfoPrivate::shared_null;
+ return d == shared_null || d->name.isEmpty();
}
/*!