--- rxvt-unicode/src/rxvtfont.C 2010/10/22 18:03:10 1.166 +++ rxvt-unicode/src/rxvtfont.C 2010/12/30 17:28:29 1.171 @@ -28,6 +28,10 @@ #include +#if XFT +# include +#endif + #define MAX_OVERLAP_ROMAN (8 + 2) // max. character width in 8ths of the base width #define MAX_OVERLAP_ITALIC (8 + 3) // max. overlap for italic fonts @@ -37,7 +41,7 @@ : ((prop)->width * (wcw) * MAX_OVERLAP_ROMAN + 7) >> 3 \ )) -const struct rxvt_fallback_font { +static const struct rxvt_fallback_font { codeset cs; const char *name; } fallback_fonts[] = { @@ -157,8 +161,6 @@ 0x304c, 0x672c, // が本 }; -#define NUM_EXTENT_TEST_CHARS (sizeof (extent_test_chars) / sizeof (extent_test_chars[0])) - #define dTermDisplay Display *disp = term->dpy #define dTermGC GC gc = term->gc @@ -790,12 +792,14 @@ diff += 300; // more heavily penalize what looks like scaled bitmap fonts } - if (!set_properties (p, fname)) - continue; - - if (prop.height != rxvt_fontprop::unset - && p.height > prop.height) // weed out too large fonts - continue; + if (!set_properties (p, fname) + // also weed out too large fonts + || (prop.height != rxvt_fontprop::unset + && p.height > prop.height)) + { + free (fname); + continue; + } if (prop.height != rxvt_fontprop::unset) diff += (prop.height - p.height) * 128; if (prop.weight != rxvt_fontprop::unset) diff += abs (prop.weight - p.weight); @@ -862,7 +866,8 @@ if (cs == CS_UNKNOWN) { - const char *charset = get_property (f, XA_FONT, 0); + char *value = get_property (f, XA_FONT, 0); + const char *charset = value; if (!charset) charset = name; @@ -875,6 +880,8 @@ cs = codeset_from_name (charset); if (cs == CS_UNKNOWN) rxvt_warn ("%s: cannot deduce encoding from font name property \"%s\", ignoring font.\n", name, charset); + + free (value); } if (cs == CS_UNKNOWN) @@ -916,7 +923,7 @@ width = 1; - for (uint16_t *t = extent_test_chars + NUM_EXTENT_TEST_CHARS; t-- > extent_test_chars; ) + for (uint16_t *t = extent_test_chars + ARRAY_LENGTH(extent_test_chars); t-- > extent_test_chars; ) { if (FROM_UNICODE (cs, *t) == NOCHAR) continue; @@ -1234,7 +1241,7 @@ int glheight = height; - for (uint16_t *t = extent_test_chars + NUM_EXTENT_TEST_CHARS; t-- > extent_test_chars; ) + for (uint16_t *t = extent_test_chars + ARRAY_LENGTH(extent_test_chars); t-- > extent_test_chars; ) { FcChar16 ch = *t;