diff options
Diffstat (limited to 'src/printsupport')
-rw-r--r-- | src/printsupport/kernel/qprintengine_win.cpp | 28 | ||||
-rw-r--r-- | src/printsupport/kernel/qprintengine_win_p.h | 1 | ||||
-rw-r--r-- | src/printsupport/kernel/qprinter.cpp | 6 |
3 files changed, 17 insertions, 18 deletions
diff --git a/src/printsupport/kernel/qprintengine_win.cpp b/src/printsupport/kernel/qprintengine_win.cpp index 1adfcfa630..bf39b9309d 100644 --- a/src/printsupport/kernel/qprintengine_win.cpp +++ b/src/printsupport/kernel/qprintengine_win.cpp @@ -850,14 +850,13 @@ void QWin32PrintEngine::drawPolygon(const QPointF *points, int pointCount, Polyg QWin32PrintEnginePrivate::~QWin32PrintEnginePrivate() { - if (hdc) - release(); + release(); } void QWin32PrintEnginePrivate::initialize() { - if (hdc) - release(); + release(); + Q_ASSERT(!hPrinter); Q_ASSERT(!hdc); Q_ASSERT(!devMode); @@ -884,18 +883,19 @@ void QWin32PrintEnginePrivate::initialize() if (!ok) { qErrnoWarning("QWin32PrintEngine::initialize: GetPrinter failed"); - GlobalUnlock(pInfo); - GlobalFree(hMem); - ClosePrinter(hPrinter); - pInfo = 0; - hMem = 0; - hPrinter = 0; + release(); return; } devMode = pInfo->pDevMode; hdc = CreateDC(NULL, reinterpret_cast<const wchar_t *>(m_printDevice.id().utf16()), 0, devMode); + if (!hdc) { + qErrnoWarning("QWin32PrintEngine::initialize: CreateDC failed"); + release(); + return; + } + Q_ASSERT(hPrinter); Q_ASSERT(pInfo); @@ -947,19 +947,17 @@ void QWin32PrintEnginePrivate::initHDC() void QWin32PrintEnginePrivate::release() { - if (hdc == 0) - return; - if (globalDevMode) { // Devmode comes from print dialog GlobalUnlock(globalDevMode); - } else { // Devmode comes from initialize... + } else if (hMem) { // Devmode comes from initialize... // devMode is a part of the same memory block as pInfo so one free is enough... GlobalUnlock(hMem); GlobalFree(hMem); } if (hPrinter) ClosePrinter(hPrinter); - DeleteDC(hdc); + if (hdc) + DeleteDC(hdc); hdc = 0; hPrinter = 0; diff --git a/src/printsupport/kernel/qprintengine_win_p.h b/src/printsupport/kernel/qprintengine_win_p.h index 9b944d5921..f698992425 100644 --- a/src/printsupport/kernel/qprintengine_win_p.h +++ b/src/printsupport/kernel/qprintengine_win_p.h @@ -125,6 +125,7 @@ public: globalDevMode(0), devMode(0), pInfo(0), + hMem(0), hdc(0), mode(QPrinter::ScreenResolution), state(QPrinter::Idle), diff --git a/src/printsupport/kernel/qprinter.cpp b/src/printsupport/kernel/qprinter.cpp index bdc9a98f2e..c758d9f4ea 100644 --- a/src/printsupport/kernel/qprinter.cpp +++ b/src/printsupport/kernel/qprinter.cpp @@ -120,9 +120,9 @@ QPrinterInfo QPrinterPrivate::findValidPrinter(const QPrinterInfo &printer) if (printerToUse.isNull()) { printerToUse = QPrinterInfo::defaultPrinter(); if (printerToUse.isNull()) { - QList<QPrinterInfo> availablePrinters = QPrinterInfo::availablePrinters(); - if (!availablePrinters.isEmpty()) - printerToUse = availablePrinters.at(0); + QStringList availablePrinterNames = QPrinterInfo::availablePrinterNames(); + if (!availablePrinterNames.isEmpty()) + printerToUse = QPrinterInfo::printerInfo(availablePrinterNames.at(0)); } } return printerToUse; |