[Libreoffice-commits] core.git: Branch 'libreoffice-5-2' - sw/inc sw/source

Michael Stahl mstahl at redhat.com
Tue Jun 7 07:21:34 UTC 2016


 sw/inc/doc.hxx                   |    2 +-
 sw/inc/fesh.hxx                  |    3 ++-
 sw/source/core/docnode/ndtbl.cxx |    7 ++++++-
 sw/source/core/frmedt/fetab.cxx  |   13 ++++++++-----
 sw/source/core/inc/UndoTable.hxx |    1 +
 sw/source/core/undo/untbl.cxx    |   13 ++++++++++---
 6 files changed, 28 insertions(+), 11 deletions(-)

New commits:
commit 212ebeb225fae10db4dbb4c4a1a4f3fd2d100f42
Author: Michael Stahl <mstahl at redhat.com>
Date:   Mon May 30 23:01:04 2016 +0200

    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 at libreoffice.org>
    Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>

diff --git a/sw/inc/doc.hxx b/sw/inc/doc.hxx
index afed50a..e9b3be5 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 52e7719..ac85192 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 c01455a..e120801 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 d0fd94d..fc6108b 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 427e489..7266ca9 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 c6c1e69..e270b8c4 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


More information about the Libreoffice-commits mailing list