diff options
-rw-r--r-- | sc/inc/dbdata.hxx | 2 | ||||
-rw-r--r-- | sc/source/core/tool/dbdata.cxx | 34 |
2 files changed, 14 insertions, 22 deletions
diff --git a/sc/inc/dbdata.hxx b/sc/inc/dbdata.hxx index 5812365a7eb9..85ace9f3916a 100644 --- a/sc/inc/dbdata.hxx +++ b/sc/inc/dbdata.hxx @@ -221,7 +221,7 @@ private: void AdjustTableColumnNames( UpdateRefMode eUpdateRefMode, SCCOL nDx, SCCOL nCol1, SCCOL nOldCol1, SCCOL nOldCol2, SCCOL nNewCol1, SCCOL nNewCol2 ); - void InvalidateTableColumnNames(); + void InvalidateTableColumnNames( bool bSwapToEmptyNames ); }; class SC_DLLPUBLIC ScDBCollection diff --git a/sc/source/core/tool/dbdata.cxx b/sc/source/core/tool/dbdata.cxx index 4b58c87afe75..c5b14a01ecad 100644 --- a/sc/source/core/tool/dbdata.cxx +++ b/sc/source/core/tool/dbdata.cxx @@ -185,11 +185,7 @@ ScDBData& ScDBData::operator= (const ScDBData& rData) bAutoFilter = rData.bAutoFilter; if (bHeaderRangeDiffers) - { - if (!maTableColumnNames.empty()) - ::std::vector<OUString>().swap( maTableColumnNames); - InvalidateTableColumnNames(); - } + InvalidateTableColumnNames( true); else { maTableColumnNames = rData.maTableColumnNames; @@ -320,15 +316,7 @@ void ScDBData::SetArea(SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW { bool bHeaderRangeChange = (nTab != nTable || nCol1 != nStartCol || nCol2 != nEndCol || nRow1 != nStartRow); if (bHeaderRangeChange) - { EndTableColumnNamesListener(); - if (!maTableColumnNames.empty()) - { - SAL_WARN("sc.core", "ScDBData::SetArea - invalidating column names/offsets"); - ::std::vector<OUString>().swap( maTableColumnNames); - InvalidateTableColumnNames(); - } - } nTable = nTab; nStartCol = nCol1; @@ -337,7 +325,13 @@ void ScDBData::SetArea(SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nEndRow = nRow2; if (bHeaderRangeChange) + { + SAL_WARN_IF( !maTableColumnNames.empty(), "sc.core", "ScDBData::SetArea - invalidating column names/offsets"); + // Invalidate *after* new area has been set above to add the proper + // header range to dirty list. + InvalidateTableColumnNames( true); StartTableColumnNamesListener(); + } } void ScDBData::MoveTo(SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2) @@ -632,12 +626,8 @@ void ScDBData::ExtendDataArea(ScDocument* pDoc) pDoc->GetDataArea(nTable, nStartCol, nStartRow, nEndCol, nEndRow, false, true); if (nStartCol != nOldCol1 || nEndCol != nOldCol2) { - if (!maTableColumnNames.empty()) - { - SAL_WARN("sc.core", "ScDBData::ExtendDataArea - invalidating column names/offsets"); - ::std::vector<OUString>().swap( maTableColumnNames); - InvalidateTableColumnNames(); - } + SAL_WARN_IF( !maTableColumnNames.empty(), "sc.core", "ScDBData::ExtendDataArea - invalidating column names/offsets"); + InvalidateTableColumnNames( true); } } @@ -709,12 +699,14 @@ void ScDBData::AdjustTableColumnNames( UpdateRefMode eUpdateRefMode, SCCOL nDx, if (maTableColumnNames.empty()) mbTableColumnNamesDirty = true; if (mbTableColumnNamesDirty) - InvalidateTableColumnNames(); + InvalidateTableColumnNames( false); // preserve new column names array } -void ScDBData::InvalidateTableColumnNames() +void ScDBData::InvalidateTableColumnNames( bool bSwapToEmptyNames ) { mbTableColumnNamesDirty = true; + if (bSwapToEmptyNames && !maTableColumnNames.empty()) + ::std::vector<OUString>().swap( maTableColumnNames); if (mpContainer) { // Add header range to dirty list. |