Mozilla with Xft crashes a lot: FIX
Alexander N. Kabaev
ak03 at gte.com
Mon Mar 31 10:04:24 PST 2003
Hello everyone,
I had to patch mozilla in order to stop it from crashing every
now and then trying to open various web sites. Apparently fontconfig
is returning raster fonts for 'times' on my box sometimes and
passing them to Xft is not a very good idea. Attached patch
ignores non-Xft fonts and makes Mozilla much happier here :)
--
Alexander Kabaev
--- gfx/src/gtk/nsFontMetricsXft.cpp.orig Mon Mar 31 12:30:39 2003
+++ gfx/src/gtk/nsFontMetricsXft.cpp Mon Mar 31 12:30:58 2003
@@ -84,6 +84,7 @@
FcPattern *mPattern;
FcPattern *mFontName;
FcCharSet *mCharset;
+ int mNotXft;
};
struct MozXftLangGroup {
@@ -375,7 +376,7 @@
PRInt32 end = mLoadedFonts.Count();
for (PRInt32 j = 0; j < end; ++j) {
font = (nsFontXft *)mLoadedFonts.ElementAt(j);
- if (FcCharSetHasChar(font->mCharset, c)) {
+ if (FcCharSetHasChar(font->mCharset, c) && font->GetXftFont()) {
currFont = font;
goto FoundFont; // for speed -- avoid "if" statement
}
@@ -635,7 +636,7 @@
for (PRInt32 j = 0, end = mLoadedFonts.Count(); j < end; ++j) {
font = (nsFontXft *)mLoadedFonts.ElementAt(j);
- if (FcCharSetHasChar(font->mCharset, c)) {
+ if (FcCharSetHasChar(font->mCharset, c) && font->GetXftFont()) {
currFont = font;
goto FoundFont; // for speed -- avoid "if" statement
}
@@ -888,7 +889,7 @@
// font in our loaded list that supports the character
for (PRInt32 i = 0, end = mLoadedFonts.Count(); i < end; ++i) {
nsFontXft *font = (nsFontXft *)mLoadedFonts.ElementAt(i);
- if (FcCharSetHasChar(font->mCharset, aChar))
+ if (FcCharSetHasChar(font->mCharset, aChar) && font->GetXftFont() != NULL)
return font;
}
@@ -1051,7 +1052,7 @@
for (PRInt32 j = 0, end = mLoadedFonts.Count(); j < end; ++j) {
font = (nsFontXft *)mLoadedFonts.ElementAt(j);
- if (FcCharSetHasChar(font->mCharset, c)) {
+ if (FcCharSetHasChar(font->mCharset, c) && font->GetXftFont()) {
currFont = font;
goto FoundFont; // for speed -- avoid "if" statement
}
@@ -1461,6 +1462,7 @@
FcPatternReference(mFontName);
mXftFont = nsnull;
+ mNotXft = 0;
// set up our charset
mCharset = nsnull;
@@ -1487,14 +1489,16 @@
XftFont *
nsFontXft::GetXftFont(void)
{
- if (!mXftFont) {
+ if (!mXftFont && !mNotXft) {
FcPattern *pat = FcFontRenderPrepare(0, mPattern, mFontName);
if (!pat)
return nsnull;
mXftFont = XftFontOpenPattern(GDK_DISPLAY(), pat);
- if (!mXftFont)
+ if (!mXftFont) {
FcPatternDestroy(pat);
+ mNotXft = 1;
+ }
}
return mXftFont;
More information about the freebsd-gnome
mailing list