summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWladimir Leuschner <wladimir.leuschner@qt.io>2023-11-08 12:35:11 +0100
committerWladimir Leuschner <wladimir.leuschner@qt.io>2023-11-08 18:24:17 +0100
commit7e8ae9cf12611439462e8b26946473fd6492afcc (patch)
tree72e3cb479de66f0077d4eb803336bb29dbe6b9f5
parent19aa21b595c7e523b6cc941580e55d8c6fc50a6d (diff)
Use Desktop Handle in case of no valid app HWND for QPrintDialog
The call Win32 API PrintDlgEx needs in the PRINTDLGEX struct a valid window handle for hwndOwner to show up. In case there is no window created, as seen in the example, the call to PrintDlgEx fails with COM error code E_HANDLE. Using the Desktop HWND, in case of no valid app HWND creates a valid call to PrintDlgEx with showing up the dialog. Pick-to: 6.6 Fixes: QTBUG-118899 Change-Id: Ie7009c8e6e8285a0b6312e310b3d065c532f9e17 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
-rw-r--r--src/printsupport/dialogs/qprintdialog_win.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/printsupport/dialogs/qprintdialog_win.cpp b/src/printsupport/dialogs/qprintdialog_win.cpp
index 6ac3bea4c0..6d8c2d0f4d 100644
--- a/src/printsupport/dialogs/qprintdialog_win.cpp
+++ b/src/printsupport/dialogs/qprintdialog_win.cpp
@@ -101,7 +101,12 @@ static void qt_win_setup_PRINTDLGEX(PRINTDLGEX *pd, QWindow *parentWindow,
if (d->ep->printToFile)
pd->Flags |= PD_PRINTTOFILE;
- pd->hwndOwner = parentWindow ? (HWND)QGuiApplication::platformNativeInterface()->nativeResourceForWindow("handle", parentWindow) : 0;
+
+ WId wId = parentWindow ? parentWindow->winId() : 0;
+ //QTBUG-118899 PrintDlg needs valid window handle in hwndOwner
+ //So in case there is no valid handle in the application,
+ //use the desktop as valid handle.
+ pd->hwndOwner = wId != 0 ? HWND(wId) : GetDesktopWindow();
pd->lpPageRanges[0].nFromPage = qMax(pdlg->fromPage(), pdlg->minPage());
pd->lpPageRanges[0].nToPage = (pdlg->toPage() > 0) ? qMin(pdlg->toPage(), pdlg->maxPage()) : 1;
pd->nCopies = d->printer->copyCount();