summaryrefslogtreecommitdiffstats
path: root/src/printsupport/kernel/qprintengine_win.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@theqtcompany.com>2015-03-05 16:52:42 +0100
committerFriedemann Kleint <Friedemann.Kleint@theqtcompany.com>2015-03-09 07:56:40 +0000
commit3ff80d1fe4c35f68bcebde7dccfde7b0fb03014f (patch)
treeea8ba3b96bc8ad82ebf9438527711a2c16f7b082 /src/printsupport/kernel/qprintengine_win.cpp
parent1cd8d67d5f9bb0cd17147481544db8fb9342354d (diff)
Windows printing: Add more error reporting.
Task-number: QTCREATORBUG-13742 Change-Id: Ic234c7e86531c0924ddc03c63cd50b442bdcc9e9 Reviewed-by: Andy Shaw <andy.shaw@digia.com>
Diffstat (limited to 'src/printsupport/kernel/qprintengine_win.cpp')
-rw-r--r--src/printsupport/kernel/qprintengine_win.cpp42
1 files changed, 35 insertions, 7 deletions
diff --git a/src/printsupport/kernel/qprintengine_win.cpp b/src/printsupport/kernel/qprintengine_win.cpp
index 65af6fadf7..5b3184a20d 100644
--- a/src/printsupport/kernel/qprintengine_win.cpp
+++ b/src/printsupport/kernel/qprintengine_win.cpp
@@ -89,6 +89,17 @@ QWin32PrintEngine::QWin32PrintEngine(QPrinter::PrinterMode mode)
d->initialize();
}
+static QByteArray msgBeginFailed(const char *function, const DOCINFO &d)
+{
+ QString result;
+ QTextStream str(&result);
+ str << "QWin32PrintEngine::begin: " << function << " failed, document \""
+ << QString::fromWCharArray(d.lpszDocName) << '"';
+ if (d.lpszOutput[0])
+ str << ", file \"" << QString::fromWCharArray(d.lpszOutput) << '"';
+ return result.toLocal8Bit();
+}
+
bool QWin32PrintEngine::begin(QPaintDevice *pdev)
{
Q_D(QWin32PrintEngine);
@@ -123,12 +134,12 @@ bool QWin32PrintEngine::begin(QPaintDevice *pdev)
if (d->printToFile)
di.lpszOutput = d->fileName.isEmpty() ? L"FILE:" : reinterpret_cast<const wchar_t *>(d->fileName.utf16());
if (ok && StartDoc(d->hdc, &di) == SP_ERROR) {
- qErrnoWarning("QWin32PrintEngine::begin: StartDoc failed");
+ qErrnoWarning(msgBeginFailed("StartDoc", di));
ok = false;
}
if (StartPage(d->hdc) <= 0) {
- qErrnoWarning("QWin32PrintEngine::begin: StartPage failed");
+ qErrnoWarning(msgBeginFailed("StartPage", di));
ok = false;
}
@@ -175,8 +186,10 @@ bool QWin32PrintEngine::end()
return true;
if (d->hdc) {
- EndPage(d->hdc); // end; printing done
- EndDoc(d->hdc);
+ if (EndPage(d->hdc) <= 0) // end; printing done
+ qErrnoWarning("QWin32PrintEngine::end: EndPage failed (%p)", d->hdc);
+ if (EndDoc(d->hdc) <= 0)
+ qErrnoWarning("QWin32PrintEngine::end: EndDoc failed");
}
d->state = QPrinter::Idle;
@@ -201,10 +214,8 @@ bool QWin32PrintEngine::newPage()
}
if (d->reinit) {
- if (!d->resetDC()) {
- qErrnoWarning("QWin32PrintEngine::newPage: ResetDC failed");
+ if (!d->resetDC())
return false;
- }
d->reinit = false;
}
@@ -241,6 +252,8 @@ bool QWin32PrintEngine::newPage()
d->reinit = false;
}
success = (StartPage(d->hdc) > 0);
+ if (!success)
+ qErrnoWarning("Win32PrintEngine::newPage: StartPage failed (2)");
}
if (!success) {
d->state = QPrinter::Aborted;
@@ -966,6 +979,21 @@ void QWin32PrintEnginePrivate::doReinit()
}
}
+bool QWin32PrintEnginePrivate::resetDC()
+{
+ if (!hdc) {
+ qWarning() << "ResetDC() called with null hdc.";
+ return false;
+ }
+ const HDC oldHdc = hdc;
+ const HDC hdc = ResetDC(oldHdc, devMode);
+ if (!hdc) {
+ const int lastError = GetLastError();
+ qErrnoWarning(lastError, "ResetDC() on %p failed (%d)", oldHdc, lastError);
+ }
+ return hdc != 0;
+}
+
static int indexOfId(const QList<QPrint::InputSlot> &inputSlots, QPrint::InputSlotId id)
{
for (int i = 0; i < inputSlots.size(); ++i) {