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;
