diff --git a/src/plugins/printsupport/cups/qcupsprintersupport.cpp b/src/plugins/printsupport/cups/qcupsprintersupport.cpp index 19e1df31f6..42a7a821f2 100644 --- a/src/plugins/printsupport/cups/qcupsprintersupport.cpp +++ b/src/plugins/printsupport/cups/qcupsprintersupport.cpp @@ -174,6 +174,11 @@ QStringList QCupsPrinterSupport::availablePrintDeviceIds() const } QString QCupsPrinterSupport::defaultPrintDeviceId() const +{ + return staticDefaultPrintDeviceId(); +} + +QString QCupsPrinterSupport::staticDefaultPrintDeviceId() { QString printerId; cups_dest_t *dests; diff --git a/src/plugins/printsupport/cups/qcupsprintersupport_p.h b/src/plugins/printsupport/cups/qcupsprintersupport_p.h index 42de28aec0..c2b4895c7f 100644 --- a/src/plugins/printsupport/cups/qcupsprintersupport_p.h +++ b/src/plugins/printsupport/cups/qcupsprintersupport_p.h @@ -71,6 +71,8 @@ public: QStringList availablePrintDeviceIds() const override; QString defaultPrintDeviceId() const override; + static QString staticDefaultPrintDeviceId(); + private: QString cupsOption(int i, const QString &key) const; }; diff --git a/src/plugins/printsupport/cups/qppdprintdevice.cpp b/src/plugins/printsupport/cups/qppdprintdevice.cpp index 51b93a0016..ea6336c4d1 100644 --- a/src/plugins/printsupport/cups/qppdprintdevice.cpp +++ b/src/plugins/printsupport/cups/qppdprintdevice.cpp @@ -39,6 +39,8 @@ #include "qppdprintdevice.h" +#include "qcupsprintersupport_p.h" + #include #include @@ -118,7 +120,12 @@ bool QPpdPrintDevice::isValid() const bool QPpdPrintDevice::isDefault() const { - return printerTypeFlags() & CUPS_PRINTER_DEFAULT; + // There seems to be a bug in cups in which printerTypeFlags + // returns CUPS_PRINTER_DEFAULT based only on system values, ignoring user lpoptions + // so we can't use that. And also there seems to be a bug in which dests returned + // by cupsGetNamedDest don't have is_default set at all so we can't use that either + // so go the long route and compare our id against the defaultPrintDeviceId + return id() == QCupsPrinterSupport::staticDefaultPrintDeviceId(); } QPrint::DeviceState QPpdPrintDevice::state() const