summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sc/inc/dbdata.hxx2
-rw-r--r--sc/source/core/tool/dbdata.cxx34
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.