diff options
author | Jiang Jiang <jiang.jiang@nokia.com> | 2012-05-30 16:27:09 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-05-31 09:13:01 +0200 |
commit | 47462ffd68023efd5497d50e02c56ed571b838c5 (patch) | |
tree | 76005c7365d126efc711047cbc51a49b14337d4d /src/platformsupport/fontdatabases | |
parent | 94492d88a7f483e08af328cfe1e7f3695a8661a4 (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>
Diffstat (limited to 'src/platformsupport/fontdatabases')
-rw-r--r-- | src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp | 25 |
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 |