sc/inc/document.hxx | 5 +++++ sc/source/core/data/column2.cxx | 14 ++++++++++++++ sc/source/core/data/document.cxx | 5 +++++ sc/source/ui/docshell/docsh.cxx | 1 + 4 files changed, 25 insertions(+)
New commits: commit be877a9fafc799e6d21f56f3b0b727b344a37eaf Author: Kohei Yoshida <kohei.yosh...@collabora.com> Date: Wed Nov 27 19:43:08 2013 -0500 Clear column data array cache when the document content changes. Change-Id: I09ffa455e79199e37ca6168753ec9ef4d5aa33dc diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx index 0546ef0..e283b3d 100644 --- a/sc/inc/document.hxx +++ b/sc/inc/document.hxx @@ -2018,6 +2018,11 @@ public: formula::VectorRefArray FetchVectorRefArray( const ScAddress& rPos, SCROW nLength ); + /** + * Called whenever the value of a cell inside the document is modified. + */ + void CellContentModified(); + SvtBroadcaster* GetBroadcaster( const ScAddress& rPos ); const SvtBroadcaster* GetBroadcaster( const ScAddress& rPos ) const; void DeleteBroadcasters( sc::ColumnBlockPosition& rBlockPos, const ScAddress& rTopPos, SCROW nLength ); diff --git a/sc/source/core/data/column2.cxx b/sc/source/core/data/column2.cxx index 8759c51..a39016a 100644 --- a/sc/source/core/data/column2.cxx +++ b/sc/source/core/data/column2.cxx @@ -2862,6 +2862,13 @@ void ScColumn::SetFormulaResults( SCROW nRow, const double* pResults, size_t nLe rCell.ResetDirty(); rCell.SetChanged(true); } + + std::vector<SCROW> aRows; + aRows.reserve(nLen); + for (size_t i = 0; i < nLen; ++i) + aRows.push_back(nRow+i); + + BroadcastCells(aRows, SC_HINT_DATACHANGED); } void ScColumn::SetFormulaResults( SCROW nRow, const formula::FormulaTokenRef* pResults, size_t nLen ) @@ -2888,6 +2895,13 @@ void ScColumn::SetFormulaResults( SCROW nRow, const formula::FormulaTokenRef* pR rCell.ResetDirty(); rCell.SetChanged(true); } + + std::vector<SCROW> aRows; + aRows.reserve(nLen); + for (size_t i = 0; i < nLen; ++i) + aRows.push_back(nRow+i); + + BroadcastCells(aRows, SC_HINT_DATACHANGED); } void ScColumn::SetNumberFormat( SCROW nRow, sal_uInt32 nNumberFormat ) diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx index 931994a..2fa2b0e 100644 --- a/sc/source/core/data/document.cxx +++ b/sc/source/core/data/document.cxx @@ -2313,6 +2313,11 @@ ScDocument::NumFmtMergeHandler::~NumFmtMergeHandler() mpDoc->pFormatExchangeList = NULL; } +void ScDocument::CellContentModified() +{ + mpFormulaGroupCxt.reset(); +} + SvtBroadcaster* ScDocument::GetBroadcaster( const ScAddress& rPos ) { ScTable* pTab = FetchTable(rPos.Tab()); diff --git a/sc/source/ui/docshell/docsh.cxx b/sc/source/ui/docshell/docsh.cxx index 98b6be6..0760425 100644 --- a/sc/source/ui/docshell/docsh.cxx +++ b/sc/source/ui/docshell/docsh.cxx @@ -3047,6 +3047,7 @@ ScDocShellModificator::~ScDocShellModificator() void ScDocShellModificator::SetDocumentModified() { ScDocument* pDoc = rDocShell.GetDocument(); + pDoc->CellContentModified(); if ( !pDoc->IsImportingXML() ) { // AutoCalcShellDisabled temporaer restaurieren _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits