From cb141564733eef078347b89ea657e46e193bd140 Mon Sep 17 00:00:00 2001 From: Czeber László Ádám Date: Mon, 17 Jul 2023 11:41:17 +0200 Subject: tdf#103480 sc: fix lost hyperlink at merging an empty cell with its cell MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Merging a cell containing a hyperlink with an empty cell resulted the loss of the hyperlink, i.e. only the text content was kept. Change-Id: I5148ce55157e3ad7926f5b5a82a682b837a784ed Reviewed-on: https://gerrit.libreoffice.org/c/core/+/154520 Reviewed-by: László Németh Tested-by: László Németh --- sc/qa/unit/ucalc_copypaste.cxx | 17 +++++++++++++++++ sc/source/core/data/documen3.cxx | 9 ++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) (limited to 'sc') diff --git a/sc/qa/unit/ucalc_copypaste.cxx b/sc/qa/unit/ucalc_copypaste.cxx index bad57d8646a7..575cfb90f9f7 100644 --- a/sc/qa/unit/ucalc_copypaste.cxx +++ b/sc/qa/unit/ucalc_copypaste.cxx @@ -10752,6 +10752,23 @@ CPPUNIT_TEST_FIXTURE(TestCopyPaste, testUndoBackgroundColor) m_pDoc->DeleteTab(0); } +CPPUNIT_TEST_FIXTURE(TestCopyPaste, testMergedHyperlink) +{ + m_pDoc->InsertTab(0, "Table1"); + m_pDoc->InitDrawLayer(m_xDocShell.get()); + + ScFieldEditEngine& pEE = m_pDoc->GetEditEngine(); + pEE.SetTextCurrentDefaults("https://libreoffice.org/"); + m_pDoc->SetEditText(ScAddress(1, 0, 0), pEE.CreateTextObject()); // B1 + + m_pDoc->DoMergeContents(0, 0, 1, 0, 0); // A1:B1 + + CPPUNIT_ASSERT_EQUAL(CELLTYPE_EDIT, m_pDoc->GetCellType(ScAddress(0, 0, 0))); // A1 + const EditTextObject* pEditObj = m_pDoc->GetEditText(ScAddress(0, 0, 0)); // A1 + CPPUNIT_ASSERT(pEditObj); + CPPUNIT_ASSERT_EQUAL(OUString("https://libreoffice.org/"), pEditObj->GetText(0)); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/core/data/documen3.cxx b/sc/source/core/data/documen3.cxx index 73cf516c4d49..b52deed7d85b 100644 --- a/sc/source/core/data/documen3.cxx +++ b/sc/source/core/data/documen3.cxx @@ -2030,6 +2030,7 @@ void ScDocument::DoMergeContents( SCCOL nStartCol, SCROW nStartRow, OUString aCellStr; SCCOL nCol; SCROW nRow; + ScCellValue aCell; for (nRow=nStartRow; nRow<=nEndRow; nRow++) for (nCol=nStartCol; nCol<=nEndCol; nCol++) { @@ -2039,12 +2040,18 @@ void ScDocument::DoMergeContents( SCCOL nStartCol, SCROW nStartRow, if (!aTotal.isEmpty()) aTotal.append(' '); aTotal.append(aCellStr); + ScAddress aPos(nCol, nRow, nTab); + if ((GetCellType(aPos) == CELLTYPE_EDIT) && aCell.isEmpty()) + aCell = ScRefCellValue(*this, aPos); } if (nCol != nStartCol || nRow != nStartRow) SetString(nCol,nRow,nTab,""); } - SetString(nStartCol,nStartRow,nTab,aTotal.makeStringAndClear()); + if (aCell.isEmpty() || !GetString(nStartCol, nStartRow, nTab).isEmpty()) + SetString(nStartCol, nStartRow, nTab, aTotal.makeStringAndClear()); + else + aCell.release(*this, ScAddress(nStartCol, nStartRow, nTab)); } void ScDocument::DoEmptyBlock( SCCOL nStartCol, SCROW nStartRow, -- cgit