sc/qa/extras/sceditfieldobj_cell.cxx | 4 +--- sc/source/ui/unoobj/cellsuno.cxx | 13 ++++++++----- 2 files changed, 9 insertions(+), 8 deletions(-)
New commits: commit a8ce5af575ea5e05eb7c349d50b4eb08cab983ff Author: Mike Kaganski <mike.kagan...@collabora.com> AuthorDate: Sat Aug 23 12:05:12 2025 +0500 Commit: Mike Kaganski <mike.kagan...@collabora.com> CommitDate: Sat Aug 23 12:59:00 2025 +0200 tdf#168073: check if xRange is this And use its own XText implementation object as the range. Also relax the call to getFromUnoTunnel, to request SvxUnoTextRangeBase that is actually wanted, not arbitrarily chosen ScCellTextCursor. This makes this optimized code to also handle ranges returned from ScCellObj's own getStart() / getEnd(). Change-Id: I4f500b32790f2844fdd7f54818b79b8a29525475 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/190085 Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> Tested-by: Jenkins diff --git a/sc/qa/extras/sceditfieldobj_cell.cxx b/sc/qa/extras/sceditfieldobj_cell.cxx index 4c13bdc4db8d..7af883bbd9d2 100644 --- a/sc/qa/extras/sceditfieldobj_cell.cxx +++ b/sc/qa/extras/sceditfieldobj_cell.cxx @@ -142,10 +142,8 @@ uno::Reference<uno::XInterface> ScEditFieldObj_Cell::init() uno::Reference<table::XCell> xCell = xSheet->getCellByPosition(0, 0); uno::Reference<text::XText> xText(xCell, uno::UNO_QUERY_THROW); - uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor(); - uno::Reference<text::XTextRange> xRange(xCursor, uno::UNO_QUERY_THROW); uno::Reference<text::XTextContent> xContent(mxField, uno::UNO_QUERY_THROW); - xText->insertTextContent(xRange, xContent, false); + xText->insertTextContent(xText, xContent, false); } return mxField; } diff --git a/sc/source/ui/unoobj/cellsuno.cxx b/sc/source/ui/unoobj/cellsuno.cxx index b6ecd0cce147..cb2e771f9290 100644 --- a/sc/source/ui/unoobj/cellsuno.cxx +++ b/sc/source/ui/unoobj/cellsuno.cxx @@ -5921,13 +5921,16 @@ void SAL_CALL ScCellObj::insertTextContent( const uno::Reference<text::XTextRang sal_Bool bAbsorb ) { SolarMutexGuard aGuard; - ScDocShell* pDocSh = GetDocShell(); - if ( pDocSh && xContent.is() ) + ScEditFieldObj* pCellField = dynamic_cast<ScEditFieldObj*>(xContent.get()); + if (pCellField && pCellField->IsInserted()) + throw lang::IllegalArgumentException(u"Content already inserted"_ustr, getXWeak(), 1); + if (ScDocShell* pDocSh = GetDocShell(); pDocSh && pCellField) { - ScEditFieldObj* pCellField = dynamic_cast<ScEditFieldObj*>(xContent.get()); - SvxUnoTextRangeBase* pTextRange = comphelper::getFromUnoTunnel<ScCellTextCursor>( xRange ); + auto* pTextRange = comphelper::getFromUnoTunnel<SvxUnoTextRangeBase>(xRange); + if (!pTextRange && xRange.get() == this) // cell itself passed as range? + pTextRange = &GetUnoText(); - if ( pCellField && !pCellField->IsInserted() && pTextRange ) + if (pTextRange) { SvxEditSource* pEditSource = pTextRange->GetEditSource(); ESelection aSelection(pTextRange->GetSelection());