diff options
Diffstat (limited to 'vcl/source/gdi/print3.cxx')
-rwxr-xr-x | vcl/source/gdi/print3.cxx | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/vcl/source/gdi/print3.cxx b/vcl/source/gdi/print3.cxx index 34276fafdfe5..c917ea8aa718 100755 --- a/vcl/source/gdi/print3.cxx +++ b/vcl/source/gdi/print3.cxx @@ -344,15 +344,19 @@ void Printer::ImplPrintJob( const boost::shared_ptr<PrinterController>& i_pContr if( ! pController->getPrinter() ) { rtl::OUString aPrinterName( i_rInitSetup.GetPrinterName() ); + bool bSetJobSetup = true; if( ! aPrinterName.getLength() && pController->isShowDialogs() && ! pController->isDirectPrint() ) { // get printer name from configuration SettingsConfigItem* pItem = SettingsConfigItem::get(); aPrinterName = pItem->getValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "PrintDialog" ) ), rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "LastPrinterUsed" ) ) ); + bSetJobSetup = false; } boost::shared_ptr<Printer> pPrinter( new Printer( aPrinterName ) ); + if( bSetJobSetup ) + pPrinter->SetJobSetup( i_rInitSetup ); pController->setPrinter( pPrinter ); } @@ -399,17 +403,25 @@ void Printer::ImplPrintJob( const boost::shared_ptr<PrinterController>& i_pContr { if( nContent == 0 ) { - sal_Int32 nPages = i_pController->getPageCount(); - if( nPages > 0 ) + // do not overwrite PageRange if it is already set + beans::PropertyValue* pRangeVal = i_pController->getValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "PageRange" ) ) ); + rtl::OUString aRange; + if( pRangeVal ) + pRangeVal->Value >>= aRange; + if( aRange.getLength() == 0 ) { - rtl::OUStringBuffer aBuf( 32 ); - aBuf.appendAscii( "1" ); - if( nPages > 1 ) + sal_Int32 nPages = i_pController->getPageCount(); + if( nPages > 0 ) { - aBuf.appendAscii( "-" ); - aBuf.append( nPages ); + rtl::OUStringBuffer aBuf( 32 ); + aBuf.appendAscii( "1" ); + if( nPages > 1 ) + { + aBuf.appendAscii( "-" ); + aBuf.append( nPages ); + } + i_pController->setValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "PageRange" ) ), makeAny( aBuf.makeStringAndClear() ) ); } - i_pController->setValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "PageRange" ) ), makeAny( aBuf.makeStringAndClear() ) ); } } } |