diff options
author | Jan Horak <jhorak@redhat.com> | 2014-12-03 14:25:01 +0100 |
---|---|---|
committer | Jan Horak <jhorak@redhat.com> | 2014-12-03 14:25:01 +0100 |
commit | 0b0d425874f4834e68b2415fb9e36258977941ac (patch) | |
tree | 884c3ed5bba3c8c4ec0962c0471603706b4de66a /mozilla-1097550-dict-fix.patch | |
parent | Fixed libnotify patch (diff) | |
download | librewolf-fedora-ff-0b0d425874f4834e68b2415fb9e36258977941ac.tar.gz librewolf-fedora-ff-0b0d425874f4834e68b2415fb9e36258977941ac.tar.bz2 librewolf-fedora-ff-0b0d425874f4834e68b2415fb9e36258977941ac.zip |
Added fix for default dictionary
Diffstat (limited to 'mozilla-1097550-dict-fix.patch')
-rw-r--r-- | mozilla-1097550-dict-fix.patch | 127 |
1 files changed, 127 insertions, 0 deletions
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 <jhorak@redhat.com> +# 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<nsIDocument> doc = do_QueryInterface(domDoc); + NS_ENSURE_TRUE(doc, nullptr); + + nsCOMPtr<nsILoadContext> 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; + } + } + } + } + } + |