sw/inc/cmdid.h                    |    2 ++
 sw/qa/uibase/uiview/uiview.cxx    |   27 +++++++++++++++++++++++++++
 sw/sdi/_viewsh.sdi                |    6 ++++++
 sw/sdi/swriter.sdi                |   18 ++++++++++++++++++
 sw/source/uibase/uiview/view0.cxx |   20 ++++++++++++++++++++
 5 files changed, 73 insertions(+)

New commits:
commit 3c4da8d9fc1245b2b48d3b73ee88c29d2c1198ad
Author:     Miklos Vajna <[email protected]>
AuthorDate: Mon Dec 1 09:49:25 2025 +0100
Commit:     Miklos Vajna <[email protected]>
CommitDate: Mon Dec 1 18:39:28 2025 +0100

    cool#13574 sw redline render mode: add uno command to switch from standard
    
    So far a non-standard redline render mode was only available via the LOK
    API. Now this UNO command allows to toggle between standard (default)
    and ~omit deletes (kind of hide redlines, but only influence the
    painting, not the layout).
    
    Dispatching 2 times can be used to turn this on and off, i.e. toggle
    works. Also the necessary invalidate is performed, so the content is
    repainted with the new view option.
    
    Change-Id: Id303b432179bf503e8073585868a65a314847d47
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/194884
    Reviewed-by: Miklos Vajna <[email protected]>
    Tested-by: Jenkins

diff --git a/sw/inc/cmdid.h b/sw/inc/cmdid.h
index ce9293a0b4ef..4757f9f50174 100644
--- a/sw/inc/cmdid.h
+++ b/sw/inc/cmdid.h
@@ -176,6 +176,8 @@ class SwUINumRuleItem;
 
 #define FN_SET_PAGE             (FN_VIEW + 29)  /* Set page template to 
paragraph */
 
+#define FN_VIEW_REDLINE_RENDER_MODE (FN_VIEW + 30)
+
 #define FN_PRINT_LAYOUT         (FN_VIEW + 37)  /* print layout */
 
 #define FN_SCROLL_NAVIGATION    (FN_VIEW + 40)  /* Navigation Controller */
diff --git a/sw/qa/uibase/uiview/uiview.cxx b/sw/qa/uibase/uiview/uiview.cxx
index 4e074abdaa90..0f699341829e 100644
--- a/sw/qa/uibase/uiview/uiview.cxx
+++ b/sw/qa/uibase/uiview/uiview.cxx
@@ -440,6 +440,33 @@ CPPUNIT_TEST_FIXTURE(SwUibaseUiviewTest, 
testReinstateTrackedChangeState)
     CPPUNIT_ASSERT_EQUAL(SfxItemState::DISABLED, eState);
 }
 
+CPPUNIT_TEST_FIXTURE(SwUibaseUiviewTest, testRedlineRenderModeCommand)
+{
+    // Given a document with default view options:
+    createSwDoc();
+    SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
+    SwRedlineRenderMode eActual = 
pWrtShell->GetViewOptions()->GetRedlineRenderMode();
+    CPPUNIT_ASSERT_EQUAL(SwRedlineRenderMode::Standard, eActual);
+
+    // When toggling redline render mode to omit deletes:
+    dispatchCommand(mxComponent, u".uno:RedlineRenderMode"_ustr, {});
+
+    // Then make sure the view option is updated:
+    eActual = pWrtShell->GetViewOptions()->GetRedlineRenderMode();
+    // Without the accompanying fix in place, this test would have failed with:
+    // - Expected: 2 (OmitDeletes)
+    // - Actual  : 0 (Standard)
+    // i.e. the view option wasn't set.
+    CPPUNIT_ASSERT_EQUAL(SwRedlineRenderMode::OmitDeletes, eActual);
+
+    // And when toggling off:
+    dispatchCommand(mxComponent, u".uno:RedlineRenderMode"_ustr, {});
+
+    // Then make sure the view option is back to its default:
+    eActual = pWrtShell->GetViewOptions()->GetRedlineRenderMode();
+    CPPUNIT_ASSERT_EQUAL(SwRedlineRenderMode::Standard, eActual);
+}
+
 CPPUNIT_PLUGIN_IMPLEMENT();
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/sdi/_viewsh.sdi b/sw/sdi/_viewsh.sdi
index 8c51d3fadef6..5db24b03bc07 100644
--- a/sw/sdi/_viewsh.sdi
+++ b/sw/sdi/_viewsh.sdi
@@ -1003,6 +1003,12 @@ interface BaseTextEditView
         StateMethod = StateViewOptions ;
     ]
 
+    FN_VIEW_REDLINE_RENDER_MODE // status()
+    [
+        ExecMethod = ExecViewOptions ;
+        StateMethod = StateViewOptions ;
+    ]
+
     FN_VIEW_TABLEGRID // status()
     [
         ExecMethod = ExecViewOptions ;
diff --git a/sw/sdi/swriter.sdi b/sw/sdi/swriter.sdi
index 7209b09ed571..2bf53f9ed34c 100644
--- a/sw/sdi/swriter.sdi
+++ b/sw/sdi/swriter.sdi
@@ -679,6 +679,24 @@ SfxBoolItem ControlCodes FN_VIEW_META_CHARS
     GroupId = SfxGroupId::View;
 ]
 
+SfxBoolItem RedlineRenderMode FN_VIEW_REDLINE_RENDER_MODE
+
+[
+    AutoUpdate = TRUE,
+    FastCall = FALSE,
+    ReadOnlyDoc = TRUE,
+    Toggle = FALSE,
+    Container = FALSE,
+    RecordAbsolute = FALSE,
+    RecordPerSet;
+
+
+    AccelConfig = TRUE,
+    MenuConfig = TRUE,
+    ToolBoxConfig = TRUE,
+    GroupId = SfxGroupId::View;
+]
+
 SfxVoidItem ConvertTableText FN_CONVERT_TEXT_TABLE
 ()
 [
diff --git a/sw/source/uibase/uiview/view0.cxx 
b/sw/source/uibase/uiview/view0.cxx
index 4307b942dd93..0ee6dab7bf72 100644
--- a/sw/source/uibase/uiview/view0.cxx
+++ b/sw/source/uibase/uiview/view0.cxx
@@ -267,6 +267,11 @@ void SwView::StateViewOptions(SfxItemSet &rSet)
                 aBool.SetValue( lcl_IsViewMarks(*pOpt) ); break;
             case FN_VIEW_META_CHARS:
                 aBool.SetValue( pOpt->IsViewMetaChars() ); break;
+            case FN_VIEW_REDLINE_RENDER_MODE:
+            {
+                aBool.SetValue(pOpt->GetRedlineRenderMode() != 
SwRedlineRenderMode::Standard);
+            }
+            break;
             case FN_VIEW_TABLEGRID:
                 aBool.SetValue( pOpt->IsTableBoundaries() ); break;
             case SID_TOGGLE_NOTES:
@@ -668,6 +673,21 @@ void SwView::ExecViewOptions(SfxRequest &rReq)
         lcl_SetViewMetaChars( *pOpt, bFlag );
         break;
 
+    case FN_VIEW_REDLINE_RENDER_MODE:
+    {
+        SwRedlineRenderMode eMode
+            = bFlag ? SwRedlineRenderMode::OmitDeletes : 
SwRedlineRenderMode::Standard;
+        if (eState == STATE_TOGGLE)
+        {
+            eMode = pOpt->GetRedlineRenderMode() == 
SwRedlineRenderMode::Standard
+                        ? SwRedlineRenderMode::OmitDeletes
+                        : SwRedlineRenderMode::Standard;
+        }
+
+        pOpt->SetRedlineRenderMode(eMode);
+    }
+    break;
+
     case SID_AUTOSPELL_CHECK:
         const SfxPoolItem* pItem;
 

Reply via email to