summaryrefslogtreecommitdiffstats
path: root/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp')
-rw-r--r--src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp
index 329268395e..288f6ca0e3 100644
--- a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp
+++ b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp
@@ -350,6 +350,26 @@ static const char *getFcFamilyForStyleHint(const QFont::StyleHint style)
return stylehint;
}
+static bool isSymbolFont(FontFile *fontFile)
+{
+ if (fontFile == 0 || fontFile->fileName.isEmpty())
+ return false;
+
+ QFontEngine::FaceId id;
+ id.filename = fontFile->fileName.toLocal8Bit();
+ id.index = fontFile->indexValue;
+
+ QFreetypeFace *f = QFreetypeFace::getFace(id);
+ if (f == 0) {
+ qWarning("isSymbolFont: Couldn't open face %s/%d", id.filename.data(), id.index);
+ return false;
+ }
+
+ bool hasSymbolMap = f->symbol_map;
+ f->release(id);
+ return hasSymbolMap;
+}
+
void QFontconfigDatabase::populateFontDatabase()
{
FcFontSet *fonts;
@@ -469,6 +489,9 @@ void QFontconfigDatabase::populateFontDatabase()
fontFile->fileName = QLatin1String((const char *)file_value);
fontFile->indexValue = indexValue;
+ if (isSymbolFont(fontFile))
+ writingSystems.setSupported(QFontDatabase::Other);
+
QFont::Style style = (slant_value == FC_SLANT_ITALIC)
? QFont::StyleItalic
: ((slant_value == FC_SLANT_OBLIQUE)