summaryrefslogtreecommitdiff
path: root/editeng
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2018-02-16 18:08:46 +0100
committerMiklos Vajna <vmiklos@collabora.co.uk>2018-02-16 23:44:27 +0100
commitf0c25c751cf8e166a84b289746bce6202a40391d (patch)
tree4a39e7c4ef54ca4ca1b1c121f94c681533d467e0 /editeng
parent028d4f9025c0d285bc5acdd0250b9e8120156925 (diff)
tdf#115783 sd: fix lost char attributes during in-table copy&paste
The SvxFontHeightItem (12pt) is originally a character-level property on the table cell (covering the whole cell text) but when the user sets the font height of the cell, sdr::properties::CellProperties::ItemSetChanged() will turn that into a paragraph-level property. This is fine, except that this way the property has unclear semantics when the user pastes single-paragraph content into an existing paragraph. (Keep the old paragraph properties? Use the new ones?) The current behavior is that sd::View::OnEndPasteOrDrop() calls into ContentAttribs::SetStyleSheet() at the end of the paste, which removes paragraph-level formatting (giving visibility to the from-style 18pt font height this way for the existing content), so both the old and the new paragraph formatting is lost. Improve the situation by copying these paragraph-level character properties back to character-level before paste at the paste position (so doc model is back to the state after load), that way font height and similar properties are not removed by the on-end-paste handler. Change-Id: I43d321dedcda6c0df9b009b9d99c3544f783473c Reviewed-on: https://gerrit.libreoffice.org/49868 Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk> Tested-by: Jenkins <ci@libreoffice.org>
Diffstat (limited to 'editeng')
-rw-r--r--editeng/source/editeng/editeng.cxx7
-rw-r--r--editeng/source/outliner/outliner.cxx5
2 files changed, 12 insertions, 0 deletions
diff --git a/editeng/source/editeng/editeng.cxx b/editeng/source/editeng/editeng.cxx
index d434114b9119..dcadbdc03db9 100644
--- a/editeng/source/editeng/editeng.cxx
+++ b/editeng/source/editeng/editeng.cxx
@@ -1738,6 +1738,13 @@ const SfxPoolItem& EditEngine::GetParaAttrib( sal_Int32 nPara, sal_uInt16 nWhich
return pImpEditEngine->GetParaAttrib( nPara, nWhich );
}
+void EditEngine::SetCharAttribs(sal_Int32 nPara, const SfxItemSet& rSet)
+{
+ EditSelection aSel(pImpEditEngine->ConvertSelection(nPara, 0, nPara, GetTextLen(nPara)));
+ pImpEditEngine->SetAttribs(aSel, rSet);
+ pImpEditEngine->FormatAndUpdate();
+}
+
void EditEngine::GetCharAttribs( sal_Int32 nPara, std::vector<EECharAttrib>& rLst ) const
{
pImpEditEngine->GetCharAttribs( nPara, rLst );
diff --git a/editeng/source/outliner/outliner.cxx b/editeng/source/outliner/outliner.cxx
index 5c310ceab03a..869ecb72a2e2 100644
--- a/editeng/source/outliner/outliner.cxx
+++ b/editeng/source/outliner/outliner.cxx
@@ -746,6 +746,11 @@ void Outliner::SetParaAttribs( sal_Int32 nPara, const SfxItemSet& rSet )
pEditEngine->SetParaAttribs( nPara, rSet );
}
+void Outliner::SetCharAttribs(sal_Int32 nPara, const SfxItemSet& rSet)
+{
+ pEditEngine->SetCharAttribs(nPara, rSet);
+}
+
bool Outliner::Expand( Paragraph const * pPara )
{
if ( pParaList->HasHiddenChildren( pPara ) )