Kaydet (Commit) f3020438 authored tarafından Michael Stahl's avatar Michael Stahl

fdo#55496: fix lifecycle of SwMailMergeOutputPage:

Its member m_pDocumentPrinterCopy contains a SfxItemSet that points at
the SwDoc's item pool; the SwDoc is freed in
SwMailMergeWizardExecutor::LinkStubCancelHdl.  But the SwDoc::setPrinter
method does seem to work fine if the printer that is set is the same as
the one it already has, so it does not seem to be necessary to clone the
printer; just get it and set it again.

Change-Id: Ic591f68f6e0bab4e42cb22a9cb0a47e97f5e938f
üst df706c23
...@@ -330,8 +330,7 @@ SwMailMergeOutputPage::SwMailMergeOutputPage( SwMailMergeWizard* _pParent) : ...@@ -330,8 +330,7 @@ SwMailMergeOutputPage::SwMailMergeOutputPage( SwMailMergeWizard* _pParent) :
#endif #endif
m_bCancelSaving( false ), m_bCancelSaving( false ),
m_pWizard(_pParent), m_pWizard(_pParent),
m_pTempPrinter( 0 ), m_pTempPrinter( 0 )
m_pDocumentPrinterCopy(0)
{ {
FreeResource(); FreeResource();
...@@ -383,7 +382,6 @@ SwMailMergeOutputPage::SwMailMergeOutputPage( SwMailMergeWizard* _pParent) : ...@@ -383,7 +382,6 @@ SwMailMergeOutputPage::SwMailMergeOutputPage( SwMailMergeWizard* _pParent) :
SwMailMergeOutputPage::~SwMailMergeOutputPage() SwMailMergeOutputPage::~SwMailMergeOutputPage()
{ {
delete m_pTempPrinter; delete m_pTempPrinter;
delete m_pDocumentPrinterCopy;
} }
void SwMailMergeOutputPage::ActivatePage() void SwMailMergeOutputPage::ActivatePage()
...@@ -409,7 +407,6 @@ void SwMailMergeOutputPage::ActivatePage() ...@@ -409,7 +407,6 @@ void SwMailMergeOutputPage::ActivatePage()
m_aPrinterLB.SelectEntry( pPrinter->GetName() ); m_aPrinterLB.SelectEntry( pPrinter->GetName() );
m_aToNF.SetValue( rConfigItem.GetMergedDocumentCount() ); m_aToNF.SetValue( rConfigItem.GetMergedDocumentCount() );
m_aToNF.SetMax( rConfigItem.GetMergedDocumentCount() ); m_aToNF.SetMax( rConfigItem.GetMergedDocumentCount() );
m_pDocumentPrinterCopy = pTargetView->GetWrtShell().getIDocumentDeviceAccess()->getPrinter( true )->Clone();
} }
m_aPrinterLB.SelectEntry( rConfigItem.GetSelectedPrinter() ); m_aPrinterLB.SelectEntry( rConfigItem.GetSelectedPrinter() );
...@@ -852,7 +849,10 @@ IMPL_LINK(SwMailMergeOutputPage, SaveOutputHdl_Impl, PushButton*, pButton) ...@@ -852,7 +849,10 @@ IMPL_LINK(SwMailMergeOutputPage, SaveOutputHdl_Impl, PushButton*, pButton)
IMPL_LINK(SwMailMergeOutputPage, PrinterChangeHdl_Impl, ListBox*, pBox) IMPL_LINK(SwMailMergeOutputPage, PrinterChangeHdl_Impl, ListBox*, pBox)
{ {
if( m_pDocumentPrinterCopy && pBox->GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND ) SwView *const pTargetView = m_pWizard->GetConfigItem().GetTargetView();
SfxPrinter *const pDocumentPrinter = pTargetView->GetWrtShell()
.getIDocumentDeviceAccess()->getPrinter(true);
if (pDocumentPrinter && pBox->GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND)
{ {
const QueueInfo* pInfo = Printer::GetQueueInfo( pBox->GetSelectEntry(), false ); const QueueInfo* pInfo = Printer::GetQueueInfo( pBox->GetSelectEntry(), false );
...@@ -860,9 +860,11 @@ IMPL_LINK(SwMailMergeOutputPage, PrinterChangeHdl_Impl, ListBox*, pBox) ...@@ -860,9 +860,11 @@ IMPL_LINK(SwMailMergeOutputPage, PrinterChangeHdl_Impl, ListBox*, pBox)
{ {
if ( !m_pTempPrinter ) if ( !m_pTempPrinter )
{ {
if( (m_pDocumentPrinterCopy->GetName() == pInfo->GetPrinterName()) && if ((pDocumentPrinter->GetName() == pInfo->GetPrinterName()) &&
(m_pDocumentPrinterCopy->GetDriverName() == pInfo->GetDriver()) ) (pDocumentPrinter->GetDriverName() == pInfo->GetDriver()))
m_pTempPrinter = new Printer( m_pDocumentPrinterCopy->GetJobSetup() ); {
m_pTempPrinter = new Printer(pDocumentPrinter->GetJobSetup());
}
else else
m_pTempPrinter = new Printer( *pInfo ); m_pTempPrinter = new Printer( *pInfo );
} }
...@@ -922,8 +924,11 @@ IMPL_LINK_NOARG(SwMailMergeOutputPage, PrintHdl_Impl) ...@@ -922,8 +924,11 @@ IMPL_LINK_NOARG(SwMailMergeOutputPage, PrintHdl_Impl)
pTargetView->SetMailMergeConfigItem(&rConfigItem, 0, sal_False); pTargetView->SetMailMergeConfigItem(&rConfigItem, 0, sal_False);
if(m_pTempPrinter) if(m_pTempPrinter)
{ {
m_pDocumentPrinterCopy->SetPrinterProps(m_pTempPrinter); SfxPrinter *const pDocumentPrinter = pTargetView->GetWrtShell()
pTargetView->SetPrinter(m_pDocumentPrinterCopy->Clone()); .getIDocumentDeviceAccess()->getPrinter(true);
pDocumentPrinter->SetPrinterProps(m_pTempPrinter);
// this should be able to handle setting its own printer
pTargetView->SetPrinter(pDocumentPrinter);
} }
SfxObjectShell* pObjSh = pTargetView->GetViewFrame()->GetObjectShell(); SfxObjectShell* pObjSh = pTargetView->GetViewFrame()->GetObjectShell();
......
...@@ -118,7 +118,6 @@ class SwMailMergeOutputPage : public svt::OWizardPage ...@@ -118,7 +118,6 @@ class SwMailMergeOutputPage : public svt::OWizardPage
//some dialog data //some dialog data
Printer* m_pTempPrinter; Printer* m_pTempPrinter;
SfxPrinter* m_pDocumentPrinterCopy;
String m_sCC; String m_sCC;
String m_sBCC; String m_sBCC;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment