[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