sw/qa/uitest/data/reject-all-overlap.docx   |binary
 sw/qa/uitest/writer_tests/trackedChanges.py |   17 +++++++++++++++++
 sw/source/uibase/misc/redlndlg.cxx          |   22 ++--------------------
 3 files changed, 19 insertions(+), 20 deletions(-)

New commits:
commit 05d89eabeb16c4b8ec2bf51dc35913bfd21a932e
Author:     Miklos Vajna <[email protected]>
AuthorDate: Tue Dec 16 08:34:26 2025 +0100
Commit:     Caolán McNamara <[email protected]>
CommitDate: Tue Dec 16 10:38:40 2025 +0100

    tdf#168737 sw interdependent redlines, reject all: fix ignored format 
redlines
    
    The bugdoc has two redlines: a format and a delete redline. Pressing
    "reject all" in the manage changes dialog doesn't reject the format
    redline.
    
    Seems this happens because of code added in commit
    9c4eef7d809ad7d283860c7b47b0f561aa240906 (tdf#52391 reject/clear
    formatting of format-only changes, 2019-01-29), which argued that
    rejection of format redlines isn't really implemented, so better if a
    "mass reject all" doesn't reject them, unless only format redlines are
    found in the document.  But in the meantime I worked on improving
    support for rejecting format redlines, most recently commit
    47cb60bc534104852a219426e3beb4c714b6cf07 (tdf#167761 sw format redline,
    char props: implement ODF import, 2025-08-18) added ODF import/export of
    these old direct character properties, so it now makes less sense to
    filter out format redlines while rejecting all of them.  Also, the
    matching toolbar button didn't ignore such format redlines.
    
    Fix the problem by simplifying SwRedlineAcceptDlg::CallAcceptReject():
    unless the redline data for the iterator says this item is disabled,
    always add it to the list of redlines, similar to what the "reject the
    selected redline(s)" case did already.
    
    Note that the original 2019 commit was less confusing, as it did change
    the label of the reject all button, but that was removed in commit
    2e1a38ceb6866248ec30f6fe58cd3adc1b910eec (tdf#146893 Rework Manage
    Changes dialog, 2022-01-24).
    
    Change-Id: I69e7247d068cea2a25cd46ad2d5b41fccfa54919
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195693
    Tested-by: Jenkins CollaboraOffice <[email protected]>
    Tested-by: Caolán McNamara <[email protected]>
    Reviewed-by: Caolán McNamara <[email protected]>

diff --git a/sw/qa/uitest/data/reject-all-overlap.docx 
b/sw/qa/uitest/data/reject-all-overlap.docx
new file mode 100644
index 000000000000..6263df4e0f6f
Binary files /dev/null and b/sw/qa/uitest/data/reject-all-overlap.docx differ
diff --git a/sw/qa/uitest/writer_tests/trackedChanges.py 
b/sw/qa/uitest/writer_tests/trackedChanges.py
index 32ba68964ac6..7c1e0431d1ae 100644
--- a/sw/qa/uitest/writer_tests/trackedChanges.py
+++ b/sw/qa/uitest/writer_tests/trackedChanges.py
@@ -625,6 +625,23 @@ class trackedchanges(UITestCase):
             # i.e. a change was not accepted.
             self.assertEqual(document.Redlines.Count, 0)
 
+    def test_reject_all_deletes_all_redlines(self):
+        # Given a document with overlapping changes:
+        with 
self.ui_test.load_file(get_url_for_data_file("reject-all-overlap.docx")) as 
document:
+            xWriterDoc = self.xUITest.getTopFocusWindow()
+            xWriterEdit = xWriterDoc.getChild("writer_edit")
+
+            # When rejecting all changes using the manage changes dialog:
+            with 
self.ui_test.execute_modeless_dialog_through_command(".uno:AcceptTrackedChanges",
 close_button="close") as xTrackDlg:
+                xAccBtn = xTrackDlg.getChild("rejectall")
+                xAccBtn.executeAction("CLICK", tuple())
+
+            # Then make sure all changes are rejected:
+            # Without the accompanying fix in place, this failed with:
+            # AssertionError: 1 != 0
+            # i.e. a change was not rejected.
+            self.assertEqual(document.Redlines.Count, 0)
+
     def test_tdf155847_multiple_tracked_columns_crash(self):
         with 
self.ui_test.load_file(get_url_for_data_file("TC-table-del-add.docx")) as 
document:
 
diff --git a/sw/source/uibase/misc/redlndlg.cxx 
b/sw/source/uibase/misc/redlndlg.cxx
index 5050d4f1e8c0..15c74d445d04 100644
--- a/sw/source/uibase/misc/redlndlg.cxx
+++ b/sw/source/uibase/misc/redlndlg.cxx
@@ -1108,7 +1108,7 @@ void SwRedlineAcceptDlg::CallAcceptReject( bool bSelect, 
bool bAccept )
 
     weld::TreeView& rTreeView = m_pTable->GetWidget();
 
-    auto lambda = [this, pSh, bSelect, bAccept, &rTreeView, &nPos, 
&aRedlines](weld::TreeIter& rEntry) {
+    auto lambda = [bSelect, &rTreeView, &nPos, &aRedlines](weld::TreeIter& 
rEntry) {
         if (!rTreeView.get_iter_depth(rEntry))
         {
             if (bSelect && nPos == -1)
@@ -1116,25 +1116,7 @@ void SwRedlineAcceptDlg::CallAcceptReject( bool bSelect, 
bool bAccept )
 
             RedlinData *pData = 
weld::fromId<RedlinData*>(rTreeView.get_id(rEntry));
 
-            bool bIsNotFormatted = true;
-
-            // first remove only changes with insertion/deletion, if they exist
-            // (format-only changes haven't had real rejection yet, only an
-            // approximation: clear direct formatting, so try to warn
-            // with the extended button label "Reject All/Clear formatting")
-            if ( !bSelect && !bAccept && !m_bOnlyFormatedRedlines )
-            {
-                SwRedlineTable::size_type nPosition = GetRedlinePos(rEntry);
-                if (nPosition != SwRedlineTable::npos)
-                {
-                    const SwRangeRedline& rRedln = pSh->GetRedline(nPosition);
-
-                    if (RedlineType::Format == rRedln.GetType())
-                        bIsNotFormatted = false;
-                }
-            }
-
-            if (!pData->bDisabled && bIsNotFormatted)
+            if (!pData->bDisabled)
                 aRedlines.emplace_back(rTreeView.make_iterator(&rEntry));
         }
         return false;

Reply via email to