summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/platforms/cocoa/qcocoaprintersupport.h6
-rw-r--r--src/plugins/platforms/cocoa/qcocoaprintersupport.mm23
-rw-r--r--src/printsupport/kernel/qplatformprintersupport.h2
-rw-r--r--src/printsupport/kernel/qplatformprintersupport_qpa.cpp11
-rw-r--r--src/printsupport/kernel/qprinterinfo.cpp31
-rw-r--r--src/printsupport/kernel/qprinterinfo.h2
-rw-r--r--tests/auto/printsupport/kernel/qprinterinfo/tst_qprinterinfo.cpp19
7 files changed, 81 insertions, 13 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoaprintersupport.h b/src/plugins/platforms/cocoa/qcocoaprintersupport.h
index 88a83a4f4e..c6790c3e15 100644
--- a/src/plugins/platforms/cocoa/qcocoaprintersupport.h
+++ b/src/plugins/platforms/cocoa/qcocoaprintersupport.h
@@ -44,6 +44,8 @@
#include <qpa/qplatformprintersupport.h>
+#include "qt_mac_p.h"
+
class QCocoaPrinterSupport : public QPlatformPrinterSupport
{
public:
@@ -55,6 +57,10 @@ public:
QList<QPrinter::PaperSize> supportedPaperSizes(const QPrinterInfo &) const Q_DECL_OVERRIDE;
QList<QPrinterInfo> availablePrinters() Q_DECL_OVERRIDE;
+ QPrinterInfo printerInfo(const QString &printerName) Q_DECL_OVERRIDE;
+
+private:
+ QPrinterInfo printerInfoFromPMPrinter(const PMPrinter &printer);
};
#endif // QCOCOAPRINTERSUPPORT_H
diff --git a/src/plugins/platforms/cocoa/qcocoaprintersupport.mm b/src/plugins/platforms/cocoa/qcocoaprintersupport.mm
index a6eb5ddeb8..2ded23ac05 100644
--- a/src/plugins/platforms/cocoa/qcocoaprintersupport.mm
+++ b/src/plugins/platforms/cocoa/qcocoaprintersupport.mm
@@ -44,6 +44,7 @@
#include <QtPrintSupport/QPrinter>
#include <QtPrintSupport/QPrinterInfo>
+#include <private/qprinterinfo_p.h>
QCocoaPrinterSupport::QCocoaPrinterSupport()
{ }
@@ -108,9 +109,27 @@ QList<QPrinterInfo> QCocoaPrinterSupport::availablePrinters()
CFIndex count = CFArrayGetCount(printerList);
for (CFIndex i = 0; i < count; ++i) {
PMPrinter printer = static_cast<PMPrinter>(const_cast<void *>(CFArrayGetValueAtIndex(printerList, i)));
- QString printerName = QCFString::toQString(PMPrinterGetID(printer));
- returnValue += QPlatformPrinterSupport::printerInfo(printerName, PMPrinterIsDefault(printer));
+ returnValue += printerInfoFromPMPrinter(printer);
}
}
return returnValue;
}
+
+QPrinterInfo QCocoaPrinterSupport::printerInfo(const QString &printerName)
+{
+ PMPrinter printer = PMPrinterCreateFromPrinterID(QCFString::toCFStringRef(printerName));
+ QPrinterInfo pi = printerInfoFromPMPrinter(printer);
+ PMRelease(printer);
+ return pi;
+}
+
+QPrinterInfo QCocoaPrinterSupport::printerInfoFromPMPrinter(const PMPrinter &printer)
+{
+ if (!printer)
+ return QPrinterInfo();
+
+ QPrinterInfo pi = QPrinterInfo(QCFString::toQString(PMPrinterGetID(printer)));
+ pi.d_func()->isDefault = PMPrinterIsDefault(printer);
+
+ return pi;
+}
diff --git a/src/printsupport/kernel/qplatformprintersupport.h b/src/printsupport/kernel/qplatformprintersupport.h
index f0efa3d6af..37fb9e89de 100644
--- a/src/printsupport/kernel/qplatformprintersupport.h
+++ b/src/printsupport/kernel/qplatformprintersupport.h
@@ -73,12 +73,12 @@ public:
virtual QList<QPrinterInfo> availablePrinters();
virtual QPrinterInfo defaultPrinter();
+ virtual QPrinterInfo printerInfo(const QString &printerName);
static QPrinter::PaperSize convertQSizeFToPaperSize(const QSizeF &sizef);
static QSizeF convertPaperSizeToQSizeF(QPrinter::PaperSize paperSize);
protected:
- static QPrinterInfo printerInfo(const QString &printerName, bool isDefault = false);
static void setPrinterInfoDefault(QPrinterInfo *p, bool isDefault);
static bool printerInfoIsDefault(const QPrinterInfo &p);
static int printerInfoCupsPrinterIndex(const QPrinterInfo &p);
diff --git a/src/printsupport/kernel/qplatformprintersupport_qpa.cpp b/src/printsupport/kernel/qplatformprintersupport_qpa.cpp
index 9c0c3f131c..35441df5fc 100644
--- a/src/printsupport/kernel/qplatformprintersupport_qpa.cpp
+++ b/src/printsupport/kernel/qplatformprintersupport_qpa.cpp
@@ -97,11 +97,14 @@ QPrinterInfo QPlatformPrinterSupport::defaultPrinter()
return printers.isEmpty() ? QPrinterInfo() : printers.front();
}
-QPrinterInfo QPlatformPrinterSupport::printerInfo(const QString &printerName, bool isDefault)
+QPrinterInfo QPlatformPrinterSupport::printerInfo(const QString &printerName)
{
- QPrinterInfo pi = QPrinterInfo(printerName);
- pi.d_func()->isDefault = isDefault;
- return pi;
+ const QList<QPrinterInfo> printers = availablePrinters();
+ foreach (const QPrinterInfo &printerInfo, printers) {
+ if (printerInfo.printerName() == printerName)
+ return printerInfo;
+ }
+ return QPrinterInfo();
}
void QPlatformPrinterSupport::setPrinterInfoDefault(QPrinterInfo *p, bool isDefault)
diff --git a/src/printsupport/kernel/qprinterinfo.cpp b/src/printsupport/kernel/qprinterinfo.cpp
index 3d0ba7f31d..fbf2e4de33 100644
--- a/src/printsupport/kernel/qprinterinfo.cpp
+++ b/src/printsupport/kernel/qprinterinfo.cpp
@@ -96,11 +96,10 @@ QPrinterInfo::QPrinterInfo(const QPrinterInfo &other)
QPrinterInfo::QPrinterInfo(const QPrinter &printer)
: d_ptr(&QPrinterInfoPrivate::shared_null)
{
- foreach (const QPrinterInfo &printerInfo, availablePrinters()) {
- if (printerInfo.printerName() == printer.printerName()) {
- d_ptr.reset(new QPrinterInfoPrivate(*printerInfo.d_ptr));
- break;
- }
+ QPlatformPrinterSupport *ps = QPlatformPrinterSupportPlugin::get();
+ if (ps) {
+ QPrinterInfo pi = ps->printerInfo(printer.printerName());
+ d_ptr.reset(new QPrinterInfoPrivate(*pi.d_ptr));
}
}
@@ -195,7 +194,27 @@ QPrinterInfo QPrinterInfo::defaultPrinter()
QPlatformPrinterSupport *ps = QPlatformPrinterSupportPlugin::get();
if (!ps)
return QPrinterInfo();
- return QPlatformPrinterSupportPlugin::get()->defaultPrinter();
+ return ps->defaultPrinter();
+}
+
+/*!
+ \fn QPrinterInfo QPrinterInfo::printerInfo()
+ \since 5.0
+
+ Returns the named printer.
+
+ The return value should be checked using isNull() before being
+ used, in case the named printer does not exist.
+
+ \sa isNull()
+*/
+
+QPrinterInfo QPrinterInfo::printerInfo(const QString &printerName)
+{
+ QPlatformPrinterSupport *ps = QPlatformPrinterSupportPlugin::get();
+ if (!ps)
+ return QPrinterInfo();
+ return ps->printerInfo(printerName);
}
QT_END_NAMESPACE
diff --git a/src/printsupport/kernel/qprinterinfo.h b/src/printsupport/kernel/qprinterinfo.h
index d26b70dee0..8b3ab448c8 100644
--- a/src/printsupport/kernel/qprinterinfo.h
+++ b/src/printsupport/kernel/qprinterinfo.h
@@ -71,6 +71,7 @@ public:
static QList<QPrinterInfo> availablePrinters();
static QPrinterInfo defaultPrinter();
+ static QPrinterInfo printerInfo(const QString &printerName);
private:
explicit QPrinterInfo(const QString &name);
@@ -78,6 +79,7 @@ private:
private:
friend class QPlatformPrinterSupport;
friend class QWindowsPrinterSupport;
+ friend class QCocoaPrinterSupport;
Q_DECLARE_PRIVATE(QPrinterInfo)
QScopedPointer<QPrinterInfoPrivate, QPrinterInfoPrivateDeleter> d_ptr;
};
diff --git a/tests/auto/printsupport/kernel/qprinterinfo/tst_qprinterinfo.cpp b/tests/auto/printsupport/kernel/qprinterinfo/tst_qprinterinfo.cpp
index 70a00edb10..ad51b910eb 100644
--- a/tests/auto/printsupport/kernel/qprinterinfo/tst_qprinterinfo.cpp
+++ b/tests/auto/printsupport/kernel/qprinterinfo/tst_qprinterinfo.cpp
@@ -68,6 +68,7 @@ private slots:
void testForPaperSizes();
void testConstructors();
void testAssignment();
+ void namedPrinter();
private:
QString getDefaultPrinterFromSystem();
@@ -373,6 +374,24 @@ void tst_QPrinterInfo::testAssignment()
}
}
+void tst_QPrinterInfo::namedPrinter()
+{
+ QList<QPrinterInfo> printers = QPrinterInfo::availablePrinters();
+
+ QStringList printerNames;
+
+ foreach (const QPrinterInfo &pi, printers) {
+ QPrinterInfo pi2 = QPrinterInfo::printerInfo(pi.printerName());
+ qDebug() << "Printer: " << pi2.printerName() << " : "
+ << pi2.isNull() << " : " << pi2.isDefault();
+ QCOMPARE(pi2.printerName(), pi.printerName());
+ QCOMPARE(pi2.supportedPaperSizes(), pi.supportedPaperSizes());
+ QCOMPARE(pi2.isNull(), pi.isNull());
+ QCOMPARE(pi2.isDefault(), pi.isDefault());
+ }
+}
+
+
#endif
QTEST_MAIN(tst_QPrinterInfo)