diff options
author | László Németh <nemeth@numbertext.org> | 2023-01-18 12:26:11 +0100 |
---|---|---|
committer | Christian Lohmaier <lohmaier+LibreOffice@googlemail.com> | 2023-02-09 11:42:38 +0000 |
commit | 6d47b8a09f51357851cdfa752f231ed10328b8f2 (patch) | |
tree | 1ec3a5c319a738a3701a4b3c16278e3ad661d43a | |
parent | tdf#152991 sd: fix oversized rectangle of edited embedded object (diff) | |
download | core-6d47b8a09f51357851cdfa752f231ed10328b8f2.tar.gz core-6d47b8a09f51357851cdfa752f231ed10328b8f2.zip |
tdf#152964 sw: fix crash of Undo of tracked deletion of empty table rows
In Hide Changes mode, Undo of insertion of CH_TXT_TRACKED_DUMMY_CHAR
(workaround of the deletion of empty table rows), resulted a crash
because of inconsistency of table and redline nodes. As a workaround,
skip that insertion from the Undo.
Regression from commit a74c51025fa4519caaf461492e4ed8e68bd34885
"tdf#146962 sw: hide deleted row at deletion in Hide Changes".
Change-Id: I0666d7bcbbf08d84386cea64c1807f69f751479d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145737
Tested-by: Jenkins
Reviewed-by: László Németh <nemeth@numbertext.org>
(cherry picked from commit 4e72e646255624eda698da750383a5725e8f6c4c)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145718
Reviewed-by: Christian Lohmaier <lohmaier+LibreOffice@googlemail.com>
-rw-r--r-- | sw/qa/uitest/writer_tests7/tdf152964.py | 50 | ||||
-rw-r--r-- | sw/source/core/docnode/ndtbl1.cxx | 1 |
2 files changed, 51 insertions, 0 deletions
diff --git a/sw/qa/uitest/writer_tests7/tdf152964.py b/sw/qa/uitest/writer_tests7/tdf152964.py new file mode 100644 index 000000000000..abbf25434668 --- /dev/null +++ b/sw/qa/uitest/writer_tests7/tdf152964.py @@ -0,0 +1,50 @@ +# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +from uitest.framework import UITestCase +from uitest.uihelper.common import get_state_as_dict +from libreoffice.uno.propertyvalue import mkPropertyValues +from uitest.uihelper.common import select_pos + +# Bug 152964 - Undo of tracked deletion of an empty table row crashed Writer + + +class tdf152964(UITestCase): + def test_tdf152964(self): + with self.ui_test.create_doc_in_start_center("writer"): + + # redlining should be on + self.xUITest.executeCommand(".uno:TrackChanges") + # hide changes + self.xUITest.executeCommand(".uno:ShowTrackedChanges") + + # insert a table + xWriterDoc = self.xUITest.getTopFocusWindow() + xWriterEdit = xWriterDoc.getChild("writer_edit") + xWriterEdit.executeAction("TYPE", mkPropertyValues({"KEYCODE": "RETURN"})) + with self.ui_test.execute_dialog_through_command(".uno:InsertTable") as xDialog: + formatlbinstable = xDialog.getChild("formatlbinstable") + entry = formatlbinstable.getChild("1") + entry.executeAction("SELECT", tuple()) + + # delete its second and first rows + self.xUITest.executeCommand(".uno:GoDown") + self.xUITest.executeCommand(".uno:DeleteRows") + self.xUITest.executeCommand(".uno:DeleteRows") + + # This crashed Writer + self.xUITest.executeCommand(".uno:Undo") + + # test other Undos and Redos + self.xUITest.executeCommand(".uno:Undo") + self.xUITest.executeCommand(".uno:Undo") + self.xUITest.executeCommand(".uno:Redo") + self.xUITest.executeCommand(".uno:Redo") + self.xUITest.executeCommand(".uno:Redo") + +# vim: set shiftwidth=4 softtabstop=4 expandtab: diff --git a/sw/source/core/docnode/ndtbl1.cxx b/sw/source/core/docnode/ndtbl1.cxx index e1888bab015b..7fa9dd53e2d9 100644 --- a/sw/source/core/docnode/ndtbl1.cxx +++ b/sw/source/core/docnode/ndtbl1.cxx @@ -640,6 +640,7 @@ void SwDoc::SetRowNotTracked( const SwCursor& rCursor, // new redline can cause a problem) if ( bInsertDummy && (pLn->IsEmpty() || bDeletionOfOwnRowInsertion ) ) { + ::sw::UndoGuard const undoGuard(GetIDocumentUndoRedo()); SwNodeIndex aInsPos( *(pLn->GetTabBoxes()[0]->GetSttNd()), 1 ); RedlineFlags eOld = getIDocumentRedlineAccess().GetRedlineFlags(); getIDocumentRedlineAccess().SetRedlineFlags_intern(RedlineFlags::NONE); |