From 0b0d425874f4834e68b2415fb9e36258977941ac Mon Sep 17 00:00:00 2001 From: Jan Horak Date: Wed, 3 Dec 2014 14:25:01 +0100 Subject: [PATCH] Added fix for default dictionary --- firefox.spec | 5 ++ mozilla-1097550-dict-fix.patch | 127 +++++++++++++++++++++++++++++++++ 2 files changed, 132 insertions(+) create mode 100644 mozilla-1097550-dict-fix.patch diff --git a/firefox.spec b/firefox.spec index 5ecc152..192f2aa 100644 --- a/firefox.spec +++ b/firefox.spec @@ -148,6 +148,7 @@ Patch217: firefox-baseline-disable.patch # Upstream patches Patch300: mozilla-858919.patch +Patch301: mozilla-1097550-dict-fix.patch # Gtk3 upstream patches Patch402: mozilla-gtk3-tab-size.patch @@ -295,6 +296,7 @@ cd %{tarballdir} # Upstream patches %patch300 -p1 -b .858919 +%patch301 -p1 -b .1097550-dict-fix %if %{toolkit_gtk3} %patch402 -p1 -b .gtk3-tab-size @@ -761,6 +763,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : #--------------------------------------------------------------------- %changelog +* Wed Dec 3 2014 Jan Horak - 34.0-2 +- Fix for mozbz#1097550 - wrong default dictionary + * Mon Dec 1 2014 Martin Stransky - 34.0-1 - Update to 34.0 build 2 diff --git a/mozilla-1097550-dict-fix.patch b/mozilla-1097550-dict-fix.patch new file mode 100644 index 0000000..fa77477 --- /dev/null +++ b/mozilla-1097550-dict-fix.patch @@ -0,0 +1,127 @@ +# HG changeset patch +# Parent 2c9781c3e9b5004d6070f62f3b14b517fc692150 +# User Jan Horak +# Bug 1097550 - convert underscore in dictionary name to dash before calling nsStyleUtil::DashMatchCompare + +diff --git a/editor/composer/nsEditorSpellCheck.cpp b/editor/composer/nsEditorSpellCheck.cpp +--- a/editor/composer/nsEditorSpellCheck.cpp ++++ b/editor/composer/nsEditorSpellCheck.cpp +@@ -101,16 +101,33 @@ GetLoadContext(nsIEditor* aEditor) + nsCOMPtr doc = do_QueryInterface(domDoc); + NS_ENSURE_TRUE(doc, nullptr); + + nsCOMPtr loadContext = doc->GetLoadContext(); + return loadContext.forget(); + } + + /** ++ * Helper function for converting underscore to dash in dictionary name, ++ * ie. en_CA to en-CA. This is required for some Linux distributions which ++ * use underscore as separator in system-wide installed dictionaries. ++ * We use it for nsStyleUtil::DashMatchCompare. ++ */ ++static nsString ++GetDictNameWithDash(const nsAString& aDictName) ++{ ++ nsString dictNameWithDash(aDictName); ++ int32_t underScore = dictNameWithDash.FindChar('_'); ++ if (underScore != -1) { ++ dictNameWithDash.Replace(underScore, 1, '-'); ++ } ++ return dictNameWithDash; ++} ++ ++/** + * Fetches the dictionary stored in content prefs and maintains state during the + * fetch, which is asynchronous. + */ + class DictionaryFetcher MOZ_FINAL : public nsIContentPrefCallback2 + { + public: + NS_DECL_ISUPPORTS + +@@ -598,18 +615,18 @@ nsEditorSpellCheck::SetCurrentDictionary + nsDefaultStringComparator comparator; + nsAutoString langCode; + int32_t dashIdx = aDictionary.FindChar('-'); + if (dashIdx != -1) { + langCode.Assign(Substring(aDictionary, 0, dashIdx)); + } else { + langCode.Assign(aDictionary); + } +- +- if (mPreferredLang.IsEmpty() || !nsStyleUtil::DashMatchCompare(mPreferredLang, langCode, comparator)) { ++ if (mPreferredLang.IsEmpty() || ++ !nsStyleUtil::DashMatchCompare(GetDictNameWithDash(mPreferredLang), langCode, comparator)) { + // When user sets dictionary manually, we store this value associated + // with editor url. + StoreCurrentDictionary(mEditor, aDictionary); + } else { + // If user sets a dictionary matching (even partially), lang defined by + // document, we consider content pref has been canceled, and we clear it. + ClearCurrentDictionary(mEditor); + } +@@ -745,22 +762,16 @@ nsEditorSpellCheck::DictionaryFetched(Di + + // Then, try to use language computed from element + if (!mPreferredLang.IsEmpty()) { + dictName.Assign(mPreferredLang); + } + + // otherwise, get language from preferences + nsAutoString preferedDict(Preferences::GetLocalizedString("spellchecker.dictionary")); +- // Replace '_' with '-' in case the user has an underscore stored in their +- // pref, see bug 992118 for how this could have happened. +- int32_t underScore = preferedDict.FindChar('_'); +- if (underScore != -1) { +- preferedDict.Replace(underScore, 1, '-'); +- } + if (dictName.IsEmpty()) { + dictName.Assign(preferedDict); + } + + nsresult rv = NS_OK; + if (dictName.IsEmpty()) { + // Prefs didn't give us a dictionary name, so just get the current + // locale and use that as the default dictionary name! +@@ -789,18 +800,18 @@ nsEditorSpellCheck::DictionaryFetched(Di + } else { + langCode.Assign(dictName); + } + + nsDefaultStringComparator comparator; + + // try dictionary.spellchecker preference if it starts with langCode (and + // if we haven't tried it already) +- if (!preferedDict.IsEmpty() && !dictName.Equals(preferedDict) && +- nsStyleUtil::DashMatchCompare(preferedDict, langCode, comparator)) { ++ if (!preferedDict.IsEmpty() && !dictName.Equals(preferedDict) && ++ nsStyleUtil::DashMatchCompare(GetDictNameWithDash(preferedDict), langCode, comparator)) { + rv = SetCurrentDictionary(preferedDict); + } + + // Otherwise, try langCode (if we haven't tried it already) + if (NS_FAILED(rv)) { + if (!dictName.Equals(langCode) && !preferedDict.Equals(langCode)) { + rv = SetCurrentDictionary(langCode); + } +@@ -818,18 +829,17 @@ nsEditorSpellCheck::DictionaryFetched(Di + nsAutoString dictStr(dictList.ElementAt(i)); + + if (dictStr.Equals(dictName) || + dictStr.Equals(preferedDict) || + dictStr.Equals(langCode)) { + // We have already tried it + continue; + } +- +- if (nsStyleUtil::DashMatchCompare(dictStr, langCode, comparator) && ++ if (nsStyleUtil::DashMatchCompare(GetDictNameWithDash(dictStr), langCode, comparator) && + NS_SUCCEEDED(SetCurrentDictionary(dictStr))) { + break; + } + } + } + } + } +