32de97d
--- src/kernel/qfontdatabase_x11.cpp
32de97d
+++ src/kernel/qfontdatabase_x11.cpp
32de97d
@@ -1589,15 +1589,6 @@ QFontEngine *loadEngine( QFont::Script s
32de97d
 	    if (script == QFont::Latin)
32de97d
 		// add Euro character
32de97d
 		FcCharSetAddChar(cs, 0x20ac);
32de97d
-	    if (script == QFont::Han_SimplifiedChinese)
32de97d
-		FcCharSetAddChar(cs, 0x3400);
32de97d
-	    if (script == QFont::Han_TraditionalChinese){
32de97d
-		FcCharSetAddChar(cs, 0x3435);
32de97d
-		FcCharSetAddChar(cs, 0xE000);
32de97d
-		FcCharSetAddChar(cs, 0xF6B1);
32de97d
-	    }
32de97d
-	    if (script == QFont::MiscellaneousSymbols)
32de97d
-		FcCharSetAddChar(cs, 0x2714);
32de97d
 	    FcPatternAddCharSet(pattern, FC_CHARSET, cs);
32de97d
 	    FcCharSetDestroy(cs);
32de97d
 	}
32de97d
@@ -1813,7 +1804,11 @@ static QFontEngine *loadFontConfigFont(c
32de97d
     FcPatternPrint(pattern);
32de97d
 #endif
32de97d
 
32de97d
+    // XftFontMatch calls the right ConfigSubstitute variants, but as we use
32de97d
+    // FcFontMatch/Sort here we have to do it manually.
32de97d
     FcConfigSubstitute(0, pattern, FcMatchPattern);
32de97d
+    XftDefaultSubstitute(QPaintDevice::x11AppDisplay(), QPaintDevice::x11AppScreen(), pattern);
32de97d
+
32de97d
 //     qDebug("1: pattern contains:");
32de97d
 //     FcPatternPrint(pattern);
32de97d
 
32de97d
@@ -1847,10 +1842,6 @@ static QFontEngine *loadFontConfigFont(c
32de97d
 	    value.u.s = (const FcChar8 *)cs.data();
32de97d
 	    FcPatternAddWeak(pattern, FC_FAMILY, value, FcTrue);
32de97d
 	}
32de97d
-#ifdef FONT_MATCH_DEBUG
32de97d
-	printf("final pattern contains:\n");
32de97d
-	FcPatternPrint(pattern);
32de97d
-#endif
32de97d
     }
32de97d
 
32de97d
     if (script != QFont::Unicode) {
32de97d
@@ -1860,19 +1851,15 @@ static QFontEngine *loadFontConfigFont(c
32de97d
         if (script == QFont::Latin)
32de97d
             // add Euro character
32de97d
             FcCharSetAddChar(cs, 0x20ac);
32de97d
-	if (script == QFont::Han_SimplifiedChinese)
32de97d
-	    FcCharSetAddChar(cs, 0x3400);
32de97d
-	if (script == QFont::Han_TraditionalChinese) {
32de97d
-	    FcCharSetAddChar(cs, 0x3435);
32de97d
-	    FcCharSetAddChar(cs, 0xE000);
32de97d
-	    FcCharSetAddChar(cs, 0xF6B1);
32de97d
-	}
32de97d
-	if (script == QFont::MiscellaneousSymbols)
32de97d
-	    FcCharSetAddChar(cs, 0x2714);
32de97d
         FcPatternAddCharSet(pattern, FC_CHARSET, cs);
32de97d
         FcCharSetDestroy(cs);
32de97d
     }
32de97d
 
32de97d
+#ifdef FONT_MATCH_DEBUG
32de97d
+	printf("final pattern contains:\n");
32de97d
+	FcPatternPrint(pattern);
32de97d
+#endif
32de97d
+
32de97d
     QFontEngine *fe = 0;
32de97d
 
32de97d
     for( int jj = (FcGetVersion() >= 20392 ? 0 : 1); jj < 2; ++jj ) {
32de97d
--- src/kernel/qfontdatabase.cpp
32de97d
+++ src/kernel/qfontdatabase.cpp
32de97d
@@ -554,7 +554,7 @@ static const unsigned short sample_chars
32de97d
     // GeometricSymbols,
32de97d
     { 0x2500, 0x0 },
32de97d
     // MiscellaneousSymbols,
32de97d
-    { 0x2640, 0x0 },
32de97d
+    { 0x2640, 0x2714, 0x0 },
32de97d
     // EnclosedAndSquare,
32de97d
     { 0x2460, 0x0 },
32de97d
     // Braille,