summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLászló Németh <nemeth@numbertext.org>2022-08-18 12:00:32 +0200
committerLászló Németh <nemeth@numbertext.org>2022-08-19 13:03:44 +0200
commita91ad83e5eb83625ee0e1c9250365c5dc494f845 (patch)
treea80644f51789eba5259fc6aea7f9715fbe66d2e0
parentd3492e15dce1dc8448c6444a92e3e2f7ec19571c (diff)
tdf#150443 sw: fix crash of rejecting table row deletion
Joining "Delete" redlines of deleted table row with overlapping tracked formatting change with same time stamp resulted bad tree parent in Manage Changes dialog window (tracked formatting change instead of tracked deletion, see its pencil icon before this fix), crashing at its rejection. Regression from commit eebe4747d2d13545004937bb0267ccfc8ab9d63f "tdf#144270 sw: manage tracked table (row) deletion/insertion". Change-Id: Ia0f0b1fdff96f4acbe14025f8016e39ce95c7f09 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/138474 Tested-by: László Németh <nemeth@numbertext.org> Reviewed-by: László Németh <nemeth@numbertext.org> (cherry picked from commit 6f05dea5d93445042775cb8c8a8dd400e4dda3a6) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/138428 Tested-by: Jenkins
-rw-r--r--sw/qa/uitest/data/tdf150443.docxbin0 -> 27927 bytes
-rw-r--r--sw/qa/uitest/writer_tests7/tdf150443.py46
-rw-r--r--sw/source/uibase/misc/redlndlg.cxx4
3 files changed, 50 insertions, 0 deletions
diff --git a/sw/qa/uitest/data/tdf150443.docx b/sw/qa/uitest/data/tdf150443.docx
new file mode 100644
index 000000000000..162aec01f928
--- /dev/null
+++ b/sw/qa/uitest/data/tdf150443.docx
Binary files differ
diff --git a/sw/qa/uitest/writer_tests7/tdf150443.py b/sw/qa/uitest/writer_tests7/tdf150443.py
new file mode 100644
index 000000000000..8cca7c78e6c8
--- /dev/null
+++ b/sw/qa/uitest/writer_tests7/tdf150443.py
@@ -0,0 +1,46 @@
+# -*- 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, get_url_for_data_file
+from libreoffice.uno.propertyvalue import mkPropertyValues
+
+class tdf150443(UITestCase):
+
+ def test_tdf150443(self):
+ with self.ui_test.load_file(get_url_for_data_file("tdf150443.docx")) as document:
+ xWriterDoc = self.xUITest.getTopFocusWindow()
+ xWriterEdit = xWriterDoc.getChild("writer_edit")
+ xToolkit = self.xContext.ServiceManager.createInstance('com.sun.star.awt.Toolkit')
+
+ # search term "Jump here!"
+ with self.ui_test.execute_modeless_dialog_through_command(".uno:SearchDialog", close_button="close") as xDialog:
+ searchterm = xDialog.getChild("searchterm")
+ searchterm.executeAction("TYPE", mkPropertyValues({"TEXT":"Jump here!"}))
+ xsearch = xDialog.getChild("search")
+ xsearch.executeAction("CLICK", tuple()) #first search
+ xToolkit.processEventsToIdle()
+ self.assertEqual(get_state_as_dict(xWriterEdit)["CurrentPage"], "4")
+
+ # reject the tracked table row in Manage Changes dialog window
+ with self.ui_test.execute_modeless_dialog_through_command(".uno:AcceptTrackedChanges", close_button="close") as xTrackDlg:
+ changesList = xTrackDlg.getChild("writerchanges")
+
+ items = len(changesList.getChildren())
+
+ # select tree parent of the actual tracked row deletion in tree list
+ changesList.executeAction("TYPE", mkPropertyValues({"KEYCODE": "LEFT"}))
+ xToolkit.processEventsToIdle()
+
+ # Without the fix in place, it would have crashed here
+ xAccBtn = xTrackDlg.getChild("reject")
+ xAccBtn.executeAction("CLICK", tuple())
+ self.assertEqual(items - 1, len(changesList.getChildren()))
+
+# vim: set shiftwidth=4 softtabstop=4 expandtab:
diff --git a/sw/source/uibase/misc/redlndlg.cxx b/sw/source/uibase/misc/redlndlg.cxx
index 2b12439494b8..a80fd90ee0f3 100644
--- a/sw/source/uibase/misc/redlndlg.cxx
+++ b/sw/source/uibase/misc/redlndlg.cxx
@@ -828,7 +828,11 @@ void SwRedlineAcceptDlg::InsertParents(SwRedlineTable::size_type nStart, SwRedli
else
nNewTableParent = i;
}
+ else
+ nPrevRowChange = SwRedlineTable::npos;
}
+ else
+ nPrevRowChange = SwRedlineTable::npos;
bool bRowChange(SwRedlineTable::npos != nLastChangeInRow);