summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2016-05-30 23:01:04 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2016-06-07 07:21:14 +0000
commit212ebeb225fae10db4dbb4c4a1a4f3fd2d100f42 (patch)
tree5a2ece575ee76c3f6a4206793ef4f3c4017eb9e4
parent69ad547bf476a54326d772f2b6b832ad78eed486 (diff)
tdf#98226: fix undo of table AutoFormat
The new call to SwTable::SetTableStyleName() was not recorded in SwUndoTableAutoFormat and hence persisted even after Undo. (regression from 73f4a06c0bce51c7c8b9ae9adfdc7ffac27d06b4) Change-Id: Ia7f769dafa62f02ff8e4b0596b48266190c7a69b (cherry picked from commit 7b042d2865c5bb2c2dde1dd47de124bc0df61ae8) Reviewed-on: https://gerrit.libreoffice.org/25983 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
-rw-r--r--sw/inc/doc.hxx2
-rw-r--r--sw/inc/fesh.hxx3
-rw-r--r--sw/source/core/docnode/ndtbl.cxx7
-rw-r--r--sw/source/core/frmedt/fetab.cxx13
-rw-r--r--sw/source/core/inc/UndoTable.hxx1
-rw-r--r--sw/source/core/undo/untbl.cxx13
6 files changed, 28 insertions, 11 deletions
diff --git a/sw/inc/doc.hxx b/sw/inc/doc.hxx
index afed50ad5089..e9b3be56b8dc 100644
--- a/sw/inc/doc.hxx
+++ b/sw/inc/doc.hxx
@@ -1246,7 +1246,7 @@ public:
/// AutoFormat for table/table selection.
/// @param bResetDirect Reset direct formatting that might be applied to the cells.
- bool SetTableAutoFormat(const SwSelBoxes& rBoxes, const SwTableAutoFormat& rNew, bool bResetDirect = false);
+ bool SetTableAutoFormat(const SwSelBoxes& rBoxes, const SwTableAutoFormat& rNew, bool bResetDirect = false, bool isSetStyleName = false);
// Query attributes.
bool GetTableAutoFormat( const SwSelBoxes& rBoxes, SwTableAutoFormat& rGet );
diff --git a/sw/inc/fesh.hxx b/sw/inc/fesh.hxx
index 52e77192384e..ac8519203e74 100644
--- a/sw/inc/fesh.hxx
+++ b/sw/inc/fesh.hxx
@@ -727,7 +727,8 @@ public:
/// Update the direct formatting according to the current table style.
/// @param pTableNode Table node to update. When nullptr, current cursor position is used.
/// @param bResetDirect Reset direct formatting that might be applied to the cells.
- bool UpdateTableStyleFormatting(SwTableNode *pTableNode = nullptr, bool bResetDirect = false);
+ /// @param pStyleName new style to apply
+ bool UpdateTableStyleFormatting(SwTableNode *pTableNode = nullptr, bool bResetDirect = false, OUString const* pStyleName = nullptr);
bool GetTableAutoFormat( SwTableAutoFormat& rGet );
diff --git a/sw/source/core/docnode/ndtbl.cxx b/sw/source/core/docnode/ndtbl.cxx
index c01455adf983..e120801a488e 100644
--- a/sw/source/core/docnode/ndtbl.cxx
+++ b/sw/source/core/docnode/ndtbl.cxx
@@ -3741,7 +3741,7 @@ static bool lcl_SetAFormatBox(FndBox_ & rBox, SetAFormatTabPara *pSetPara, bool
return true;
}
-bool SwDoc::SetTableAutoFormat(const SwSelBoxes& rBoxes, const SwTableAutoFormat& rNew, bool bResetDirect)
+bool SwDoc::SetTableAutoFormat(const SwSelBoxes& rBoxes, const SwTableAutoFormat& rNew, bool bResetDirect, bool const isSetStyleName)
{
OSL_ENSURE( !rBoxes.empty(), "No valid Box list" );
SwTableNode* pTableNd = const_cast<SwTableNode*>(rBoxes[0]->GetSttNd()->FindTableNode());
@@ -3780,6 +3780,11 @@ bool SwDoc::SetTableAutoFormat(const SwSelBoxes& rBoxes, const SwTableAutoFormat
GetIDocumentUndoRedo().DoUndo(false);
}
+ if (isSetStyleName)
+ { // tdf#98226 do this here where undo can record it
+ pTableNd->GetTable().SetTableStyleName(rNew.GetName());
+ }
+
rNew.RestoreTableProperties(table);
SetAFormatTabPara aPara( rNew );
diff --git a/sw/source/core/frmedt/fetab.cxx b/sw/source/core/frmedt/fetab.cxx
index d0fd94d7282b..fc6108bb6ad9 100644
--- a/sw/source/core/frmedt/fetab.cxx
+++ b/sw/source/core/frmedt/fetab.cxx
@@ -1186,11 +1186,11 @@ bool SwFEShell::SetTableStyle(const SwTableAutoFormat& rStyle)
return false;
// set the name & update
- pTableNode->GetTable().SetTableStyleName(rStyle.GetName());
- return UpdateTableStyleFormatting(pTableNode);
+ return UpdateTableStyleFormatting(pTableNode, false, &rStyle.GetName());
}
-bool SwFEShell::UpdateTableStyleFormatting(SwTableNode *pTableNode, bool bResetDirect)
+bool SwFEShell::UpdateTableStyleFormatting(SwTableNode *pTableNode,
+ bool bResetDirect, OUString const*const pStyleName)
{
if (!pTableNode)
{
@@ -1199,7 +1199,9 @@ bool SwFEShell::UpdateTableStyleFormatting(SwTableNode *pTableNode, bool bResetD
return false;
}
- OUString aTableStyleName(pTableNode->GetTable().GetTableStyleName());
+ OUString const aTableStyleName((pStyleName)
+ ? *pStyleName
+ : pTableNode->GetTable().GetTableStyleName());
SwTableAutoFormat* pTableStyle = GetDoc()->GetTableStyles().FindAutoFormat(aTableStyleName);
if (!pTableStyle)
return false;
@@ -1227,7 +1229,8 @@ bool SwFEShell::UpdateTableStyleFormatting(SwTableNode *pTableNode, bool bResetD
{
SET_CURR_SHELL( this );
StartAllAction();
- bRet = GetDoc()->SetTableAutoFormat(aBoxes, *pTableStyle, bResetDirect);
+ bRet = GetDoc()->SetTableAutoFormat(
+ aBoxes, *pTableStyle, bResetDirect, pStyleName != nullptr);
DELETEZ( pLastCols );
DELETEZ( pLastRows );
EndAllActionAndCall();
diff --git a/sw/source/core/inc/UndoTable.hxx b/sw/source/core/inc/UndoTable.hxx
index 427e4896dafd..7266ca92168e 100644
--- a/sw/source/core/inc/UndoTable.hxx
+++ b/sw/source/core/inc/UndoTable.hxx
@@ -142,6 +142,7 @@ class SwUndoTableNumFormat;
class SwUndoTableAutoFormat : public SwUndo
{
+ OUString m_TableStyleName;
sal_uLong nSttNode;
SaveTable* pSaveTable;
std::vector< std::shared_ptr<SwUndoTableNumFormat> > m_Undos;
diff --git a/sw/source/core/undo/untbl.cxx b/sw/source/core/undo/untbl.cxx
index c6c1e695c002..e270b8c4cd42 100644
--- a/sw/source/core/undo/untbl.cxx
+++ b/sw/source/core/undo/untbl.cxx
@@ -1409,9 +1409,10 @@ void SwUndoAttrTable::RedoImpl(::sw::UndoRedoContext & rContext)
// UndoObject for AutoFormat on Table
SwUndoTableAutoFormat::SwUndoTableAutoFormat( const SwTableNode& rTableNd,
const SwTableAutoFormat& rAFormat )
- : SwUndo( UNDO_TABLE_AUTOFMT ),
- nSttNode( rTableNd.GetIndex() ),
- bSaveContentAttr( false )
+ : SwUndo( UNDO_TABLE_AUTOFMT )
+ , m_TableStyleName(rTableNd.GetTable().GetTableStyleName())
+ , nSttNode( rTableNd.GetIndex() )
+ , bSaveContentAttr( false )
, m_nRepeatHeading(rTableNd.GetTable().GetRowsToRepeat())
{
pSaveTable = new SaveTable( rTableNd.GetTable() );
@@ -1444,6 +1445,12 @@ SwUndoTableAutoFormat::UndoRedo(bool const bUndo, ::sw::UndoRedoContext & rConte
OSL_ENSURE( pTableNd, "no TableNode" );
SwTable& table = pTableNd->GetTable();
+ if (table.GetTableStyleName() != m_TableStyleName)
+ {
+ OUString const temp(table.GetTableStyleName());
+ table.SetTableStyleName(m_TableStyleName);
+ m_TableStyleName = temp;
+ }
SaveTable* pOrig = new SaveTable( table );
// than go also over the ContentNodes of the EndBoxes and collect
// all paragraph attributes