[Libreoffice-commits] core.git: Branch 'libreoffice-7-0' - editeng/source include/editeng
Mark Hung (via logerrit)
logerrit at kemper.freedesktop.org
Mon Oct 26 09:26:30 UTC 2020
editeng/source/editeng/editeng.cxx | 15 +++++++++++++--
editeng/source/editeng/editview.cxx | 7 ++++++-
editeng/source/editeng/impedit.hxx | 2 +-
editeng/source/editeng/impedit5.cxx | 6 +++---
editeng/source/editeng/textconv.cxx | 2 +-
include/editeng/editdata.hxx | 2 ++
include/editeng/editeng.hxx | 1 +
include/editeng/editview.hxx | 1 +
8 files changed, 28 insertions(+), 8 deletions(-)
New commits:
commit a419deb3279e9d3571ac55fa77c1b162f4eaabea
Author: Mark Hung <marklh9 at gmail.com>
AuthorDate: Mon Oct 19 00:07:34 2020 +0800
Commit: Xisco Fauli <xiscofauli at libreoffice.org>
CommitDate: Mon Oct 26 10:25:45 2020 +0100
tdf#104378: don't reset para attributes while
converting Chinese characters.
In TextConvWrapper::ChangeText_impl, calls to
EditView::RemoveAttribs() reset the paragraph attributes.
That makes SvxLanguageItem of EE_CHAR_LANGUAGE_CJK become
LANGUAGE_DONTKNOW. Hence it always stops converting after the
first success.
This patch overload EditView::RemoveAttribs() so that it is
possible to clear all character attributes of the selction
without touching paragraph attributes.
Before, bRemoveParaAttribs either removes items between
EE_ITEMS_START and EE_CHAR_END, or removes items between
EE_CHAR_START and EE_CHAR_END. The patch add a new enum
class EERemoveParaAttribsMode, with the following values:
1. RemoveAll : correspond to the old bRemoveParaAttribs = true
2. RemoveCharItems: correspond to the old bRemoveParaAttribs = false
3. RemoveNone: new thing for "don't touch para attributes."
Change-Id: I5132e708dea9e2066f13f1b001bd954d7b477f56
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/104484
Tested-by: Jenkins
Reviewed-by: Mark Hung <marklh9 at gmail.com>
(cherry picked from commit 5b74b3322fd51cf075eb0c218b3adb786a28b4c9)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/104680
Reviewed-by: Xisco Fauli <xiscofauli at libreoffice.org>
diff --git a/editeng/source/editeng/editeng.cxx b/editeng/source/editeng/editeng.cxx
index 73d85a07b7ce..9af0db1ccdc3 100644
--- a/editeng/source/editeng/editeng.cxx
+++ b/editeng/source/editeng/editeng.cxx
@@ -755,7 +755,15 @@ void EditEngine::RemoveCharAttribs(sal_Int32 nPara, sal_uInt16 nWhich, bool bRem
void EditEngine::RemoveCharAttribs(const EditSelection& rSel, bool bRemoveParaAttribs, sal_uInt16 nWhich)
{
- pImpEditEngine->RemoveCharAttribs(rSel, bRemoveParaAttribs, nWhich);
+ const EERemoveParaAttribsMode eMode = bRemoveParaAttribs?
+ EERemoveParaAttribsMode::RemoveAll :
+ EERemoveParaAttribsMode::RemoveCharItems;
+ pImpEditEngine->RemoveCharAttribs(rSel, eMode, nWhich);
+}
+
+void EditEngine::RemoveCharAttribs(const EditSelection& rSel, EERemoveParaAttribsMode eMode, sal_uInt16 nWhich)
+{
+ pImpEditEngine->RemoveCharAttribs(rSel, eMode, nWhich);
}
EditEngine::ViewsType& EditEngine::GetEditViews()
@@ -1773,10 +1781,13 @@ SfxItemSet EditEngine::GetAttribs( sal_Int32 nPara, sal_Int32 nStart, sal_Int32
void EditEngine::RemoveAttribs( const ESelection& rSelection, bool bRemoveParaAttribs, sal_uInt16 nWhich )
{
+ const EERemoveParaAttribsMode eMode = bRemoveParaAttribs?
+ EERemoveParaAttribsMode::RemoveAll :
+ EERemoveParaAttribsMode::RemoveCharItems;
pImpEditEngine->UndoActionStart( EDITUNDO_RESETATTRIBS );
EditSelection aSel( pImpEditEngine->ConvertSelection( rSelection.nStartPara, rSelection.nStartPos, rSelection.nEndPara, rSelection.nEndPos ) );
- pImpEditEngine->RemoveCharAttribs( aSel, bRemoveParaAttribs, nWhich );
+ pImpEditEngine->RemoveCharAttribs( aSel, eMode, nWhich );
pImpEditEngine->UndoActionEnd();
pImpEditEngine->FormatAndUpdate();
}
diff --git a/editeng/source/editeng/editview.cxx b/editeng/source/editeng/editview.cxx
index 7c6698f7c2c8..7bfd9e616d40 100644
--- a/editeng/source/editeng/editview.cxx
+++ b/editeng/source/editeng/editview.cxx
@@ -559,10 +559,15 @@ void EditView::RemoveAttribsKeepLanguages( bool bRemoveParaAttribs )
void EditView::RemoveAttribs( bool bRemoveParaAttribs, sal_uInt16 nWhich )
{
+ RemoveAttribs(bRemoveParaAttribs ? EERemoveParaAttribsMode::RemoveAll
+ : EERemoveParaAttribsMode::RemoveCharItems, nWhich);
+}
+void EditView::RemoveAttribs( EERemoveParaAttribsMode eMode, sal_uInt16 nWhich )
+{
pImpEditView->DrawSelectionXOR();
pImpEditView->pEditEngine->UndoActionStart( EDITUNDO_RESETATTRIBS );
- pImpEditView->pEditEngine->RemoveCharAttribs( pImpEditView->GetEditSelection(), bRemoveParaAttribs, nWhich );
+ pImpEditView->pEditEngine->RemoveCharAttribs( pImpEditView->GetEditSelection(), eMode, nWhich );
pImpEditView->pEditEngine->UndoActionEnd();
pImpEditView->pEditEngine->FormatAndUpdate( this );
}
diff --git a/editeng/source/editeng/impedit.hxx b/editeng/source/editeng/impedit.hxx
index 0ecf4c47eb36..86310e5339fe 100644
--- a/editeng/source/editeng/impedit.hxx
+++ b/editeng/source/editeng/impedit.hxx
@@ -847,7 +847,7 @@ public:
SfxItemSet GetAttribs( sal_Int32 nPara, sal_Int32 nStart, sal_Int32 nEnd, GetAttribsFlags nFlags = GetAttribsFlags::ALL ) const;
SfxItemSet GetAttribs( EditSelection aSel, EditEngineAttribs nOnlyHardAttrib = EditEngineAttribs::All );
void SetAttribs( EditSelection aSel, const SfxItemSet& rSet, SetAttribsMode nSpecial = SetAttribsMode::NONE );
- void RemoveCharAttribs( EditSelection aSel, bool bRemoveParaAttribs, sal_uInt16 nWhich );
+ void RemoveCharAttribs( EditSelection aSel, EERemoveParaAttribsMode eMode, sal_uInt16 nWhich );
void RemoveCharAttribs( sal_Int32 nPara, sal_uInt16 nWhich = 0, bool bRemoveFeatures = false );
void SetFlatMode( bool bFlat );
diff --git a/editeng/source/editeng/impedit5.cxx b/editeng/source/editeng/impedit5.cxx
index 0e5a294e0149..b99d8c4a5db0 100644
--- a/editeng/source/editeng/impedit5.cxx
+++ b/editeng/source/editeng/impedit5.cxx
@@ -578,13 +578,13 @@ void ImpEditEngine::SetAttribs( EditSelection aSel, const SfxItemSet& rSet, SetA
}
}
-void ImpEditEngine::RemoveCharAttribs( EditSelection aSel, bool bRemoveParaAttribs, sal_uInt16 nWhich )
+void ImpEditEngine::RemoveCharAttribs( EditSelection aSel, EERemoveParaAttribsMode eMode, sal_uInt16 nWhich )
{
aSel.Adjust( aEditDoc );
sal_Int32 nStartNode = aEditDoc.GetPos( aSel.Min().GetNode() );
sal_Int32 nEndNode = aEditDoc.GetPos( aSel.Max().GetNode() );
-
+ bool bRemoveParaAttribs = eMode == EERemoveParaAttribsMode::RemoveAll;
const SfxItemSet* _pEmptyItemSet = bRemoveParaAttribs ? &GetEmptyItemSet() : nullptr;
if ( IsUndoEnabled() && !IsInUndo() && aStatus.DoUndoAttribs() )
@@ -615,7 +615,7 @@ void ImpEditEngine::RemoveCharAttribs( EditSelection aSel, bool bRemoveParaAttri
{
SetParaAttribs( nNode, *_pEmptyItemSet ); // Invalidated
}
- else
+ else if (eMode == EERemoveParaAttribsMode::RemoveCharItems)
{
// For 'Format-Standard' also the character attributes should
// disappear, which were set as paragraph attributes by the
diff --git a/editeng/source/editeng/textconv.cxx b/editeng/source/editeng/textconv.cxx
index ed08c698f5e6..3caa1124ce2b 100644
--- a/editeng/source/editeng/textconv.cxx
+++ b/editeng/source/editeng/textconv.cxx
@@ -515,7 +515,7 @@ void TextConvWrapper::ChangeText_impl( const OUString &rNewText, bool bKeepAttri
// all attributes now. (Those attributes that may take effect left
// to the position where the new text gets inserted after the old text
// was deleted)
- m_pEditView->RemoveAttribs();
+ m_pEditView->RemoveAttribs(EERemoveParaAttribsMode::RemoveNone, 0);
// apply saved attributes to new inserted text
m_pEditView->SetAttribs( aSet );
}
diff --git a/include/editeng/editdata.hxx b/include/editeng/editdata.hxx
index 8d3d39591a42..40c74cb2b8c6 100644
--- a/include/editeng/editdata.hxx
+++ b/include/editeng/editdata.hxx
@@ -42,6 +42,8 @@ enum class EEAnchorMode {
VCenterLeft, VCenterHCenter, VCenterRight,
BottomLeft, BottomHCenter, BottomRight };
+enum class EERemoveParaAttribsMode { RemoveAll, RemoveCharItems, RemoveNone };
+
#define EE_PARA_NOT_FOUND SAL_MAX_INT32
#define EE_PARA_APPEND SAL_MAX_INT32
#define EE_PARA_ALL SAL_MAX_INT32
diff --git a/include/editeng/editeng.hxx b/include/editeng/editeng.hxx
index 292b620a9b95..46f5ccf520cc 100644
--- a/include/editeng/editeng.hxx
+++ b/include/editeng/editeng.hxx
@@ -609,6 +609,7 @@ public:
void RemoveCharAttribs(sal_Int32 nPara, sal_uInt16 nWhich = 0, bool bRemoveFeatures = false);
void RemoveCharAttribs(const EditSelection& rSel, bool bRemoveParaAttribs, sal_uInt16 nWhich);
+ void RemoveCharAttribs(const EditSelection& rSel, EERemoveParaAttribsMode eMode, sal_uInt16 nWhich);
ViewsType& GetEditViews();
const ViewsType& GetEditViews() const;
diff --git a/include/editeng/editview.hxx b/include/editeng/editview.hxx
index c750dcef9254..bf6374ca3ce8 100644
--- a/include/editeng/editview.hxx
+++ b/include/editeng/editview.hxx
@@ -234,6 +234,7 @@ public:
SfxItemSet GetAttribs();
void SetAttribs( const SfxItemSet& rSet );
void RemoveAttribs( bool bRemoveParaAttribs = false, sal_uInt16 nWhich = 0 );
+ void RemoveAttribs( EERemoveParaAttribsMode eMode, sal_uInt16 nWhich );
void RemoveCharAttribs( sal_Int32 nPara, sal_uInt16 nWhich );
void RemoveAttribsKeepLanguages( bool bRemoveParaAttribs );
More information about the Libreoffice-commits
mailing list