You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by le...@apache.org on 2012/06/14 08:45:04 UTC
svn commit: r1350103 - in /incubator/ooo/trunk/main/sc: inc/document.hxx
source/core/data/documen9.cxx source/ui/view/dbfunc3.cxx
Author: leiw
Date: Thu Jun 14 06:45:03 2012
New Revision: 1350103
URL: http://svn.apache.org/viewvc?rev=1350103&view=rev
Log:
#i119956 - Crash if undo redo creating data pilot from imported data
Patch by: pengyunquan
Review by: Wang Lei
Modified:
incubator/ooo/trunk/main/sc/inc/document.hxx
incubator/ooo/trunk/main/sc/source/core/data/documen9.cxx
incubator/ooo/trunk/main/sc/source/ui/view/dbfunc3.cxx
Modified: incubator/ooo/trunk/main/sc/inc/document.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/sc/inc/document.hxx?rev=1350103&r1=1350102&r2=1350103&view=diff
==============================================================================
--- incubator/ooo/trunk/main/sc/inc/document.hxx (original)
+++ incubator/ooo/trunk/main/sc/inc/document.hxx Thu Jun 14 06:45:03 2012
@@ -712,6 +712,9 @@ public:
ScDrawLayer* GetDrawLayer() { return pDrawLayer; }
SfxBroadcaster* GetDrawBroadcaster(); // zwecks Header-Vermeidung
void BeginDrawUndo();
+ sal_Bool IsDrawRecording() const;
+ void EndDrawUndo();//paired with BeginDrawUndo, clear undo object if GetUndoObj is not called.
+ //Not necessary if GetUndoObj is called, but call EndDrawUndo paired with BeginDrawUndo is recommended
void BeginUnoRefUndo();
bool HasUnoRefUndo() const { return ( pUnoRefUndoList != NULL ); }
Modified: incubator/ooo/trunk/main/sc/source/core/data/documen9.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/sc/source/core/data/documen9.cxx?rev=1350103&r1=1350102&r2=1350103&view=diff
==============================================================================
--- incubator/ooo/trunk/main/sc/source/core/data/documen9.cxx (original)
+++ incubator/ooo/trunk/main/sc/source/core/data/documen9.cxx Thu Jun 14 06:45:03 2012
@@ -78,6 +78,17 @@ void ScDocument::BeginDrawUndo()
pDrawLayer->BeginCalcUndo();
}
+sal_Bool ScDocument::IsDrawRecording() const
+{
+ return pDrawLayer ? pDrawLayer->IsRecording() : sal_False;
+}
+
+void ScDocument::EndDrawUndo()
+{
+ if( pDrawLayer )
+ delete pDrawLayer->GetCalcUndo();
+}
+
XColorTable* ScDocument::GetColorTable()
{
if (pDrawLayer)
Modified: incubator/ooo/trunk/main/sc/source/ui/view/dbfunc3.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/sc/source/ui/view/dbfunc3.cxx?rev=1350103&r1=1350102&r2=1350103&view=diff
==============================================================================
--- incubator/ooo/trunk/main/sc/source/ui/view/dbfunc3.cxx (original)
+++ incubator/ooo/trunk/main/sc/source/ui/view/dbfunc3.cxx Thu Jun 14 06:45:03 2012
@@ -614,6 +614,11 @@ bool ScDBFunc::MakePivotTable( const ScD
SCTAB nNewTab = nSrcTab+1;
+ const bool bDrawUndo = ( bUndo && !pDoc->IsDrawRecording() );
+
+ if( bDrawUndo )
+ pDoc->BeginDrawUndo();
+
SCTAB i=1;
while ( !pDoc->InsertTab( nNewTab, lcl_MakePivotTabName( aName, i ) ) && i <= MAXTAB )
i++;
@@ -629,6 +634,9 @@ bool ScDBFunc::MakePivotTable( const ScD
SetTabNo( nNewTab, sal_True );
aDestRange = ScRange( 0, 0, nNewTab );
+
+ if( bDrawUndo )
+ pDoc->EndDrawUndo();
}
ScDPObject* pDPObj = pDoc->GetDPAtCursor(