[Libreoffice-commits] core.git: sw/source
Jan-Marek Glogowski
glogow at fbihome.de
Fri Sep 5 08:56:31 PDT 2014
sw/source/uibase/dbui/dbmgr.cxx | 33 ++++++++++++++++++++++++++++++---
1 file changed, 30 insertions(+), 3 deletions(-)
New commits:
commit 01e5ff37499d115e652ddab793488a54174fb4a9
Author: Jan-Marek Glogowski <glogow at fbihome.de>
Date: Fri Jun 27 11:28:02 2014 +0200
MM: fix workaround for single paragraph docs
There is already a workaround for pasting a document with a single
paragraph by appending a dummy empty paragraph to the working copy.
This patch removes the dummy paragraph from the target document.
Change-Id: I288d35264bf6f1a5f92c50d6a309e3bdd4ab5836
Reviewed-on: https://gerrit.libreoffice.org/10964
Reviewed-by: Caolán McNamara <caolanm at redhat.com>
Tested-by: Caolán McNamara <caolanm at redhat.com>
diff --git a/sw/source/uibase/dbui/dbmgr.cxx b/sw/source/uibase/dbui/dbmgr.cxx
index 2a417ec..a58b2e4 100644
--- a/sw/source/uibase/dbui/dbmgr.cxx
+++ b/sw/source/uibase/dbui/dbmgr.cxx
@@ -884,6 +884,8 @@ bool SwDBManager::MergeMailFiles(SwWrtShell* pSourceShell,
// in case of creating a single resulting file this has to be created here
SwWrtShell* pTargetShell = 0;
+ SwDoc* pTargetDoc = 0;
+ SwNodes* pTargetNodes = 0;
// the shell will be explicitly closed at the end of the method, but it is
// still more safe to use SfxObjectShellLock here
@@ -907,6 +909,8 @@ bool SwDBManager::MergeMailFiles(SwWrtShell* pSourceShell,
//initiate SelectShell() to create sub shells
pTargetView->AttrChangedNotify( &pTargetView->GetWrtShell() );
pTargetShell = pTargetView->GetWrtShellPtr();
+ pTargetDoc = pTargetShell->GetDoc();
+ pTargetNodes = &pTargetDoc->GetNodes();
//copy the styles from the source to the target document
pTargetView->GetDocShell()->_LoadStyles( *pSourceDocSh, true );
//determine the page style and number used at the start of the source document
@@ -1068,8 +1072,6 @@ bool SwDBManager::MergeMailFiles(SwWrtShell* pSourceShell,
{
//create a new pagestyle
//copy the pagedesc from the current document to the new document and change the name of the to-be-applied style
-
- SwDoc* pTargetDoc = pTargetShell->GetDoc();
SwPageDesc* pSourcePageDesc = rWorkShell.FindPageDescByName( sStartingPageDesc );
OUString sNewPageDescName = lcl_FindUniqueName(pTargetShell, sStartingPageDesc, nDocNo );
pTargetDoc->MakePageDesc( sNewPageDescName );
@@ -1087,7 +1089,9 @@ bool SwDBManager::MergeMailFiles(SwWrtShell* pSourceShell,
else
pTargetShell->SetPageStyle(sModifiedStartingPageDesc);
OSL_ENSURE(!pTargetShell->GetTableFmt(),"target document ends with a table - paragraph should be appended");
+
//#i51359# add a second paragraph in case there's only one
+ bool para_added = false;
{
SwNodeIndex aIdx( pWorkDoc->GetNodes().GetEndOfExtras(), 2 );
SwPosition aTestPos( aIdx );
@@ -1096,10 +1100,19 @@ bool SwDBManager::MergeMailFiles(SwWrtShell* pSourceShell,
{
//append a paragraph
pWorkDoc->getIDocumentContentOperations().AppendTxtNode( aTestPos );
+ para_added = true;
}
}
pTargetShell->Paste( rWorkShell.GetDoc(), true );
+ if ( para_added ) {
+ // Move cursor to the start or Delete will assert because
+ // of the cursors SwIndex ref on the deleting node.
+ pTargetShell->SttEndDoc( true );
+ SwNodeIndex aTargetIdx( pTargetNodes->GetEndOfContent(), -1 );
+ pTargetNodes->Delete( aTargetIdx, 1 );
+ }
+
//convert fields in page styles (header/footer - has to be done after the first document has been pasted
if(1 == nDocNo)
{
@@ -2770,6 +2783,9 @@ sal_Int32 SwDBManager::MergeDocuments( SwMailMergeConfigItem& rMMConfig,
//initiate SelectShell() to create sub shells
pTargetView->AttrChangedNotify( &pTargetView->GetWrtShell() );
SwWrtShell* pTargetShell = pTargetView->GetWrtShellPtr();
+ SwDoc* pTargetDoc = pTargetShell->GetDoc();
+ SwNodes* pTargetNodes = &pTargetDoc->GetNodes();
+
// #i63806#
const SwPageDesc* pSourcePageDesc = rSourceShell.FindPageDescByName( sStartingPageDesc );
const SwFrmFmt& rMaster = pSourcePageDesc->GetMaster();
@@ -2868,7 +2884,6 @@ sal_Int32 SwDBManager::MergeDocuments( SwMailMergeConfigItem& rMMConfig,
//create a new pagestyle
//copy the pagedesc from the current document to the new document and change the name of the to-be-applied style
- SwDoc* pTargetDoc = pTargetShell->GetDoc();
OUString sNewPageDescName = lcl_FindUniqueName(pTargetShell, sStartingPageDesc, nDocNo );
pTargetShell->GetDoc()->MakePageDesc( sNewPageDescName );
SwPageDesc* pTargetPageDesc = pTargetShell->FindPageDescByName( sNewPageDescName );
@@ -2895,6 +2910,8 @@ sal_Int32 SwDBManager::MergeDocuments( SwMailMergeConfigItem& rMMConfig,
}
sal_uInt16 nPageCountBefore = pTargetShell->GetPageCnt();
OSL_ENSURE(!pTargetShell->GetTableFmt(),"target document ends with a table - paragraph should be appended");
+ bool para_added = false;
+
//#i51359# add a second paragraph in case there's only one
{
SwNodeIndex aIdx( pWorkDoc->GetNodes().GetEndOfExtras(), 2 );
@@ -2904,6 +2921,7 @@ sal_Int32 SwDBManager::MergeDocuments( SwMailMergeConfigItem& rMMConfig,
{
//append a paragraph
pWorkDoc->getIDocumentContentOperations().AppendTxtNode( aTestPos );
+ para_added = true;
}
}
@@ -2912,6 +2930,15 @@ sal_Int32 SwDBManager::MergeDocuments( SwMailMergeConfigItem& rMMConfig,
lcl_SaveDoc( xWorkDocSh, "WorkDoc", nDocNo );
#endif
pTargetShell->Paste( rWorkShell.GetDoc(), true );
+
+ if ( para_added ) {
+ // Move cursor to the start or Delete will assert because
+ // of the cursors SwIndex ref on the deleting node.
+ pTargetShell->SttEndDoc( true );
+ SwNodeIndex aTargetIdx( pTargetNodes->GetEndOfContent(), -1 );
+ pTargetNodes->Delete( aTargetIdx, 1 );
+ }
+
//convert fields in page styles (header/footer - has to be done after the first document has been pasted
if(1 == nDocNo)
{
More information about the Libreoffice-commits
mailing list