summaryrefslogtreecommitdiffstats
path: root/src/plugins/printsupport
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@digia.com>2013-10-16 15:36:34 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-10-17 11:38:58 +0200
commite6cac2c19315c9127f5b4048088e66da6b9296fe (patch)
tree52d2e649c7c7b94fc9a170b52e562354cc85eb1b /src/plugins/printsupport
parent0f47e8b8cdc64dd22baa08165def9f87b8fa3e12 (diff)
Refresh Windows printer list when QPrinterInfo.availablePrinters() is called.
Introduce static query functions. Task-number: QTBUG-33666 Change-Id: I291098c9da82bc2cc24957044187e93cdc33c41d Reviewed-by: Oliver Wolff <oliver.wolff@digia.com> Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
Diffstat (limited to 'src/plugins/printsupport')
-rw-r--r--src/plugins/printsupport/windows/qwindowsprintersupport.cpp52
-rw-r--r--src/plugins/printsupport/windows/qwindowsprintersupport.h4
2 files changed, 37 insertions, 19 deletions
diff --git a/src/plugins/printsupport/windows/qwindowsprintersupport.cpp b/src/plugins/printsupport/windows/qwindowsprintersupport.cpp
index 36e7a3fb8e..2faebf6f64 100644
--- a/src/plugins/printsupport/windows/qwindowsprintersupport.cpp
+++ b/src/plugins/printsupport/windows/qwindowsprintersupport.cpp
@@ -42,6 +42,7 @@
#include "qwindowsprintersupport.h"
#include <QtCore/QList>
+#include <QtCore/QScopedArrayPointer>
#include <QtPrintSupport/QPrinterInfo>
#include <qprintengine_win_p.h>
#include <private/qpaintengine_alpha_p.h>
@@ -52,25 +53,7 @@ QT_BEGIN_NAMESPACE
QWindowsPrinterSupport::QWindowsPrinterSupport()
: QPlatformPrinterSupport()
{
- DWORD needed = 0;
- DWORD returned = 0;
- if (!EnumPrinters(PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS, NULL, 4, 0, 0, &needed, &returned)) {
- LPBYTE buffer = new BYTE[needed];
- if (EnumPrinters(PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS, NULL, 4, buffer, needed, &needed, &returned)) {
- PPRINTER_INFO_4 infoList = reinterpret_cast<PPRINTER_INFO_4>(buffer);
- QString defaultPrinterName;
- QString program;
- QString port;
- QWin32PrintEngine::queryDefaultPrinter(defaultPrinterName, program, port);
- for (uint i = 0; i < returned; ++i) {
- QString printerName(QString::fromWCharArray(infoList[i].pPrinterName));
- bool isDefault = (printerName == defaultPrinterName);
- QPrinterInfo printerInfo = createPrinterInfo(printerName, QString(), QString(), QString(), isDefault, i);
- m_printers.append(printerInfo);
- }
- }
- delete [] buffer;
- }
+ m_printers = QWindowsPrinterSupport::queryPrinters();
}
QWindowsPrinterSupport::~QWindowsPrinterSupport()
@@ -98,4 +81,35 @@ QList<QPair<QString, QSizeF> >QWindowsPrinterSupport::supportedSizesWithNames(co
return QWin32PrintEngine::supportedSizesWithNames(printerInfo);
}
+QList<QPrinterInfo> QWindowsPrinterSupport::availablePrinters()
+{
+ m_printers = QWindowsPrinterSupport::queryPrinters();
+ return QPlatformPrinterSupport::availablePrinters();
+}
+
+QList<QPrinterInfo> QWindowsPrinterSupport::queryPrinters()
+{
+ QList<QPrinterInfo> result;
+ DWORD needed = 0;
+ DWORD returned = 0;
+ if ((!EnumPrinters(PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS, NULL, 4, 0, 0, &needed, &returned) && GetLastError() != ERROR_INSUFFICIENT_BUFFER)
+ || !needed) {
+ return result;
+ }
+ QScopedArrayPointer<BYTE> buffer(new BYTE[needed]);
+ if (!EnumPrinters(PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS, NULL, 4, buffer.data(), needed, &needed, &returned))
+ return result;
+ PPRINTER_INFO_4 infoList = reinterpret_cast<PPRINTER_INFO_4>(buffer.data());
+ QString defaultPrinterName;
+ QString program;
+ QString port;
+ QWin32PrintEngine::queryDefaultPrinter(defaultPrinterName, program, port);
+ for (uint i = 0; i < returned; ++i) {
+ const QString printerName(QString::fromWCharArray(infoList[i].pPrinterName));
+ const bool isDefault = (printerName == defaultPrinterName);
+ result.append(QPlatformPrinterSupport::createPrinterInfo(printerName, QString(), QString(), QString(), isDefault, i));
+ }
+ return result;
+}
+
QT_END_NAMESPACE
diff --git a/src/plugins/printsupport/windows/qwindowsprintersupport.h b/src/plugins/printsupport/windows/qwindowsprintersupport.h
index 1d5a4f3da4..1b1b1fa215 100644
--- a/src/plugins/printsupport/windows/qwindowsprintersupport.h
+++ b/src/plugins/printsupport/windows/qwindowsprintersupport.h
@@ -58,6 +58,10 @@ public:
virtual QPaintEngine *createPaintEngine(QPrintEngine *printEngine, QPrinter::PrinterMode);
virtual QList<QPrinter::PaperSize> supportedPaperSizes(const QPrinterInfo &) const;
virtual QList<QPair<QString, QSizeF> >supportedSizesWithNames(const QPrinterInfo &printerInfo) const;
+ virtual QList<QPrinterInfo> availablePrinters();
+
+private:
+ static QList<QPrinterInfo> queryPrinters();
};
QT_END_NAMESPACE