summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
Diffstat (limited to 'vcl')
-rw-r--r--vcl/generic/print/genprnpsp.cxx214
-rw-r--r--vcl/generic/print/genpspgraphics.cxx83
-rw-r--r--vcl/generic/print/printerjob.cxx4
-rw-r--r--vcl/inc/cupsmgr.hxx2
-rw-r--r--vcl/inc/generic/genprn.h3
-rw-r--r--vcl/inc/generic/genpspgraphics.h5
-rw-r--r--vcl/null/printerinfomanager.cxx2
-rw-r--r--vcl/unx/generic/printer/cupsmgr.cxx23
-rw-r--r--vcl/unx/generic/printer/printerinfomanager.cxx2
9 files changed, 116 insertions, 222 deletions
diff --git a/vcl/generic/print/genprnpsp.cxx b/vcl/generic/print/genprnpsp.cxx
index 022e26c8a7eb..cc379e556607 100644
--- a/vcl/generic/print/genprnpsp.cxx
+++ b/vcl/generic/print/genprnpsp.cxx
@@ -304,69 +304,29 @@ static bool passFileToCommandLine( const OUString& rFilename, const OUString& rC
}
#endif
-static bool sendAFax( const OUString& rFaxNumber, const OUString& rFileName, const OUString& rCommand )
+static std::vector<OUString> getFaxNumbers()
{
-#if defined( UNX )
- std::list< OUString > aFaxNumbers;
+ std::vector<OUString> aFaxNumbers;
- if( rFaxNumber.isEmpty() )
- {
- getPaLib();
- if( pFaxNrFunction )
- {
- OUString aNewNr;
- if( pFaxNrFunction( aNewNr ) )
- aFaxNumbers.push_back( aNewNr );
- }
- }
- else
+#if defined( UNX )
+ getPaLib();
+ if (pFaxNrFunction)
{
- sal_Int32 nIndex = 0;
- OUString aFaxes( rFaxNumber );
- OUString aBeginToken( "<Fax#>" );
- OUString aEndToken( "</Fax#>" );
- while( nIndex != -1 )
+ OUString aNewNr;
+ if( pFaxNrFunction( aNewNr ) )
{
- nIndex = aFaxes.indexOf( aBeginToken, nIndex );
- if( nIndex != -1 )
+ sal_Int32 nIndex = 0;
+ do
{
- sal_Int32 nBegin = nIndex + aBeginToken.getLength();
- nIndex = aFaxes.indexOf( aEndToken, nIndex );
- if( nIndex != -1 )
- {
- aFaxNumbers.push_back( aFaxes.copy( nBegin, nIndex-nBegin ) );
- nIndex += aEndToken.getLength();
- }
+ OUString sToken = aNewNr.getToken( 0, ';', nIndex );
+ aFaxNumbers.push_back(sToken);
}
+ while (nIndex >= 0);
}
}
-
- bool bSuccess = true;
- if( aFaxNumbers.begin() != aFaxNumbers.end() )
- {
- while( aFaxNumbers.begin() != aFaxNumbers.end() && bSuccess )
- {
- OUString aFaxNumber( aFaxNumbers.front() );
- aFaxNumbers.pop_front();
- OUString aCmdLine(
- rCommand.replaceAll("(PHONE)", aFaxNumber));
-#if OSL_DEBUG_LEVEL > 1
- fprintf( stderr, "sending fax to \"%s\"\n", OUStringToOString( aFaxNumber, osl_getThreadTextEncoding() ).getStr() );
#endif
- bSuccess = passFileToCommandLine( rFileName, aCmdLine, false );
- }
- }
- else
- bSuccess = false;
-
- // clean up temp file
- unlink(OUStringToOString(rFileName, osl_getThreadTextEncoding()).getStr());
- return bSuccess;
-#else
- (void)rFaxNumber; (void)rFileName; (void)rCommand;
- return false;
-#endif
+ return aFaxNumbers;
}
static bool createPdf( const OUString& rToFile, const OUString& rFromFile, const OUString& rCommandLine )
@@ -544,7 +504,7 @@ SalGraphics* PspSalInfoPrinter::AcquireGraphics()
if( ! m_pGraphics )
{
m_pGraphics = GetGenericInstance()->CreatePrintGraphics();
- m_pGraphics->Init( &m_aJobData, &m_aPrinterGfx, NULL, false, this );
+ m_pGraphics->Init(&m_aJobData, &m_aPrinterGfx, this);
pRet = m_pGraphics;
}
return pRet;
@@ -824,7 +784,19 @@ sal_uLong PspSalInfoPrinter::GetCapabilities( const ImplJobSetup* pJobSetup, sal
case PRINTER_CAPABILITIES_SETPAPER:
return 0;
case PRINTER_CAPABILITIES_FAX:
- return PrinterInfoManager::get().checkFeatureToken( pJobSetup->maPrinterName, "fax" ) ? 1 : 0;
+ {
+ // see if the PPD contains the fax4CUPS "Dial" option and that it's not set
+ // to "manually"
+ JobData aData = PrinterInfoManager::get().getPrinterInfo(pJobSetup->maPrinterName);
+ if( pJobSetup->mpDriverData )
+ JobData::constructFromStreamBuffer( pJobSetup->mpDriverData, pJobSetup->mnDriverDataLen, aData );
+ const PPDKey* pKey = aData.m_pParser ? aData.m_pParser->getKey(OUString("Dial")) : NULL;
+ const PPDValue* pValue = pKey ? aData.m_aContext.getValue(pKey) : NULL;
+ if (pValue && !pValue->m_aOption.equalsIgnoreAsciiCase("Manually"))
+ return 1;
+ return 0;
+ }
+
case PRINTER_CAPABILITIES_PDF:
if( PrinterInfoManager::get().checkFeatureToken( pJobSetup->maPrinterName, "pdf" ) )
return 1;
@@ -855,9 +827,7 @@ sal_uLong PspSalInfoPrinter::GetCapabilities( const ImplJobSetup* pJobSetup, sal
* SalPrinter
*/
PspSalPrinter::PspSalPrinter( SalInfoPrinter* pInfoPrinter )
- : m_bFax( false ),
- m_bPdf( false ),
- m_bSwallowFaxNo( false ),
+ : m_bPdf( false ),
m_bIsPDFWriterJob( false ),
m_pGraphics( NULL ),
m_nCopies( 1 ),
@@ -890,8 +860,6 @@ bool PspSalPrinter::StartJob(
{
OSL_TRACE("PspSalPrinter::StartJob");
GetSalData()->m_pInstance->jobStartedPrinterUpdate();
-
- m_bFax = false;
m_bPdf = false;
m_aFileName = pFileName ? *pFileName : OUString();
m_aTmpFile = OUString();
@@ -915,17 +883,6 @@ bool PspSalPrinter::StartJob(
while( nIndex != -1 )
{
OUString aToken( rInfo.m_aFeatures.getToken( 0, ',', nIndex ) );
- if( aToken.startsWith( "fax" ) )
- {
- m_bFax = true;
- m_aTmpFile = getTmpName();
- nMode = S_IRUSR | S_IWUSR;
-
- sal_Int32 nPos = 0;
- m_bSwallowFaxNo = aToken.getToken( 1, '=', nPos ).startsWith( "swallow" ) ? true : false;
-
- break;
- }
if( aToken.startsWith( "pdf=" ) )
{
m_bPdf = true;
@@ -957,22 +914,12 @@ bool PspSalPrinter::EndJob()
else
{
bSuccess = m_aPrintJob.EndJob();
- OSL_TRACE("PspSalPrinter::EndJob %d", bSuccess);
+ OSL_TRACE("PspSalPrinter::EndJob %d", bSuccess);
- if( bSuccess )
+ if( bSuccess && m_bPdf )
{
- // check for fax
- if( m_bFax )
- {
- const PrinterInfo& rInfo( PrinterInfoManager::get().getPrinterInfo( m_aJobData.m_aPrinterName ) );
- // sendAFax removes the file after use
- bSuccess = sendAFax( m_aFaxNr, m_aTmpFile, rInfo.m_aCommand );
- }
- else if( m_bPdf )
- {
- const PrinterInfo& rInfo( PrinterInfoManager::get().getPrinterInfo( m_aJobData.m_aPrinterName ) );
- bSuccess = createPdf( m_aFileName, m_aTmpFile, rInfo.m_aCommand );
- }
+ const PrinterInfo& rInfo( PrinterInfoManager::get().getPrinterInfo( m_aJobData.m_aPrinterName ) );
+ bSuccess = createPdf( m_aFileName, m_aTmpFile, rInfo.m_aCommand );
}
}
GetSalData()->m_pInstance->jobEndedPrinterUpdate();
@@ -992,8 +939,8 @@ SalGraphics* PspSalPrinter::StartPage( ImplJobSetup* pJobSetup, bool )
JobData::constructFromStreamBuffer( pJobSetup->mpDriverData, pJobSetup->mnDriverDataLen, m_aJobData );
m_pGraphics = GetGenericInstance()->CreatePrintGraphics();
- m_pGraphics->Init( &m_aJobData, &m_aPrinterGfx, m_bFax ? &m_aFaxNr : NULL,
- m_bSwallowFaxNo, m_pInfoPrinter );
+ m_pGraphics->Init(&m_aJobData, &m_aPrinterGfx, m_pInfoPrinter);
+
if( m_nCopies > 1 )
{
// in case user did not do anything (m_nCopies=1)
@@ -1063,6 +1010,8 @@ bool PspSalPrinter::StartJob( const OUString* i_pFileName, const OUString& i_rJo
m_bIsPDFWriterJob = true;
// reset IsLastPage
i_rController.setLastPage( false );
+ // is this a fax device
+ bool bFax = m_pInfoPrinter->GetCapabilities(i_pSetupData, PRINTER_CAPABILITIES_FAX) == 1;
// update job data
if( i_pSetupData )
@@ -1214,58 +1163,77 @@ bool PspSalPrinter::StartJob( const OUString* i_pFileName, const OUString& i_rJo
}
}
- bool bSuccess(true);
+ std::vector<OUString> aFaxNumbers;
+
+ // check for fax numbers
+ if (!bAborted && bFax)
+ {
+ aFaxNumbers = getFaxNumbers();
+ bAborted = aFaxNumbers.empty();
+ }
+ bool bSuccess(true);
// spool files
if( ! i_pFileName && ! bAborted )
{
- bool bFirstJob = true;
- for( int nCurJob = 0; nCurJob < nOuterJobs; nCurJob++ )
+ do
{
- for( size_t i = 0; i < aPDFFiles.size(); i++ )
+ OUString sFaxNumber;
+ if (!aFaxNumbers.empty())
+ {
+ sFaxNumber = aFaxNumbers.back();
+ aFaxNumbers.pop_back();
+ }
+
+ bool bFirstJob = true;
+ for( int nCurJob = 0; nCurJob < nOuterJobs; nCurJob++ )
{
- oslFileHandle pFile = NULL;
- osl_openFile( aPDFFiles[i].maTmpURL.pData, &pFile, osl_File_OpenFlag_Read );
- if (pFile && (osl_setFilePos(pFile, osl_Pos_Absolut, 0) == osl_File_E_None))
+ for( size_t i = 0; i < aPDFFiles.size(); i++ )
{
- std::vector< char > buffer( 0x10000, 0 );
- // update job data with current page size
- Size aPageSize( aPDFFiles[i].maParameters.maPageSize );
- m_aJobData.setPaper( TenMuToPt( aPageSize.Width() ), TenMuToPt( aPageSize.Height() ) );
- // update job data with current paperbin
- m_aJobData.setPaperBin( aPDFFiles[i].maParameters.mnPaperBin );
-
- // spool current file
- FILE* fp = PrinterInfoManager::get().startSpool( pPrinter->GetName(), i_rController.isDirectPrint() );
- if( fp )
+ oslFileHandle pFile = NULL;
+ osl_openFile( aPDFFiles[i].maTmpURL.pData, &pFile, osl_File_OpenFlag_Read );
+ if (pFile && (osl_setFilePos(pFile, osl_Pos_Absolut, 0) == osl_File_E_None))
{
- sal_uInt64 nBytesRead = 0;
- do
+ std::vector< char > buffer( 0x10000, 0 );
+ // update job data with current page size
+ Size aPageSize( aPDFFiles[i].maParameters.maPageSize );
+ m_aJobData.setPaper( TenMuToPt( aPageSize.Width() ), TenMuToPt( aPageSize.Height() ) );
+ // update job data with current paperbin
+ m_aJobData.setPaperBin( aPDFFiles[i].maParameters.mnPaperBin );
+
+ // spool current file
+ FILE* fp = PrinterInfoManager::get().startSpool( pPrinter->GetName(), i_rController.isDirectPrint() );
+ if( fp )
{
- osl_readFile( pFile, &buffer[0], buffer.size(), &nBytesRead );
- if( nBytesRead > 0 )
+ sal_uInt64 nBytesRead = 0;
+ do
+ {
+ osl_readFile( pFile, &buffer[0], buffer.size(), &nBytesRead );
+ if( nBytesRead > 0 )
+ {
+ size_t nBytesWritten = fwrite(&buffer[0], 1, nBytesRead, fp);
+ OSL_ENSURE(nBytesRead == nBytesWritten, "short write");
+ if (nBytesRead != nBytesWritten)
+ break;
+ }
+ } while( nBytesRead == buffer.size() );
+ OUStringBuffer aBuf( i_rJobName.getLength() + 8 );
+ aBuf.append( i_rJobName );
+ if( i > 0 || nCurJob > 0 )
{
- size_t nBytesWritten = fwrite(&buffer[0], 1, nBytesRead, fp);
- OSL_ENSURE(nBytesRead == nBytesWritten, "short write");
- if (nBytesRead != nBytesWritten)
- break;
+ aBuf.append( ' ' );
+ aBuf.append( sal_Int32( i + nCurJob * aPDFFiles.size() ) );
}
- } while( nBytesRead == buffer.size() );
- OUStringBuffer aBuf( i_rJobName.getLength() + 8 );
- aBuf.append( i_rJobName );
- if( i > 0 || nCurJob > 0 )
- {
- aBuf.append( ' ' );
- aBuf.append( sal_Int32( i + nCurJob * aPDFFiles.size() ) );
+ bSuccess &=
+ PrinterInfoManager::get().endSpool( pPrinter->GetName(), aBuf.makeStringAndClear(), fp, m_aJobData, bFirstJob, sFaxNumber );
+ bFirstJob = false;
}
- bSuccess &=
- PrinterInfoManager::get().endSpool( pPrinter->GetName(), aBuf.makeStringAndClear(), fp, m_aJobData, bFirstJob );
- bFirstJob = false;
}
+ osl_closeFile( pFile );
}
- osl_closeFile( pFile );
}
}
+ while (!aFaxNumbers.empty());
}
// job has been spooled
diff --git a/vcl/generic/print/genpspgraphics.cxx b/vcl/generic/print/genpspgraphics.cxx
index 961d17f6e7b7..9e0221f499fc 100644
--- a/vcl/generic/print/genpspgraphics.cxx
+++ b/vcl/generic/print/genpspgraphics.cxx
@@ -266,9 +266,6 @@ SalPrinterBmp::GetPixelIdx (sal_uInt32 nRow, sal_uInt32 nColumn) const
GenPspGraphics::GenPspGraphics()
: m_pJobData( NULL ),
m_pPrinterGfx( NULL ),
- m_pPhoneNr( NULL ),
- m_bSwallowFaxNo( false ),
- m_bPhoneCollectionActive( false ),
m_bFontVertical( false ),
m_pInfoPrinter( NULL )
{
@@ -276,14 +273,11 @@ GenPspGraphics::GenPspGraphics()
m_pServerFont[i] = NULL;
}
-void GenPspGraphics::Init( psp::JobData* pJob, psp::PrinterGfx* pGfx,
- OUString* pPhone, bool bSwallow,
- SalInfoPrinter* pInfoPrinter )
+void GenPspGraphics::Init(psp::JobData* pJob, psp::PrinterGfx* pGfx,
+ SalInfoPrinter* pInfoPrinter)
{
m_pJobData = pJob;
m_pPrinterGfx = pGfx;
- m_pPhoneNr = pPhone;
- m_bSwallowFaxNo = bSwallow;
m_pInfoPrinter = pInfoPrinter;
SetLayout( 0 );
}
@@ -1200,78 +1194,9 @@ void GenPspGraphics::AnnounceFonts( ImplDevFontList* pFontList, const psp::FastP
pFontList->Add( pFD );
}
-bool GenPspGraphics::filterText( const OUString& rOrig, OUString& rNewText, sal_Int32 nIndex, sal_Int32& rLen, sal_Int32& rCutStart, sal_Int32& rCutStop )
+bool GenPspGraphics::filterText( const OUString& /*rOrig*/, OUString& /*rNewText*/, sal_Int32 /*nIndex*/, sal_Int32& /*rLen*/, sal_Int32& /*rCutStart*/, sal_Int32& /*rCutStop*/ )
{
- if( ! m_pPhoneNr )
- return false;
-
- rNewText = rOrig;
- rCutStop = rCutStart = -1;
-
-#define FAX_PHONE_TOKEN "@@#"
-#define FAX_PHONE_TOKEN_LENGTH 3
-#define FAX_END_TOKEN "@@"
-#define FAX_END_TOKEN_LENGTH 2
-
- bool bRet = false;
- bool bStarted = false;
- sal_Int32 nPos;
- sal_Int32 nStart = 0;
- sal_Int32 nStop = rLen;
- OUString aPhone = rOrig.copy( nIndex, rLen );
-
- if( ! m_bPhoneCollectionActive )
- {
- if( ( nPos = aPhone.indexOfAsciiL( FAX_PHONE_TOKEN, FAX_PHONE_TOKEN_LENGTH ) ) != -1 )
- {
- nStart = nPos;
- m_bPhoneCollectionActive = true;
- m_aPhoneCollection = "";
- bRet = true;
- bStarted = true;
- }
- }
- if( m_bPhoneCollectionActive )
- {
- bool bStopped = false;
- bRet = true;
- nPos = bStarted ? nStart + FAX_PHONE_TOKEN_LENGTH : 0;
- if( ( nPos = aPhone.indexOfAsciiL( FAX_END_TOKEN, FAX_END_TOKEN_LENGTH, nPos ) ) != -1 )
- {
- m_bPhoneCollectionActive = false;
- nStop = nPos + FAX_END_TOKEN_LENGTH;
- bStopped = true;
- }
- int nTokenStart = nStart + (bStarted ? FAX_PHONE_TOKEN_LENGTH : 0);
- int nTokenStop = nStop - (bStopped ? FAX_END_TOKEN_LENGTH : 0);
- m_aPhoneCollection += aPhone.copy( nTokenStart, nTokenStop - nTokenStart );
- if( ! m_bPhoneCollectionActive )
- {
- OUStringBuffer aPhoneNr;
- aPhoneNr.append( "<Fax#>" );
- aPhoneNr.append( m_aPhoneCollection );
- aPhoneNr.append( "</Fax#>" );
- *m_pPhoneNr = aPhoneNr.makeStringAndClear();
- m_aPhoneCollection = "";
- }
- }
- if( m_aPhoneCollection.getLength() > 1024 )
- {
- m_bPhoneCollectionActive = false;
- m_aPhoneCollection = "";
- bRet = false;
- }
-
- if( bRet && m_bSwallowFaxNo )
- {
- rLen -= nStop - nStart;
- rCutStart = nStart+nIndex;
- rCutStop = nStop+nIndex;
- if (rCutStart != rCutStop)
- rNewText = ( rCutStart ? rOrig.copy( 0, rCutStart ) : OUString() ) + rOrig.copy( rCutStop );
- }
-
- return bRet && m_bSwallowFaxNo;
+ return false;
}
bool GenPspGraphics::drawAlphaBitmap( const SalTwoRect&,
diff --git a/vcl/generic/print/printerjob.cxx b/vcl/generic/print/printerjob.cxx
index b6ef32f69d2a..9575169fb1fe 100644
--- a/vcl/generic/print/printerjob.cxx
+++ b/vcl/generic/print/printerjob.cxx
@@ -410,7 +410,7 @@ PrinterJob::StartJob (
}
bool
-PrinterJob::EndJob ()
+PrinterJob::EndJob()
{
// no pages ? that really means no print job
if( maPageList.empty() )
@@ -531,7 +531,7 @@ PrinterJob::EndJob ()
{
PrinterInfoManager& rPrinterInfoManager = PrinterInfoManager::get();
if (!rPrinterInfoManager.endSpool( m_aLastJobData.m_aPrinterName,
- maJobTitle, pDestFILE, m_aDocumentJobData, true ))
+ maJobTitle, pDestFILE, m_aDocumentJobData, true, OUString()))
{
bSuccess = false;
}
diff --git a/vcl/inc/cupsmgr.hxx b/vcl/inc/cupsmgr.hxx
index 08711a33e0c7..8454c313a1ad 100644
--- a/vcl/inc/cupsmgr.hxx
+++ b/vcl/inc/cupsmgr.hxx
@@ -77,7 +77,7 @@ public:
const char* authenticateUser( const char* );
virtual FILE* startSpool( const OUString& rPrinterName, bool bQuickCommand );
- virtual bool endSpool( const OUString& rPrinterName, const OUString& rJobTitle, FILE* pFile, const JobData& rDocumentJobData, bool bBanner );
+ virtual bool endSpool( const OUString& rPrinterName, const OUString& rJobTitle, FILE* pFile, const JobData& rDocumentJobData, bool bBanner, const OUString& rFaxNumber );
virtual void setupJobContextData( JobData& rData );
/// changes the info about a named printer
diff --git a/vcl/inc/generic/genprn.h b/vcl/inc/generic/genprn.h
index d21b97e19c5a..d3215f632966 100644
--- a/vcl/inc/generic/genprn.h
+++ b/vcl/inc/generic/genprn.h
@@ -59,10 +59,7 @@ class VCL_DLLPUBLIC PspSalPrinter : public SalPrinter
public:
OUString m_aFileName;
OUString m_aTmpFile;
- OUString m_aFaxNr;
- bool m_bFax:1;
bool m_bPdf:1;
- bool m_bSwallowFaxNo:1;
bool m_bIsPDFWriterJob:1;
GenPspGraphics* m_pGraphics;
psp::PrinterJob m_aPrintJob;
diff --git a/vcl/inc/generic/genpspgraphics.h b/vcl/inc/generic/genpspgraphics.h
index 9a2c8c559796..946f79c39b72 100644
--- a/vcl/inc/generic/genpspgraphics.h
+++ b/vcl/inc/generic/genpspgraphics.h
@@ -39,10 +39,6 @@ class VCL_DLLPUBLIC GenPspGraphics : public SalGraphics
protected:
psp::JobData* m_pJobData;
psp::PrinterGfx* m_pPrinterGfx;
- OUString* m_pPhoneNr;
- bool m_bSwallowFaxNo;
- OUString m_aPhoneCollection;
- bool m_bPhoneCollectionActive;
ServerFont* m_pServerFont[ MAX_FALLBACK ];
bool m_bFontVertical;
@@ -52,7 +48,6 @@ public:
virtual ~GenPspGraphics();
void Init( psp::JobData* pJob, psp::PrinterGfx* pGfx,
- OUString* pPhone, bool bSwallow,
SalInfoPrinter* pInfoPrinter );
// helper methods
diff --git a/vcl/null/printerinfomanager.cxx b/vcl/null/printerinfomanager.cxx
index cc31c8664062..d102f0cbbd3e 100644
--- a/vcl/null/printerinfomanager.cxx
+++ b/vcl/null/printerinfomanager.cxx
@@ -142,7 +142,7 @@ FILE* PrinterInfoManager::startSpool( const OUString& /* rPrintername */, bool /
return NULL;
}
-bool PrinterInfoManager::endSpool( const OUString& /*rPrintername*/, const OUString& /*rJobTitle*/, FILE* /* pFile */, const JobData& /*rDocumentJobData*/, bool /*bBanner*/ )
+bool PrinterInfoManager::endSpool( const OUString& /*rPrintername*/, const OUString& /*rJobTitle*/, FILE* /* pFile */, const JobData& /*rDocumentJobData*/, bool /*bBanner*/, const OUString& /*rFaxNumber*/ )
{
return true;
}
diff --git a/vcl/unx/generic/printer/cupsmgr.cxx b/vcl/unx/generic/printer/cupsmgr.cxx
index 2cfcbaab5ec1..3627cd7670d0 100644
--- a/vcl/unx/generic/printer/cupsmgr.cxx
+++ b/vcl/unx/generic/printer/cupsmgr.cxx
@@ -541,7 +541,7 @@ void CUPSManager::setupJobContextData( JobData& rData )
FILE* CUPSManager::startSpool( const OUString& rPrintername, bool bQuickCommand )
{
- OSL_TRACE( "endSpool: %s, %s",
+ OSL_TRACE( "startSpool: %s, %s",
OUStringToOString( rPrintername, RTL_TEXTENCODING_UTF8 ).getStr(),
bQuickCommand ? "true" : "false" );
@@ -612,7 +612,7 @@ void CUPSManager::getOptionsFromDocumentSetup( const JobData& rJob, bool bBanner
}
}
-bool CUPSManager::endSpool( const OUString& rPrintername, const OUString& rJobTitle, FILE* pFile, const JobData& rDocumentJobData, bool bBanner )
+bool CUPSManager::endSpool( const OUString& rPrintername, const OUString& rJobTitle, FILE* pFile, const JobData& rDocumentJobData, bool bBanner, const OUString& rFaxNumber )
{
OSL_TRACE( "endSpool: %s, %s, copy count = %d",
OUStringToOString( rPrintername, RTL_TEXTENCODING_UTF8 ).getStr(),
@@ -629,7 +629,7 @@ bool CUPSManager::endSpool( const OUString& rPrintername, const OUString& rJobTi
if( dest_it == m_aCUPSDestMap.end() )
{
OSL_TRACE( "defer to PrinterInfoManager::endSpool" );
- return PrinterInfoManager::endSpool( rPrintername, rJobTitle, pFile, rDocumentJobData, bBanner );
+ return PrinterInfoManager::endSpool( rPrintername, rJobTitle, pFile, rDocumentJobData, bBanner, rFaxNumber );
}
boost::unordered_map< FILE*, OString, FPtrHash >::const_iterator it = m_aSpoolFiles.find( pFile );
@@ -643,11 +643,20 @@ bool CUPSManager::endSpool( const OUString& rPrintername, const OUString& rJobTi
cups_option_t* pOptions = NULL;
getOptionsFromDocumentSetup( rDocumentJobData, bBanner, nNumOptions, (void**)&pOptions );
+ OString sJobName(OUStringToOString(rJobTitle, aEnc));
+
+ //fax4CUPS, "the job name will be dialled for you"
+ //so override the jobname with the desired number
+ if (!rFaxNumber.isEmpty())
+ {
+ sJobName = OUStringToOString(rFaxNumber, aEnc);
+ }
+
cups_dest_t* pDest = ((cups_dest_t*)m_pDests) + dest_it->second;
- nJobID = cupsPrintFile( pDest->name,
- it->second.getStr(),
- OUStringToOString( rJobTitle, aEnc ).getStr(),
- nNumOptions, pOptions );
+ nJobID = cupsPrintFile(pDest->name,
+ it->second.getStr(),
+ sJobName.getStr(),
+ nNumOptions, pOptions);
SAL_INFO("vcl.unx.print", "cupsPrintFile( " << pDest->name << ", "
<< it->second << ", " << rJobTitle << ", " << nNumOptions
<< ", " << pOptions << " ) returns " << nJobID);
diff --git a/vcl/unx/generic/printer/printerinfomanager.cxx b/vcl/unx/generic/printer/printerinfomanager.cxx
index 0c6e7138977f..01d6ce62a7dd 100644
--- a/vcl/unx/generic/printer/printerinfomanager.cxx
+++ b/vcl/unx/generic/printer/printerinfomanager.cxx
@@ -966,7 +966,7 @@ FILE* PrinterInfoManager::startSpool( const OUString& rPrintername, bool bQuickC
return popen (aShellCommand.getStr(), "w");
}
-bool PrinterInfoManager::endSpool( const OUString& /*rPrintername*/, const OUString& /*rJobTitle*/, FILE* pFile, const JobData& /*rDocumentJobData*/, bool /*bBanner*/ )
+bool PrinterInfoManager::endSpool( const OUString& /*rPrintername*/, const OUString& /*rJobTitle*/, FILE* pFile, const JobData& /*rDocumentJobData*/, bool /*bBanner*/, const OUString& /*rFaxNumber*/ )
{
return (0 == pclose( pFile ));
}