summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJiang Jiang <jiang.jiang@nokia.com>2012-05-30 16:27:09 +0200
committerQt by Nokia <qt-info@nokia.com>2012-05-31 09:13:01 +0200
commit47462ffd68023efd5497d50e02c56ed571b838c5 (patch)
tree76005c7365d126efc711047cbc51a49b14337d4d
parent94492d88a7f483e08af328cfe1e7f3695a8661a4 (diff)
Make fontconfig default font locale aware
Application default font should be locale aware in fontconfig db as in other font databases. We use a hack to obtain the system default language parsed by fontconfig and use that to find out the preferred font for a given language (such font list is edited by fontconfig from fonts.conf in FcConfigSubstitute() process). Change-Id: I99bb8dd29d2dde2c8019ed8e77f5bfc09ddf3ca5 Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>
-rw-r--r--src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp25
1 files changed, 24 insertions, 1 deletions
diff --git a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp
index 86a01d8f3b..f980a40de4 100644
--- a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp
+++ b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp
@@ -751,7 +751,30 @@ QString QFontconfigDatabase::resolveFontFamilyAlias(const QString &family) const
QFont QFontconfigDatabase::defaultFont() const
{
- return QFont(resolveFontFamilyAlias(QString()));
+ // Hack to get system default language until FcGetDefaultLangs()
+ // is exported (https://bugs.freedesktop.org/show_bug.cgi?id=32853)
+ // or https://bugs.freedesktop.org/show_bug.cgi?id=35482 is fixed
+ FcPattern *dummy = FcPatternCreate();
+ FcDefaultSubstitute(dummy);
+ FcChar8 *lang = 0;
+ FcResult res = FcPatternGetString(dummy, FC_LANG, 0, &lang);
+
+ FcPattern *pattern = FcPatternCreate();
+ if (res == FcResultMatch) {
+ // Make defaultFont pattern matching locale language aware, because
+ // certain FC_LANG based custom rules may happen in FcConfigSubstitute()
+ FcPatternAddString(pattern, FC_LANG, lang);
+ }
+ FcConfigSubstitute(0, pattern, FcMatchPattern);
+ FcDefaultSubstitute(pattern);
+
+ FcChar8 *familyAfterSubstitution = 0;
+ FcPatternGetString(pattern, FC_FAMILY, 0, &familyAfterSubstitution);
+ QString resolved = QString::fromUtf8((const char *) familyAfterSubstitution);
+ FcPatternDestroy(pattern);
+ FcPatternDestroy(dummy);
+
+ return QFont(resolved);
}
QT_END_NAMESPACE