[Libreoffice-commits] core.git: Branch 'libreoffice-5-0' - sw/source
Mark Hung
marklh9 at gmail.com
Sat Sep 26 04:46:39 PDT 2015
sw/source/core/doc/extinput.cxx | 43 +++++++++++++++++++++++-----------------
1 file changed, 25 insertions(+), 18 deletions(-)
New commits:
commit 2b136504538a0b32e6ca9ae8fae8c41c084f4394
Author: Mark Hung <marklh9 at gmail.com>
Date: Tue Sep 8 07:29:38 2015 +0800
Fix tdf#87500 - Freeze with English/Japanese mixture undo.
Language poolitem will be inserted after user completes editing
with IME, making it refer to valid range when undo.
Change-Id: Id2876aa74dba6f7d134b8e2df4d9b36a8f429bb1
Reviewed-on: https://gerrit.libreoffice.org/18392
Reviewed-by: Caolán McNamara <caolanm at redhat.com>
Tested-by: Caolán McNamara <caolanm at redhat.com>
Reviewed-on: https://gerrit.libreoffice.org/18877
Tested-by: Jenkins <ci at libreoffice.org>
diff --git a/sw/source/core/doc/extinput.cxx b/sw/source/core/doc/extinput.cxx
index 362842a..9e82eca 100644
--- a/sw/source/core/doc/extinput.cxx
+++ b/sw/source/core/doc/extinput.cxx
@@ -59,6 +59,9 @@ SwExtTextInput::~SwExtTextInput()
sal_Int32 nEndCnt = GetMark()->nContent.GetIndex();
if( nEndCnt != nSttCnt )
{
+ // Prevent IME edited text being grouped with non-IME edited text.
+ bool bKeepGroupUndo = pDoc->GetIDocumentUndoRedo().DoesGroupUndo();
+ pDoc->GetIDocumentUndoRedo().DoGroupUndo(false);
if( nEndCnt < nSttCnt )
{
std::swap(nSttCnt, nEndCnt);
@@ -66,24 +69,6 @@ SwExtTextInput::~SwExtTextInput()
// In order to get Undo/Redlining etc. working correctly,
// we need to go through the Doc interface
- if(eInputLanguage != LANGUAGE_DONTKNOW)
- {
- // #i41974# Only set language attribute
- // for CJK/CTL scripts.
- bool bLang = true;
- sal_uInt16 nWhich = RES_CHRATR_LANGUAGE;
- switch(SvtLanguageOptions::GetI18NScriptTypeOfLanguage(eInputLanguage))
- {
- case i18n::ScriptType::ASIAN: nWhich = RES_CHRATR_CJK_LANGUAGE; break;
- case i18n::ScriptType::COMPLEX: nWhich = RES_CHRATR_CTL_LANGUAGE; break;
- default: bLang = false;
- }
- if ( bLang )
- {
- SvxLanguageItem aLangItem( eInputLanguage, nWhich );
- pDoc->getIDocumentContentOperations().InsertPoolItem(*this, aLangItem );
- }
- }
rIdx = nSttCnt;
const OUString sText( pTNd->GetText().copy(nSttCnt, nEndCnt - nSttCnt));
if( bIsOverwriteCursor && !sOverwriteText.isEmpty() )
@@ -124,6 +109,28 @@ SwExtTextInput::~SwExtTextInput()
pDoc->getIDocumentContentOperations().InsertString( *this, sText );
}
}
+ pDoc->GetIDocumentUndoRedo().DoGroupUndo(bKeepGroupUndo);
+ if (eInputLanguage != LANGUAGE_DONTKNOW)
+ {
+ sal_uInt16 nWhich = RES_CHRATR_LANGUAGE;
+ sal_Int16 nScriptType = SvtLanguageOptions::GetI18NScriptTypeOfLanguage(eInputLanguage);
+ switch(nScriptType)
+ {
+ case i18n::ScriptType::ASIAN:
+ nWhich = RES_CHRATR_CJK_LANGUAGE; break;
+ case i18n::ScriptType::COMPLEX:
+ nWhich = RES_CHRATR_CTL_LANGUAGE; break;
+ }
+ // #i41974# Only set language attribute for CJK/CTL scripts.
+ if (RES_CHRATR_LANGUAGE != nWhich && pTNd->GetLang( nSttCnt, nEndCnt-nSttCnt, nScriptType) != eInputLanguage)
+ {
+ SvxLanguageItem aLangItem( eInputLanguage, nWhich );
+ rIdx = nSttCnt;
+ GetMark()->nContent = nEndCnt;
+ pDoc->getIDocumentContentOperations().InsertPoolItem(*this, aLangItem );
+ }
+
+ }
}
}
}
More information about the Libreoffice-commits
mailing list