summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/vcl/jobdata.hxx2
-rw-r--r--vcl/generic/print/genprnpsp.cxx13
-rw-r--r--vcl/unx/generic/printer/cupsmgr.cxx2
-rw-r--r--vcl/unx/generic/printer/jobdata.cxx18
4 files changed, 25 insertions, 10 deletions
diff --git a/include/vcl/jobdata.hxx b/include/vcl/jobdata.hxx
index 974c04998eef..af78db5aaa86 100644
--- a/include/vcl/jobdata.hxx
+++ b/include/vcl/jobdata.hxx
@@ -34,6 +34,7 @@ enum type {
struct VCL_DLLPUBLIC JobData
{
int m_nCopies;
+ bool m_bCollate;
int m_nLeftMarginAdjust;
int m_nRightMarginAdjust;
int m_nTopMarginAdjust;
@@ -50,6 +51,7 @@ struct VCL_DLLPUBLIC JobData
JobData() :
m_nCopies( 1 ),
+ m_bCollate(false),
m_nLeftMarginAdjust( 0 ),
m_nRightMarginAdjust( 0 ),
m_nTopMarginAdjust( 0 ),
diff --git a/vcl/generic/print/genprnpsp.cxx b/vcl/generic/print/genprnpsp.cxx
index 6b8c8ce62b6d..9d28e7f60fdc 100644
--- a/vcl/generic/print/genprnpsp.cxx
+++ b/vcl/generic/print/genprnpsp.cxx
@@ -808,16 +808,9 @@ sal_uLong PspSalInfoPrinter::GetCapabilities( const ImplJobSetup* pJobSetup, sal
return 0xffff;
case PRINTER_CAPABILITIES_COLLATECOPIES:
{
- // see if the PPD contains a value to set Collate to True
- JobData aData;
- JobData::constructFromStreamBuffer( pJobSetup->mpDriverData, pJobSetup->mnDriverDataLen, aData );
-
- const PPDKey* pKey = aData.m_pParser ? aData.m_pParser->getKey( OUString("Collate") ) : NULL;
- const PPDValue* pVal = pKey ? pKey->getValue(OUString("True")) : NULL;
-
// PPDs don't mention the number of possible collated copies.
// so let's guess as many as we want ?
- return pVal ? 0xffff : 0;
+ return 0xffff;
}
case PRINTER_CAPABILITIES_SETORIENTATION:
return 1;
@@ -836,7 +829,7 @@ sal_uLong PspSalInfoPrinter::GetCapabilities( const ImplJobSetup* pJobSetup, sal
return 1;
else
{
- // see if the PPD contains a value to set Collate to True
+ // see if the PPD contains a value to set PDF device
JobData aData = PrinterInfoManager::get().getPrinterInfo( pJobSetup->maPrinterName );
if( pJobSetup->mpDriverData )
JobData::constructFromStreamBuffer( pJobSetup->mpDriverData, pJobSetup->mnDriverDataLen, aData );
@@ -846,7 +839,7 @@ sal_uLong PspSalInfoPrinter::GetCapabilities( const ImplJobSetup* pJobSetup, sal
return PrinterInfoManager::get().checkFeatureToken( pJobSetup->maPrinterName, "external_dialog" ) ? 1 : 0;
case PRINTER_CAPABILITIES_USEPULLMODEL:
{
- // see if the PPD contains a value to set Collate to True
+ // see if the PPD contains a value to set PDF device
JobData aData = PrinterInfoManager::get().getPrinterInfo( pJobSetup->maPrinterName );
if( pJobSetup->mpDriverData )
JobData::constructFromStreamBuffer( pJobSetup->mpDriverData, pJobSetup->mnDriverDataLen, aData );
diff --git a/vcl/unx/generic/printer/cupsmgr.cxx b/vcl/unx/generic/printer/cupsmgr.cxx
index 52b6bfbc5509..069df7df581b 100644
--- a/vcl/unx/generic/printer/cupsmgr.cxx
+++ b/vcl/unx/generic/printer/cupsmgr.cxx
@@ -631,6 +631,8 @@ void CUPSManager::getOptionsFromDocumentSetup( const JobData& rJob, bool bBanner
{
OString aVal( OString::number( rJob.m_nCopies ) );
rNumOptions = cupsAddOption( "copies", aVal.getStr(), rNumOptions, (cups_option_t**)rOptions );
+ aVal = OString::boolean(rJob.m_bCollate);
+ rNumOptions = cupsAddOption( "collate", aVal.getStr(), rNumOptions, (cups_option_t**)rOptions );
}
if( ! bBanner )
{
diff --git a/vcl/unx/generic/printer/jobdata.cxx b/vcl/unx/generic/printer/jobdata.cxx
index adf9d418bbdf..117f677d6dea 100644
--- a/vcl/unx/generic/printer/jobdata.cxx
+++ b/vcl/unx/generic/printer/jobdata.cxx
@@ -31,6 +31,7 @@ using namespace psp;
JobData& JobData::operator=(const JobData& rRight)
{
m_nCopies = rRight.m_nCopies;
+ m_bCollate = rRight.m_bCollate;
m_nLeftMarginAdjust = rRight.m_nLeftMarginAdjust;
m_nRightMarginAdjust = rRight.m_nRightMarginAdjust;
m_nTopMarginAdjust = rRight.m_nTopMarginAdjust;
@@ -54,6 +55,11 @@ JobData& JobData::operator=(const JobData& rRight)
void JobData::setCollate( bool bCollate )
{
+ if (m_nPDFDevice > 0)
+ {
+ m_bCollate = bCollate;
+ return;
+ }
const PPDParser* pParser = m_aContext.getParser();
if( pParser )
{
@@ -133,6 +139,13 @@ bool JobData::getStreamBuffer( void*& pData, int& bytes )
aLine.append(static_cast<sal_Int32>(m_nCopies));
aStream.WriteLine(aLine.makeStringAndClear());
+ if (m_nPDFDevice > 0)
+ {
+ aLine.append("collate=");
+ aLine.append(OString::boolean(m_bCollate));
+ aStream.WriteLine(aLine.makeStringAndClear());
+ }
+
aLine.append("margindajustment=");
aLine.append(static_cast<sal_Int32>(m_nLeftMarginAdjust));
aLine.append(',');
@@ -191,6 +204,7 @@ bool JobData::constructFromStreamBuffer( void* pData, int bytes, JobData& rJobDa
const char printerEquals[] = "printer=";
const char orientatationEquals[] = "orientation=";
const char copiesEquals[] = "copies=";
+ const char collateEquals[] = "collate=";
const char margindajustmentEquals[] = "margindajustment=";
const char colordepthEquals[] = "colordepth=";
const char colordeviceEquals[] = "colordevice=";
@@ -217,6 +231,10 @@ bool JobData::constructFromStreamBuffer( void* pData, int bytes, JobData& rJobDa
bCopies = true;
rJobData.m_nCopies = aLine.copy(RTL_CONSTASCII_LENGTH(copiesEquals)).toInt32();
}
+ else if (aLine.startsWith(collateEquals))
+ {
+ rJobData.m_bCollate = aLine.copy(RTL_CONSTASCII_LENGTH(collateEquals)).toInt32();
+ }
else if (aLine.startsWith(margindajustmentEquals))
{
bMargin = true;