diff options
Diffstat (limited to 'src/printsupport/dialogs')
-rw-r--r-- | src/printsupport/dialogs/qabstractprintdialog_p.h | 2 | ||||
-rw-r--r-- | src/printsupport/dialogs/qpagesetupdialog_mac.mm | 2 | ||||
-rw-r--r-- | src/printsupport/dialogs/qpagesetupdialog_unix.cpp | 2 | ||||
-rw-r--r-- | src/printsupport/dialogs/qpagesetupdialog_win.cpp | 18 | ||||
-rw-r--r-- | src/printsupport/dialogs/qprintdialog_mac.mm | 15 | ||||
-rw-r--r-- | src/printsupport/dialogs/qprintdialog_unix.cpp | 16 | ||||
-rw-r--r-- | src/printsupport/dialogs/qprintdialog_win.cpp | 36 | ||||
-rw-r--r-- | src/printsupport/dialogs/qprintpreviewdialog.cpp | 10 |
8 files changed, 62 insertions, 39 deletions
diff --git a/src/printsupport/dialogs/qabstractprintdialog_p.h b/src/printsupport/dialogs/qabstractprintdialog_p.h index baf6027c10..40f25d454a 100644 --- a/src/printsupport/dialogs/qabstractprintdialog_p.h +++ b/src/printsupport/dialogs/qabstractprintdialog_p.h @@ -20,6 +20,8 @@ #include "private/qdialog_p.h" #include "QtPrintSupport/qabstractprintdialog.h" +#include <QtCore/qpointer.h> + QT_REQUIRE_CONFIG(printdialog); QT_BEGIN_NAMESPACE diff --git a/src/printsupport/dialogs/qpagesetupdialog_mac.mm b/src/printsupport/dialogs/qpagesetupdialog_mac.mm index c75609c43c..046a1021af 100644 --- a/src/printsupport/dialogs/qpagesetupdialog_mac.mm +++ b/src/printsupport/dialogs/qpagesetupdialog_mac.mm @@ -13,6 +13,8 @@ #include <QtPrintSupport/private/qprintengine_mac_p.h> +#include <QtCore/private/qcore_mac_p.h> + QT_USE_NAMESPACE @class QT_MANGLE_NAMESPACE(QCocoaPageLayoutDelegate); diff --git a/src/printsupport/dialogs/qpagesetupdialog_unix.cpp b/src/printsupport/dialogs/qpagesetupdialog_unix.cpp index 176037d6ce..6c65eafc21 100644 --- a/src/printsupport/dialogs/qpagesetupdialog_unix.cpp +++ b/src/printsupport/dialogs/qpagesetupdialog_unix.cpp @@ -264,7 +264,7 @@ void QPageSetupWidget::initUnits() m_ui.unitCombo->addItem(tr("Didot (DD)"), QVariant::fromValue(QPageLayout::Didot)); m_ui.unitCombo->addItem(tr("Cicero (CC)"), QVariant::fromValue(QPageLayout::Cicero)); - // Initailly default to locale measurement system, mm if metric, in otherwise + // Initially default to locale measurement system, mm if metric, in otherwise m_ui.unitCombo->setCurrentIndex(QLocale().measurementSystem() != QLocale::MetricSystem); } diff --git a/src/printsupport/dialogs/qpagesetupdialog_win.cpp b/src/printsupport/dialogs/qpagesetupdialog_win.cpp index d7004ec3f1..1d2fdc98b7 100644 --- a/src/printsupport/dialogs/qpagesetupdialog_win.cpp +++ b/src/printsupport/dialogs/qpagesetupdialog_win.cpp @@ -20,7 +20,7 @@ QPageSetupDialog::QPageSetupDialog(QPrinter *printer, QWidget *parent) } QPageSetupDialog::QPageSetupDialog(QWidget *parent) - : QDialog(*(new QPageSetupDialogPrivate(0)), parent) + : QDialog(*(new QPageSetupDialogPrivate(nullptr)), parent) { setWindowTitle(QCoreApplication::translate("QPrintPreviewDialog", "Page Setup")); setAttribute(Qt::WA_DontShowOnScreen); @@ -41,7 +41,7 @@ int QPageSetupDialog::exec() psd.lStructSize = sizeof(PAGESETUPDLG); // we need a temp DEVMODE struct if we don't have a global DEVMODE - HGLOBAL hDevMode = 0; + HGLOBAL hDevMode = nullptr; int devModeSize = 0; if (!engine->globalDevMode()) { devModeSize = sizeof(DEVMODE) + ep->devMode->dmDriverExtra; @@ -63,9 +63,10 @@ int QPageSetupDialog::exec() parent = parent ? parent->window() : QApplication::activeWindow(); Q_ASSERT(!parent ||parent->testAttribute(Qt::WA_WState_Created)); - QWindow *parentWindow = parent ? parent->windowHandle() : 0; - psd.hwndOwner = parentWindow ? (HWND)QGuiApplication::platformNativeInterface()->nativeResourceForWindow("handle", parentWindow) : 0; - + QWindow *parentWindow = parent ? parent->windowHandle() : nullptr; + psd.hwndOwner = parentWindow + ? HWND(QGuiApplication::platformNativeInterface()->nativeResourceForWindow("handle", parentWindow)) + : nullptr; psd.Flags = PSD_MARGINS; QPageLayout layout = d->printer->pageLayout(); switch (layout.units()) { @@ -122,10 +123,10 @@ int QPageSetupDialog::exec() pageSize = QPageSize(unitSize, layout.units() == QPageLayout::Inch ? QPageSize::Inch : QPageSize::Millimeter); } - layout.setPageSize(pageSize); + layout.setPageSize(pageSize, layout.minimumMargins()); const QMarginsF margins(psd.rtMargin.left, psd.rtMargin.top, psd.rtMargin.right, psd.rtMargin.bottom); - layout.setMargins(margins / multiplier); + layout.setMargins(margins / multiplier, QPageLayout::OutOfBoundsPolicy::Clamp); d->printer->setPageLayout(layout); // copy from our temp DEVMODE struct @@ -133,7 +134,8 @@ int QPageSetupDialog::exec() // Make sure memory is allocated if (ep->ownsDevMode && ep->devMode) free(ep->devMode); - ep->devMode = (DEVMODE *) malloc(devModeSize); + ep->devMode = reinterpret_cast<DEVMODE *>(malloc(devModeSize)); + QWin32PrintEnginePrivate::initializeDevMode(ep->devMode); ep->ownsDevMode = true; // Copy diff --git a/src/printsupport/dialogs/qprintdialog_mac.mm b/src/printsupport/dialogs/qprintdialog_mac.mm index fc2432240d..fa4fac1884 100644 --- a/src/printsupport/dialogs/qprintdialog_mac.mm +++ b/src/printsupport/dialogs/qprintdialog_mac.mm @@ -118,7 +118,7 @@ QT_USE_NAMESPACE // happen synchronously after the dialog is accepted, so we can defer // the opening of the file to the next runloop pass. dispatch_async(dispatch_get_main_queue(), ^{ - [NSWorkspace.sharedWorkspace openFile:fileName.toNSString()]; + [NSWorkspace.sharedWorkspace openURL:[NSURL fileURLWithPath:fileName.toNSString()]]; }); } else if (dest == kPMDestinationProcessPDF) { qWarning("Printing workflows are not supported"); @@ -187,7 +187,13 @@ void QPrintDialogPrivate::openCocoaPrintPanel(Qt::WindowModality modality) printInfo = static_cast<QMacPrintEngine *>(printer->printEngine())->printInfo(); [printInfo retain]; } else { - printInfo = [NSPrintInfo.sharedPrintInfo retain]; + const QPageLayout pageLayout = printer->pageLayout(); + // initialize the printInfo using the dictionary from the application-wide print info + const auto dictionary = [NSPrintInfo.sharedPrintInfo dictionary]; + printInfo = [[NSPrintInfo alloc] initWithDictionary:dictionary]; + printInfo.orientation = pageLayout.orientation() == QPageLayout::Landscape + ? NSPaperOrientationLandscape : NSPaperOrientationPortrait; + printInfo.paperSize = pageLayout.pageSize().size(QPageSize::Point).toCGSize(); } // It seems the only way that PM lets you use all is if the minimum @@ -232,8 +238,8 @@ void QPrintDialogPrivate::openCocoaPrintPanel(Qt::WindowModality modality) int rval = [printPanel runModalWithPrintInfo:printInfo]; [delegate printPanelDidEnd:printPanel returnCode:rval contextInfo:q]; } else { - Q_ASSERT(q->parentWidget()); - QWindow *parentWindow = q->parentWidget()->windowHandle(); + Q_ASSERT(q->window()); + QWindow *parentWindow = q->window()->windowHandle(); NSWindow *window = static_cast<NSWindow *>(qApp->platformNativeInterface()->nativeResourceForWindow("nswindow", parentWindow)); [printPanel beginSheetWithPrintInfo:printInfo modalForWindow:window @@ -265,6 +271,7 @@ QPrintDialog::QPrintDialog(QWidget *parent) QPrintDialog::~QPrintDialog() { + hide(); } int QPrintDialog::exec() diff --git a/src/printsupport/dialogs/qprintdialog_unix.cpp b/src/printsupport/dialogs/qprintdialog_unix.cpp index 96ba73d5fa..aab5e2c7f0 100644 --- a/src/printsupport/dialogs/qprintdialog_unix.cpp +++ b/src/printsupport/dialogs/qprintdialog_unix.cpp @@ -83,7 +83,7 @@ Print dialog class declarations Layout in qprintpropertieswidget.ui */ -static void initResources() +static void _q_pdu_initResources() { Q_INIT_RESOURCE(qprintdialog); } @@ -322,7 +322,7 @@ void QPrintPropertiesDialog::reject() void QPrintPropertiesDialog::accept() { -#if QT_CONFIG(cups) +#if QT_CONFIG(cups) && QT_CONFIG(messagebox) if (widget.pageSetup->hasPpdConflict()) { widget.tabs->setCurrentWidget(widget.tabPage); const QMessageBox::StandardButton answer = QMessageBox::warning(this, tr("Page Setup Conflicts"), @@ -584,7 +584,7 @@ QPrintDialogPrivate::QPrintDialogPrivate() : top(nullptr), bottom(nullptr), buttons(nullptr), collapseButton(nullptr), explicitDuplexMode(QPrint::DuplexAuto) { - initResources(); + _q_pdu_initResources(); } QPrintDialogPrivate::~QPrintDialogPrivate() @@ -675,7 +675,7 @@ void QPrintDialogPrivate::selectPrinter(const QPrinter::OutputFormat outputForma options.grayscale->setChecked(true); // duplex priorities to be as follows: - // 1) a user-selected duplex value in the dialog has highest prority + // 1) a user-selected duplex value in the dialog has highest priority // 2) duplex value set in the QPrinter QPrint::DuplexMode duplex; if (explicitDuplexMode != QPrint::DuplexAuto && supportedDuplexMode.contains(explicitDuplexMode)) @@ -990,7 +990,7 @@ int QPrintDialog::exec() void QPrintDialog::accept() { Q_D(QPrintDialog); -#if QT_CONFIG(cups) +#if QT_CONFIG(cups) && QT_CONFIG(messagebox) if (d->options.pagesRadioButton->isChecked() && printer()->pageRanges().isEmpty()) { QMessageBox::critical(this, tr("Invalid Pages Definition"), tr("%1 does not follow the correct syntax. Please use ',' to separate " @@ -1328,9 +1328,9 @@ QUnixPrintWidget::QUnixPrintWidget(QPrinter *printer, QWidget *parent) cur = home; else if (!cur.endsWith(u'/')) cur += u'/'; - if (QGuiApplication::platformName() == QStringLiteral("xcb")) { + if (QGuiApplication::platformName() == "xcb"_L1) { if (printer->docName().isEmpty()) { - cur += QStringLiteral("print.pdf"); + cur += "print.pdf"_L1; } else { #if QT_CONFIG(regularexpression) const QRegularExpression re(QStringLiteral("(.*)\\.\\S+")); @@ -1340,7 +1340,7 @@ QUnixPrintWidget::QUnixPrintWidget(QPrinter *printer, QWidget *parent) else #endif cur += printer->docName(); - cur += QStringLiteral(".pdf"); + cur += ".pdf"_L1; } } // xcb diff --git a/src/printsupport/dialogs/qprintdialog_win.cpp b/src/printsupport/dialogs/qprintdialog_win.cpp index 9d662d2e8e..6d8c2d0f4d 100644 --- a/src/printsupport/dialogs/qprintdialog_win.cpp +++ b/src/printsupport/dialogs/qprintdialog_win.cpp @@ -42,7 +42,7 @@ public: QWin32PrintEnginePrivate *ep; }; -static void qt_win_setup_PRINTDLGEX(PRINTDLGEX *pd, QWidget *parent, +static void qt_win_setup_PRINTDLGEX(PRINTDLGEX *pd, QWindow *parentWindow, QPrintDialog *pdlg, QPrintDialogPrivate *d, HGLOBAL *tempDevNames) { @@ -101,9 +101,12 @@ static void qt_win_setup_PRINTDLGEX(PRINTDLGEX *pd, QWidget *parent, if (d->ep->printToFile) pd->Flags |= PD_PRINTTOFILE; - Q_ASSERT(parent); - QWindow *parentWindow = parent->windowHandle(); - 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(); @@ -182,15 +185,20 @@ int QPrintDialog::exec() int QPrintDialogPrivate::openWindowsPrintDialogModally() { Q_Q(QPrintDialog); - QWidget *parent = q->parentWidget(); - if (parent) - parent = parent->window(); - else - parent = QApplication::activeWindow(); - - // If there is no window, fall back to the print dialog itself - if (parent == 0) - parent = q; + QWindow *parentWindow = q->windowHandle() ? q->windowHandle()->transientParent() : nullptr; + if (!parentWindow) { + QWidget *parent = q->parentWidget(); + if (parent) + parent = parent->window(); + else + parent = QApplication::activeWindow(); + + // If there is no window, fall back to the print dialog itself + if (!parent) + parent = q; + + parentWindow = parent->windowHandle(); + } q->QDialog::setVisible(true); @@ -205,7 +213,7 @@ int QPrintDialogPrivate::openWindowsPrintDialogModally() memset(&pd, 0, sizeof(PRINTDLGEX)); pd.lStructSize = sizeof(PRINTDLGEX); pd.lpPageRanges = &pageRange; - qt_win_setup_PRINTDLGEX(&pd, parent, q, this, tempDevNames); + qt_win_setup_PRINTDLGEX(&pd, parentWindow, q, this, tempDevNames); do { done = true; diff --git a/src/printsupport/dialogs/qprintpreviewdialog.cpp b/src/printsupport/dialogs/qprintpreviewdialog.cpp index b1d5d8c38f..2028287b55 100644 --- a/src/printsupport/dialogs/qprintpreviewdialog.cpp +++ b/src/printsupport/dialogs/qprintpreviewdialog.cpp @@ -28,7 +28,9 @@ #include <QtWidgets/qformlayout.h> #include <QtWidgets/qlabel.h> -static void initResources() +#include <QtCore/qpointer.h> + +static void _q_ppd_initResources() { static bool resourcesInitialized = false; if (!resourcesInitialized) { @@ -61,7 +63,7 @@ public: { bool replacePercent = false; if (input.endsWith(u'%')) { - input = input.left(input.length() - 1); + input = input.left(input.size() - 1); replacePercent = true; } State state = QDoubleValidator::validate(input, pos); @@ -192,7 +194,7 @@ void QPrintPreviewDialogPrivate::init(QPrinter *_printer) { Q_Q(QPrintPreviewDialog); - initResources(); + _q_ppd_initResources(); if (_printer) { preview = new QPrintPreviewWidget(_printer, q); @@ -450,7 +452,7 @@ void QPrintPreviewDialogPrivate::updatePageNumLabel() Q_Q(QPrintPreviewDialog); int numPages = preview->pageCount(); - int maxChars = QString::number(numPages).length(); + int maxChars = QString::number(numPages).size(); pageNumLabel->setText(QString::fromLatin1("/ %1").arg(numPages)); int cyphersWidth = q->fontMetrics().horizontalAdvance(QString().fill(u'8', maxChars)); int maxWidth = pageNumEdit->minimumSizeHint().width() + cyphersWidth; |