diff options
-rw-r--r-- | include/vcl/print.hxx | 6 | ||||
-rw-r--r-- | sc/qa/uitest/calc_dialogs/printDialog.py | 38 | ||||
-rw-r--r-- | sc/qa/uitest/data/tdf155218.ods | bin | 0 -> 9753 bytes | |||
-rw-r--r-- | sc/source/ui/inc/pfuncache.hxx | 7 | ||||
-rw-r--r-- | sc/source/ui/inc/printfun.hxx | 18 | ||||
-rw-r--r-- | sc/source/ui/unoobj/docuno.cxx | 53 | ||||
-rw-r--r-- | sc/source/ui/view/pfuncache.cxx | 15 | ||||
-rw-r--r-- | sc/source/ui/view/printfun.cxx | 41 | ||||
-rw-r--r-- | vcl/inc/printdlg.hxx | 2 | ||||
-rw-r--r-- | vcl/source/gdi/print.cxx | 1 | ||||
-rw-r--r-- | vcl/source/window/printdlg.cxx | 49 |
11 files changed, 200 insertions, 30 deletions
diff --git a/include/vcl/print.hxx b/include/vcl/print.hxx index e23cf8d0af1b..870ed5d915a1 100644 --- a/include/vcl/print.hxx +++ b/include/vcl/print.hxx @@ -80,6 +80,7 @@ private: JobSetup maJobSetup; Point maPageOffset; Size maPaperSize; + Size maPrintPageSize; ErrCode mnError; sal_uInt16 mnPageQueueSize; sal_uInt16 mnCopyCount; @@ -91,6 +92,7 @@ private: bool mbInPrintPage; bool mbNewJobSetup; bool mbSinglePrintJobs; + bool mbUsePrintSetting; VCL_DLLPRIVATE void ImplInitData(); VCL_DLLPRIVATE void ImplInit( SalPrinterQueueInfo* pInfo ); @@ -220,6 +222,10 @@ public: VCL_DLLPRIVATE void SetPrinterOptions( const vcl::printer::Options& rOptions ); const vcl::printer::Options& GetPrinterOptions() const { return( *mpPrinterOptions ); } + void SetUsePrintDialogSetting(bool bUsed) { mbUsePrintSetting = bUsed; } + bool IsUsePrintDialogSetting() { return mbUsePrintSetting; } + void SetPrintPageSize(Size aPrintPageSize) { maPrintPageSize = aPrintPageSize; } + Size GetPrintPageSize() { return maPrintPageSize; } bool SetOrientation( Orientation eOrient ); Orientation GetOrientation() const; void SetDuplexMode( DuplexMode ); diff --git a/sc/qa/uitest/calc_dialogs/printDialog.py b/sc/qa/uitest/calc_dialogs/printDialog.py new file mode 100644 index 000000000000..3e1290b9c8af --- /dev/null +++ b/sc/qa/uitest/calc_dialogs/printDialog.py @@ -0,0 +1,38 @@ +# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +from uitest.framework import UITestCase +from uitest.uihelper.common import get_state_as_dict, get_url_for_data_file, select_by_text + +class printDialog(UITestCase): + def test_printDialog(self): + with self.ui_test.load_file(get_url_for_data_file("tdf155218.ods")): + with self.ui_test.execute_dialog_through_command(".uno:Print", close_button="cancel") as xDialog: + + xPortraiTotalNumberPages = xDialog.getChild("totalnumpages") + self.assertEqual(get_state_as_dict(xPortraiTotalNumberPages)["Text"], "/ 2") + + xPortraiPageRange = xDialog.getChild("pagerange") + self.assertEqual(get_state_as_dict(xPortraiPageRange)["Text"], "1-2") + + xpageorientationbox = xDialog.getChild("pageorientationbox") + select_by_text(xpageorientationbox, "Landscape") + + # Without the fix in place, this test would have failed with + # Expected: "/ 1" + # Actual : "/ 2" + xLandscapeTotalNumberPages = xDialog.getChild("totalnumpages") + self.assertEqual(get_state_as_dict(xLandscapeTotalNumberPages)["Text"], "/ 1") + + # Without the fix in place, this test would have failed with + # Expected: "1" + # Actual : "1-2" + xLandscapePageRange = xDialog.getChild("pagerange") + self.assertEqual(get_state_as_dict(xLandscapePageRange)["Text"], "1") + +# vim: set shiftwidth=4 softtabstop=4 expandtab: diff --git a/sc/qa/uitest/data/tdf155218.ods b/sc/qa/uitest/data/tdf155218.ods Binary files differnew file mode 100644 index 000000000000..cd6417973972 --- /dev/null +++ b/sc/qa/uitest/data/tdf155218.ods diff --git a/sc/source/ui/inc/pfuncache.hxx b/sc/source/ui/inc/pfuncache.hxx index 5621cd2628ac..7cd286f39223 100644 --- a/sc/source/ui/inc/pfuncache.hxx +++ b/sc/source/ui/inc/pfuncache.hxx @@ -90,10 +90,13 @@ class ScPrintFuncCache std::vector<tools::Long> nFirstAttr; std::vector<ScPrintPageLocation> aLocations; bool bLocInitialized; + Size aPrintPageSize; // print page size in Print dialog + bool bPrintPageLandscape; // print page orientation in Print dialog + bool bUsePrintDialogSetting; // use Print dialog setting public: - ScPrintFuncCache( ScDocShell* pD, const ScMarkData& rMark, - ScPrintSelectionStatus aStatus ); + ScPrintFuncCache(ScDocShell* pD, const ScMarkData& rMark, ScPrintSelectionStatus aStatus, + Size aPageSize = {}, bool bLandscape = false, bool bUse = false); ~ScPrintFuncCache(); bool IsSameSelection( const ScPrintSelectionStatus& rStatus ) const; diff --git a/sc/source/ui/inc/printfun.hxx b/sc/source/ui/inc/printfun.hxx index f9780bd0e53c..2e9dd7bb49d1 100644 --- a/sc/source/ui/inc/printfun.hxx +++ b/sc/source/ui/inc/printfun.hxx @@ -312,15 +312,25 @@ private: ScPageBreakData* pPageData; // for recording the breaks etc. + Size aPrintPageSize; // print page size in Print dialog + bool bPrintPageLandscape; // print page orientation in Print dialog + bool bUsePrintDialogSetting; // use Print dialog setting + public: ScPrintFunc( ScDocShell* pShell, SfxPrinter* pNewPrinter, SCTAB nTab, tools::Long nPage = 0, tools::Long nDocP = 0, const ScRange* pArea = nullptr, const ScPrintOptions* pOptions = nullptr, - ScPageBreakData* pData = nullptr ); + ScPageBreakData* pData = nullptr, + Size aPrintPageSize = {}, + bool bPrintPageLandscape = false, + bool bUsePrintDialogSetting = false ); ScPrintFunc( ScDocShell* pShell, SfxPrinter* pNewPrinter, - const ScPrintState& rState, const ScPrintOptions* pOptions ); + const ScPrintState& rState, const ScPrintOptions* pOptions, + Size aPrintPageSize = {}, + bool bPrintPageLandscape = false, + bool bUsePrintDialogSetting = false ); // ctors for device other than printer - for preview and pdf: @@ -331,7 +341,9 @@ public: ScPrintFunc( OutputDevice* pOutDev, ScDocShell* pShell, const ScPrintState& rState, - const ScPrintOptions* pOptions ); + const ScPrintOptions* pOptions, Size aPrintPageSize = {}, + bool bPrintPageLandscape = false, + bool bUsePrintDialogSetting = false); ~ScPrintFunc(); diff --git a/sc/source/ui/unoobj/docuno.cxx b/sc/source/ui/unoobj/docuno.cxx index f92864e76ece..e45ef91d2246 100644 --- a/sc/source/ui/unoobj/docuno.cxx +++ b/sc/source/ui/unoobj/docuno.cxx @@ -1615,6 +1615,24 @@ static bool lcl_ParseTarget( const OUString& rTarget, ScRange& rTargetRange, too return bRangeValid; } + static void lcl_SetPrintPage(const uno::Sequence<beans::PropertyValue>& rOptions, Size& aSize, + bool& bLandscape, bool& bUsed) +{ + OutputDevice* pDev = lcl_GetRenderDevice(rOptions); + if (pDev && pDev->GetOutDevType() == OUTDEV_PRINTER) + { + Printer* pPrinter = dynamic_cast<Printer*>(pDev); + if (pPrinter && pPrinter->IsUsePrintDialogSetting()) + { + bUsed = true; + bLandscape = (pPrinter->GetOrientation() == Orientation::Landscape); + aSize = pPrinter->GetPrintPageSize(); + aSize.setWidth(o3tl::convert(aSize.Width(), o3tl::Length::mm100, o3tl::Length::twip)); + aSize.setHeight(o3tl::convert(aSize.Height(), o3tl::Length::mm100, o3tl::Length::twip)); + } + } +} + bool ScModelObj::FillRenderMarkData( const uno::Any& aSelection, const uno::Sequence< beans::PropertyValue >& rOptions, ScMarkData& rMark, @@ -1801,13 +1819,19 @@ sal_Int32 SAL_CALL ScModelObj::getRendererCount(const uno::Any& aSelection, if ( !FillRenderMarkData( aSelection, rOptions, aMark, aStatus, aPagesStr, bRenderToGraphic ) ) return 0; + Size aPrintPageSize; + bool bPrintPageLandscape = false; + bool bUsePrintDialogSetting = false; + lcl_SetPrintPage(rOptions, aPrintPageSize, bPrintPageLandscape, bUsePrintDialogSetting); + // The same ScPrintFuncCache object in pPrintFuncCache is used as long as // the same selection is used (aStatus) and the document isn't changed // (pPrintFuncCache is cleared in Notify handler) - if ( !pPrintFuncCache || !pPrintFuncCache->IsSameSelection( aStatus ) ) + if (!pPrintFuncCache || !pPrintFuncCache->IsSameSelection(aStatus) || bUsePrintDialogSetting) { - pPrintFuncCache.reset(new ScPrintFuncCache( pDocShell, aMark, aStatus )); + pPrintFuncCache.reset(new ScPrintFuncCache(pDocShell, aMark, aStatus, aPrintPageSize, + bPrintPageLandscape, bUsePrintDialogSetting)); } sal_Int32 nPages = pPrintFuncCache->GetPageCount(); @@ -2033,12 +2057,23 @@ uno::Sequence<beans::PropertyValue> SAL_CALL ScModelObj::getRenderer( sal_Int32 } else { + Size aPrintPageSize; + bool bPrintPageLandscape = false; + bool bUsePrintDialogSetting = false; + lcl_SetPrintPage(rOptions, aPrintPageSize, bPrintPageLandscape, bUsePrintDialogSetting); + std::unique_ptr<ScPrintFunc, o3tl::default_delete<ScPrintFunc>> pPrintFunc; if (m_pPrintState && m_pPrintState->nPrintTab == nTab) - pPrintFunc.reset(new ScPrintFunc(pDocShell, pDocShell->GetPrinter(), *m_pPrintState, &aStatus.GetOptions())); + pPrintFunc.reset(new ScPrintFunc(pDocShell, pDocShell->GetPrinter(), *m_pPrintState, + &aStatus.GetOptions(), aPrintPageSize, + bPrintPageLandscape, + bUsePrintDialogSetting)); else pPrintFunc.reset(new ScPrintFunc(pDocShell, pDocShell->GetPrinter(), nTab, - pPrintFuncCache->GetFirstAttr(nTab), nTotalPages, pSelRange, &aStatus.GetOptions())); + pPrintFuncCache->GetFirstAttr(nTab), nTotalPages, + pSelRange, &aStatus.GetOptions(), nullptr, + aPrintPageSize, bPrintPageLandscape, + bUsePrintDialogSetting)); pPrintFunc->SetRenderFlag( true ); sal_Int32 nContent = 0; @@ -2443,14 +2478,20 @@ void SAL_CALL ScModelObj::render( sal_Int32 nSelRenderer, const uno::Any& aSelec aDrawViewKeeper.mpDrawView->SetPrintPreview(); } + Size aPrintPageSize; + bool bPrintPageLandscape = false; + bool bUsePrintDialogSetting = false; + lcl_SetPrintPage(rOptions, aPrintPageSize, bPrintPageLandscape, bUsePrintDialogSetting); + // to increase performance, ScPrintState might be used here for subsequent // pages of the same sheet - std::unique_ptr<ScPrintFunc, o3tl::default_delete<ScPrintFunc>> pPrintFunc; if (m_pPrintState && m_pPrintState->nPrintTab == nTab && ! pSelRange) // tdf#120161 use selection to set required printed area - pPrintFunc.reset(new ScPrintFunc(pDev, pDocShell, *m_pPrintState, &aStatus.GetOptions())); + pPrintFunc.reset(new ScPrintFunc(pDev, pDocShell, *m_pPrintState, &aStatus.GetOptions(), + aPrintPageSize, bPrintPageLandscape, + bUsePrintDialogSetting)); else pPrintFunc.reset(new ScPrintFunc(pDev, pDocShell, nTab, pPrintFuncCache->GetFirstAttr(nTab), nTotalPages, pSelRange, &aStatus.GetOptions())); diff --git a/sc/source/ui/view/pfuncache.cxx b/sc/source/ui/view/pfuncache.cxx index fe563ba961df..078633da5da0 100644 --- a/sc/source/ui/view/pfuncache.cxx +++ b/sc/source/ui/view/pfuncache.cxx @@ -27,12 +27,17 @@ #include <prevloc.hxx> #include <utility> -ScPrintFuncCache::ScPrintFuncCache( ScDocShell* pD, const ScMarkData& rMark, - ScPrintSelectionStatus aStatus ) : +ScPrintFuncCache::ScPrintFuncCache(ScDocShell* pD, const ScMarkData& rMark, + ScPrintSelectionStatus aStatus, Size aPageSize, bool bLandscape, + bool bUsed) + : aSelection(std::move( aStatus )), pDocSh( pD ), nTotalPages( 0 ), - bLocInitialized( false ) + bLocInitialized( false ), + aPrintPageSize( aPageSize ), + bPrintPageLandscape( bLandscape ), + bUsePrintDialogSetting( bUsed ) { // page count uses the stored cell widths for the printer anyway, // so ScPrintFunc with the document's printer can be used to count @@ -62,7 +67,9 @@ ScPrintFuncCache::ScPrintFuncCache( ScDocShell* pD, const ScMarkData& rMark, tools::Long nThisTab = 0; if ( rMark.GetTableSelect( nTab ) ) { - ScPrintFunc aFunc( pDocSh, pPrinter, nTab, nAttrPage, 0, pSelRange, &aSelection.GetOptions() ); + ScPrintFunc aFunc(pDocSh, pPrinter, nTab, nAttrPage, 0, pSelRange, + &aSelection.GetOptions(), nullptr, aPrintPageSize, + bPrintPageLandscape, bUsePrintDialogSetting); nThisTab = aFunc.GetTotalPages(); nFirstAttr.push_back( aFunc.GetFirstPageNo() ); // from page style or previous sheet } diff --git a/sc/source/ui/view/printfun.cxx b/sc/source/ui/view/printfun.cxx index 86a8fff947f3..a4e934280a28 100644 --- a/sc/source/ui/view/printfun.cxx +++ b/sc/source/ui/view/printfun.cxx @@ -196,10 +196,9 @@ void ScPrintFunc::Construct( const ScPrintOptions* pOptions ) pPageData = nullptr; // is only needed for initialisation } -ScPrintFunc::ScPrintFunc( ScDocShell* pShell, SfxPrinter* pNewPrinter, SCTAB nTab, - tools::Long nPage, tools::Long nDocP, const ScRange* pArea, - const ScPrintOptions* pOptions, - ScPageBreakData* pData ) +ScPrintFunc::ScPrintFunc(ScDocShell* pShell, SfxPrinter* pNewPrinter, SCTAB nTab, tools::Long nPage, + tools::Long nDocP, const ScRange* pArea, const ScPrintOptions* pOptions, + ScPageBreakData* pData, Size aSize, bool bPrintLandscape, bool bUsed) : pDocShell ( pShell ), rDoc(pDocShell->GetDocument()), pPrinter ( pNewPrinter ), @@ -216,7 +215,10 @@ ScPrintFunc::ScPrintFunc( ScDocShell* pShell, SfxPrinter* pNewPrinter, SCTAB nTa nTabPages ( 0 ), nTotalPages ( 0 ), bPrintAreaValid ( false ), - pPageData ( pData ) + pPageData ( pData ), + aPrintPageSize ( aSize ), + bPrintPageLandscape ( bPrintLandscape ), + bUsePrintDialogSetting ( bUsed ) { pDev = pPrinter.get(); aSrcOffset = pPrinter->PixelToLogic(pPrinter->GetPageOffsetPixel(), MapMode(MapUnit::Map100thMM)); @@ -226,8 +228,9 @@ ScPrintFunc::ScPrintFunc( ScDocShell* pShell, SfxPrinter* pNewPrinter, SCTAB nTa Construct( pOptions ); } -ScPrintFunc::ScPrintFunc(ScDocShell* pShell, SfxPrinter* pNewPrinter, - const ScPrintState& rState, const ScPrintOptions* pOptions) +ScPrintFunc::ScPrintFunc(ScDocShell* pShell, SfxPrinter* pNewPrinter, const ScPrintState& rState, + const ScPrintOptions* pOptions, Size aSize, bool bPrintLandscape, + bool bUsed) : pDocShell ( pShell ), rDoc(pDocShell->GetDocument()), pPrinter ( pNewPrinter ), @@ -237,7 +240,10 @@ ScPrintFunc::ScPrintFunc(ScDocShell* pShell, SfxPrinter* pNewPrinter, bPrintCurrentTable ( false ), bMultiArea ( false ), mbHasPrintRange(true), - pPageData ( nullptr ) + pPageData ( nullptr ), + aPrintPageSize ( aSize ), + bPrintPageLandscape ( bPrintLandscape ), + bUsePrintDialogSetting ( bUsed ) { pDev = pPrinter.get(); @@ -294,7 +300,10 @@ ScPrintFunc::ScPrintFunc( OutputDevice* pOutDev, ScDocShell* pShell, SCTAB nTab, nTabPages ( 0 ), nTotalPages ( 0 ), bPrintAreaValid ( false ), - pPageData ( nullptr ) + pPageData ( nullptr ), + aPrintPageSize ( Size() ), + bPrintPageLandscape ( false ), + bUsePrintDialogSetting ( false ) { pDev = pOutDev; m_aRanges.m_xPageEndX = std::make_shared<std::vector<SCCOL>>(); @@ -303,8 +312,9 @@ ScPrintFunc::ScPrintFunc( OutputDevice* pOutDev, ScDocShell* pShell, SCTAB nTab, Construct( pOptions ); } -ScPrintFunc::ScPrintFunc( OutputDevice* pOutDev, ScDocShell* pShell, - const ScPrintState& rState, const ScPrintOptions* pOptions ) +ScPrintFunc::ScPrintFunc(OutputDevice* pOutDev, ScDocShell* pShell, const ScPrintState& rState, + const ScPrintOptions* pOptions, Size aSize, bool bPrintLandscape, + bool bUsed) : pDocShell ( pShell ), rDoc(pDocShell->GetDocument()), pPrinter ( nullptr ), @@ -314,7 +324,10 @@ ScPrintFunc::ScPrintFunc( OutputDevice* pOutDev, ScDocShell* pShell, bPrintCurrentTable ( false ), bMultiArea ( false ), mbHasPrintRange(true), - pPageData ( nullptr ) + pPageData ( nullptr ), + aPrintPageSize ( aSize ), + bPrintPageLandscape ( bPrintLandscape ), + bUsePrintDialogSetting ( bUsed ) { pDev = pOutDev; @@ -896,13 +909,13 @@ void ScPrintFunc::InitParam( const ScPrintOptions* pOptions ) const SvxPageItem* pPageItem = &pParamSet->Get( ATTR_PAGE ); nPageUsage = pPageItem->GetPageUsage(); - bLandscape = pPageItem->IsLandscape(); + bLandscape = bUsePrintDialogSetting ? bPrintPageLandscape : pPageItem->IsLandscape(); aFieldData.eNumType = pPageItem->GetNumType(); bCenterHor = pParamSet->Get(ATTR_PAGE_HORCENTER).GetValue(); bCenterVer = pParamSet->Get(ATTR_PAGE_VERCENTER).GetValue(); - aPageSize = pParamSet->Get(ATTR_PAGE_SIZE).GetSize(); + aPageSize = bUsePrintDialogSetting ? aPrintPageSize : pParamSet->Get(ATTR_PAGE_SIZE).GetSize(); if ( !aPageSize.Width() || !aPageSize.Height() ) { OSL_FAIL("PageSize Null ?!?!?"); diff --git a/vcl/inc/printdlg.hxx b/vcl/inc/printdlg.hxx index bf058b079717..26d5ebb2777d 100644 --- a/vcl/inc/printdlg.hxx +++ b/vcl/inc/printdlg.hxx @@ -231,6 +231,8 @@ namespace vcl void readFromSettings(); void setPaperOrientation( Orientation eOrientation, bool fromUser ); void updateOrientationBox( bool bAutomatic = true ); + void updatePageSize( int nOrientation ); + void updatePageRange( const sal_Int32 nPages ); bool hasOrientationChanged() const; void setPreviewText(); void updatePrinterText(); diff --git a/vcl/source/gdi/print.cxx b/vcl/source/gdi/print.cxx index 401d38118c38..81081afe64ef 100644 --- a/vcl/source/gdi/print.cxx +++ b/vcl/source/gdi/print.cxx @@ -449,6 +449,7 @@ void Printer::ImplInitData() mbInPrintPage = false; mbNewJobSetup = false; mbSinglePrintJobs = false; + mbUsePrintSetting = false; mpInfoPrinter = nullptr; mpPrinter = nullptr; mpDisplayDev = nullptr; diff --git a/vcl/source/window/printdlg.cxx b/vcl/source/window/printdlg.cxx index 3fb26f4f8fd2..66cadb91d18a 100644 --- a/vcl/source/window/printdlg.cxx +++ b/vcl/source/window/printdlg.cxx @@ -945,6 +945,9 @@ void PrintDialog::preparePreview( bool i_bMayUseCache ) sal_Int32 nPages = maPController->getFilteredPageCount(); mnCachedPages = nPages; + if (!i_bMayUseCache) + updatePageRange(nPages); + setPreviewText(); if ( !hasPreview() ) @@ -1001,6 +1004,43 @@ void PrintDialog::preparePreview( bool i_bMayUseCache ) mxPageEdit->set_sensitive( nPages > 1 ); } +void PrintDialog::updatePageRange(sal_Int32 nPages) +{ + if (nPages > 0 && !mxPageRangesRadioButton->get_active()) + { + OUStringBuffer aBuf(32); + aBuf.append("1"); + if (nPages > 1) + { + aBuf.append("-" + OUString::number(nPages)); + } + maPController->setValue("PageRange", css::uno::Any(aBuf.makeStringAndClear())); + setupOptionalUI(); + } +} + +void PrintDialog::updatePageSize(int nOrientation) +{ + VclPtr<Printer> aPrt(maPController->getPrinter()); + + PaperInfo aInfo = aPrt->GetPaperInfo(mxPaperSizeBox->get_active()); + Size aSize(aInfo.getWidth(), aInfo.getHeight()); + if (aSize.IsEmpty()) + aSize = aPrt->GetSizeOfPaper(); + + if (nOrientation != ORIENTATION_AUTOMATIC) + { + if ((nOrientation == ORIENTATION_PORTRAIT && aSize.Width() > aSize.Height()) + || (nOrientation == ORIENTATION_LANDSCAPE && aSize.Width() < aSize.Height())) + { + aSize = Size(aSize.Height(), aSize.Width()); + } + } + + aPrt->SetPrintPageSize(aSize); + aPrt->SetUsePrintDialogSetting(true); +} + void PrintDialog::updateOrientationBox( const bool bAutomatic ) { if ( !bAutomatic ) @@ -1913,6 +1953,9 @@ IMPL_LINK(PrintDialog, ClickHdl, weld::Button&, rButton, void) } updateOrientationBox( false ); + + updatePageSize(mxOrientationBox->get_active()); + setupPaperSidesBox(); // tdf#63905 don't use cache: page size may change @@ -1954,6 +1997,7 @@ IMPL_LINK( PrintDialog, SelectHdl, weld::ComboBox&, rBox, void ) maUpdatePreviewIdle.Start(); } + updatePageSize(mxOrientationBox->get_active()); setupPaperSidesBox(); } else if ( &rBox == mxPaperSidesBox.get() ) @@ -1967,6 +2011,7 @@ IMPL_LINK( PrintDialog, SelectHdl, weld::ComboBox&, rBox, void ) if ( nOrientation != ORIENTATION_AUTOMATIC ) setPaperOrientation( static_cast<Orientation>( nOrientation - 1 ), true ); + updatePageSize(nOrientation); updateNup( false ); } else if ( &rBox == mxNupOrderBox.get() ) @@ -1993,7 +2038,9 @@ IMPL_LINK( PrintDialog, SelectHdl, weld::ComboBox&, rBox, void ) maPController->setPaperSizeFromUser( Size( aInfo.getWidth(), aInfo.getHeight() ) ); - maUpdatePreviewIdle.Start(); + updatePageSize(mxOrientationBox->get_active()); + + maUpdatePreviewNoCacheIdle.Start(); } } |