Blame SOURCES/0001-Related-rhbz-1020712-wrong-default-font-shown-in-edi.patch

2135ec
From e3bde35198d8a5420b7106c983766b88ccfba51a Mon Sep 17 00:00:00 2001
2135ec
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
2135ec
Date: Fri, 18 Oct 2013 15:36:28 +0100
2135ec
Subject: [PATCH] Related: rhbz#1020712 wrong default font shown in editengine
2135ec
2135ec
Only in editengine could we have this fiasco.
2135ec
2135ec
There are two ImpEditEngine::GetScriptType's
2135ec
2135ec
a) sal_uInt16 ImpEditEngine::GetScriptType(const EditPaM& rPaM, sal_uInt16* pEndPos) const
2135ec
this one returns i18n::ScriptType
2135ec
2135ec
b) sal_uInt16 ImpEditEngine::GetScriptType(const EditSelection& rSel) const
2135ec
this one returns SCRIPTTYPE
2135ec
2135ec
Could there be a better way to ensure that mistakes will be made.
2135ec
2135ec
Anyway, within variant b, with an empty edit engine
2135ec
ImpEditEngine::GetScriptType calls GetI18NScriptTypeOfLanguage but *that*
2135ec
returns i18n::ScriptType's not SCRIPTTYPEs but when there is content then a
2135ec
SCRIPTTYPE is truly returned.
2135ec
2135ec
Change-Id: I3a4a7c8746728e0fdfb25d961004c8339a24c93d
2135ec
(cherry picked from commit e63a0d5657c7b9c7431525ba669b3edab0e56af3)
2135ec
2135ec
Related: rhbz#1020712 more i18n::ScriptType being compared against SCRIPTTYPE
2135ec
2135ec
Change-Id: I5da9114a3fd8330df2b63dc9187323765d305791
2135ec
(cherry picked from commit b57ffef61afd61b57087150b1a9245e21079e15b)
2135ec
2135ec
Resolves: rhbz#1020712 return all the selected scripts
2135ec
2135ec
What we want here is *all* the scripts in the range, that's the whole point of
2135ec
using SCRIPTTYPE. We use this to determine the font to show in the fontbox. If
2135ec
it's an exclusive script then we can show the font that that script, and if
2135ec
there are multiple scripts we know to set it empty.
2135ec
2135ec
With the other intermediate bugs out of the way, this now appears to work
2135ec
correctly.
2135ec
2135ec
(cherry picked from commit f1a8aefec91f51a15c951f53f283a38a2edcd141)
2135ec
2135ec
Conflicts:
2135ec
	editeng/source/editeng/impedit2.cxx
2135ec
2135ec
Change-Id: I58426123602d70c151bd878e96fa5cbab7d3fd3e
2135ec
---
2135ec
 editeng/source/editeng/impedit2.cxx | 39 ++++++++++++++++++++-----------------
2135ec
 editeng/source/editeng/impedit4.cxx |  4 ++--
2135ec
 2 files changed, 23 insertions(+), 20 deletions(-)
2135ec
2135ec
diff --git a/editeng/source/editeng/impedit2.cxx b/editeng/source/editeng/impedit2.cxx
2135ec
index 4bc6d70..21d0d32 100644
2135ec
--- a/editeng/source/editeng/impedit2.cxx
2135ec
+++ b/editeng/source/editeng/impedit2.cxx
2135ec
@@ -1788,32 +1788,35 @@ sal_uInt16 ImpEditEngine::GetScriptType( const EditSelection& rSel ) const
2135ec
 
2135ec
         const ScriptTypePosInfos& rTypes = pParaPortion->aScriptInfos;
2135ec
 
2135ec
-        // find the first(!) script type position that holds the
2135ec
-        // complete selection. Thus it will work for selections as
2135ec
-        // well as with just moving the cursor from char to char.
2135ec
+        // find all the scripts of this range
2135ec
         sal_uInt16 nS = ( nPara == nStartPara ) ? aSel.Min().GetIndex() : 0;
2135ec
         sal_uInt16 nE = ( nPara == nEndPara ) ? aSel.Max().GetIndex() : pParaPortion->GetNode()->Len();
2135ec
-        for ( size_t n = 0; n < rTypes.size(); n++ )
2135ec
+
2135ec
+        //no selection, just bare cursor
2135ec
+        if (nStartPara == nEndPara && nS == nE)
2135ec
         {
2135ec
-            if (rTypes[n].nStartPos <= nS  &&  nE <= rTypes[n].nEndPos)
2135ec
-               {
2135ec
+            //If we are not at the start of the paragraph we want the properties of the
2135ec
+            //preceding character. Otherwise get the properties of the next (or what the
2135ec
+            //next would have if it existed)
2135ec
+            if (nS != 0)
2135ec
+                --nS;
2135ec
+            else
2135ec
+                ++nE;
2135ec
+        }
2135ec
+
2135ec
+        for (size_t n = 0; n < rTypes.size(); ++n)
2135ec
+        {
2135ec
+            bool bStartInRange = rTypes[n].nStartPos <= nS && nS < rTypes[n].nEndPos;
2135ec
+            bool bEndInRange = rTypes[n].nStartPos < nE && nE <= rTypes[n].nEndPos;
2135ec
+
2135ec
+            if (bStartInRange || bEndInRange)
2135ec
+            {
2135ec
                 if ( rTypes[n].nScriptType != i18n::ScriptType::WEAK )
2135ec
-                {
2135ec
                     nScriptType |= GetItemScriptType ( rTypes[n].nScriptType );
2135ec
-                }
2135ec
-                else
2135ec
-                {
2135ec
-                    if ( !nScriptType && n )
2135ec
-                    {
2135ec
-                        // #93548# When starting with WEAK, use prev ScriptType...
2135ec
-                        nScriptType = rTypes[n-1].nScriptType;
2135ec
-                    }
2135ec
-                }
2135ec
-                break;
2135ec
             }
2135ec
         }
2135ec
     }
2135ec
-    return nScriptType ? nScriptType : GetI18NScriptTypeOfLanguage( GetDefaultLanguage() );
2135ec
+    return nScriptType ? nScriptType : SvtLanguageOptions::GetScriptTypeOfLanguage( GetDefaultLanguage() );
2135ec
 }
2135ec
 
2135ec
 sal_Bool ImpEditEngine::IsScriptChange( const EditPaM& rPaM ) const
2135ec
diff --git a/editeng/source/editeng/impedit4.cxx b/editeng/source/editeng/impedit4.cxx
2135ec
index 39e8156..5e0fa09 100644
2135ec
--- a/editeng/source/editeng/impedit4.cxx
2135ec
+++ b/editeng/source/editeng/impedit4.cxx
2135ec
@@ -2124,7 +2124,7 @@ void ImpEditEngine::ApplyChangedSentence(EditView& rEditView,
2135ec
                     rEditView.pImpEditView->SetEditSelection( aCurrentOldPosition->Max() );
2135ec
                 }
2135ec
 
2135ec
-                sal_uInt16 nScriptType = GetI18NScriptTypeOfLanguage( aCurrentNewPortion->eLanguage );
2135ec
+                sal_uInt16 nScriptType = SvtLanguageOptions::GetScriptTypeOfLanguage( aCurrentNewPortion->eLanguage );
2135ec
                 sal_uInt16 nLangWhichId = EE_CHAR_LANGUAGE;
2135ec
                 switch(nScriptType)
2135ec
                 {
2135ec
@@ -2171,7 +2171,7 @@ void ImpEditEngine::ApplyChangedSentence(EditView& rEditView,
2135ec
                 LanguageType eCurLanguage = GetLanguage( aCurrentPaM );
2135ec
                 if(eCurLanguage != aCurrentNewPortion->eLanguage)
2135ec
                 {
2135ec
-                    sal_uInt16 nScriptType = GetI18NScriptTypeOfLanguage( aCurrentNewPortion->eLanguage );
2135ec
+                    sal_uInt16 nScriptType = SvtLanguageOptions::GetScriptTypeOfLanguage( aCurrentNewPortion->eLanguage );
2135ec
                     sal_uInt16 nLangWhichId = EE_CHAR_LANGUAGE;
2135ec
                     switch(nScriptType)
2135ec
                     {
2135ec
-- 
2135ec
1.8.3.1
2135ec