From ce285da92f95995a4e7c3a63713a8b004a1ab967 Mon Sep 17 00:00:00 2001 From: Muthu Subramanian Date: Fri, 7 Oct 2011 20:15:01 +0530 Subject: [PATCH] n#685123: Undo corrupting the document. --- sd/source/ui/func/fuformatpaintbrush.cxx | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/sd/source/ui/func/fuformatpaintbrush.cxx b/sd/source/ui/func/fuformatpaintbrush.cxx index 77908a5335e8..700ed0860ee7 100644 --- a/sd/source/ui/func/fuformatpaintbrush.cxx +++ b/sd/source/ui/func/fuformatpaintbrush.cxx @@ -256,20 +256,26 @@ bool FuFormatPaintBrush::HasContentForThisType( sal_uInt32 nObjectInventor, sal_ void FuFormatPaintBrush::Paste( bool bNoCharacterFormats, bool bNoParagraphFormats ) { const SdrMarkList& rMarkList = mpView->GetMarkedObjectList(); - if(mpItemSet.get() && (rMarkList.GetMarkCount() == 1) ) + if( mpItemSet.get() && ( rMarkList.GetMarkCount() == 1 ) ) { - SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj(); + SdrObject* pObj( NULL ); + bool bUndo = mpDoc->IsUndoEnabled(); - if( mpDoc->IsUndoEnabled() ) + if( bUndo && !mpView->GetTextEditOutlinerView() ) + pObj = rMarkList.GetMark(0)->GetMarkedSdrObj(); + + // n685123: ApplyFormatPaintBrush itself would store undo information + // except in a few cases (?) + if( pObj ) { String sLabel( mpViewShell->GetViewShellBase().RetrieveLabelFromCommand( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:FormatPaintbrush" ) ) ) ); mpDoc->BegUndo( sLabel ); - mpDoc->AddUndo(mpDoc->GetSdrUndoFactory().CreateUndoAttrObject(*pObj,sal_False,sal_True)); + mpDoc->AddUndo( mpDoc->GetSdrUndoFactory().CreateUndoAttrObject( *pObj, sal_False, sal_True ) ); } mpView->ApplyFormatPaintBrush( *mpItemSet.get(), bNoCharacterFormats, bNoParagraphFormats ); - if( mpDoc->IsUndoEnabled() ) + if( pObj ) { mpDoc->EndUndo(); }