summaryrefslogtreecommitdiffstats
path: root/src/plugins/printsupport
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@digia.com>2013-10-16 15:32:48 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-10-17 15:58:32 +0200
commit39eb7e0b898da9302afa23087913af45844135b5 (patch)
treeddc98032a20b54859ff63cc3fd7bb1c32d4bf9ac /src/plugins/printsupport
parente7cf7c1c65ff2379621603742f2b9ae344e40f69 (diff)
Refresh CUPS printer list when QPrinterInfo.availablePrinters() is called.
Introduce freeCupsPrinters() thus fixing a bug in the old deallocation code which would first set m_cupsPrintersCount = 0 and then pass it to cupsFreeDests(). Task-number: QTBUG-33666 Change-Id: I94c51cb390761a669a9cbd589c1131cfb51354c3 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/plugins/printsupport')
-rw-r--r--src/plugins/printsupport/cups/qcupsprintersupport.cpp23
-rw-r--r--src/plugins/printsupport/cups/qcupsprintersupport_p.h2
2 files changed, 19 insertions, 6 deletions
diff --git a/src/plugins/printsupport/cups/qcupsprintersupport.cpp b/src/plugins/printsupport/cups/qcupsprintersupport.cpp
index f41d4f5047..b9f0c394f8 100644
--- a/src/plugins/printsupport/cups/qcupsprintersupport.cpp
+++ b/src/plugins/printsupport/cups/qcupsprintersupport.cpp
@@ -66,8 +66,7 @@ QCupsPrinterSupport::QCupsPrinterSupport() : QPlatformPrinterSupport(),
QCupsPrinterSupport::~QCupsPrinterSupport()
{
- if (cupsFreeDests)
- cupsFreeDests(m_cupsPrintersCount, m_cupsPrinters);
+ freeCupsPrinters();
}
QPrintEngine *QCupsPrinterSupport::createNativePrintEngine(QPrinter::PrinterMode printerMode)
@@ -98,14 +97,20 @@ void QCupsPrinterSupport::loadCups()
cupsGetOption = (CupsGetOption) m_cups.resolve("cupsGetOption");
}
+void QCupsPrinterSupport::freeCupsPrinters()
+{
+ if (cupsFreeDests && m_cupsPrintersCount) {
+ cupsFreeDests(m_cupsPrintersCount, m_cupsPrinters);
+ m_cupsPrintersCount = 0;
+ m_cupsPrinters = 0;
+ }
+}
+
void QCupsPrinterSupport::loadCupsPrinters()
{
- m_cupsPrintersCount = 0;
+ freeCupsPrinters();
m_printers.clear();
- if (cupsFreeDests)
- cupsFreeDests(m_cupsPrintersCount, m_cupsPrinters);
-
if (cupsGetDests)
m_cupsPrintersCount = cupsGetDests(&m_cupsPrinters);
@@ -122,6 +127,12 @@ void QCupsPrinterSupport::loadCupsPrinters()
}
}
+QList<QPrinterInfo> QCupsPrinterSupport::availablePrinters()
+{
+ loadCupsPrinters();
+ return QPlatformPrinterSupport::availablePrinters();
+}
+
QString QCupsPrinterSupport::printerOption(const QPrinterInfo &printer, const QString &key) const
{
return cupsOption(printerIndex(printer), key);
diff --git a/src/plugins/printsupport/cups/qcupsprintersupport_p.h b/src/plugins/printsupport/cups/qcupsprintersupport_p.h
index e9fe24203e..d42c0d2630 100644
--- a/src/plugins/printsupport/cups/qcupsprintersupport_p.h
+++ b/src/plugins/printsupport/cups/qcupsprintersupport_p.h
@@ -68,12 +68,14 @@ public:
virtual QPaintEngine *createPaintEngine(QPrintEngine *printEngine, QPrinter::PrinterMode);
virtual QList<QPrinter::PaperSize> supportedPaperSizes(const QPrinterInfo &) const;
virtual QList<QPair<QString, QSizeF> > supportedSizesWithNames(const QPrinterInfo &) const;
+ virtual QList<QPrinterInfo> availablePrinters();
virtual QString printerOption(const QPrinterInfo &printer, const QString &key) const;
virtual PrinterOptions printerOptions(const QPrinterInfo &printer) const;
private:
void loadCups();
void loadCupsPrinters();
+ void freeCupsPrinters();
QString cupsOption(int i, const QString &key) const;
QLibrary m_cups;