diff options
| -rw-r--r-- | st.c | 21 | 
1 files changed, 15 insertions, 6 deletions
@@ -363,6 +363,7 @@ static void xloadcols(void);  static int xsetcolorname(int, const char *);  static int xloadfont(Font *, FcPattern *);  static void xloadfonts(char *, int); +static int xloadfontset(Font *);  static void xsettitle(char *);  static void xresettitle(void);  static void xseturgency(int); @@ -2643,16 +2644,12 @@ xloadfont(Font *f, FcPattern *pattern) {  	if(!match)  		return 1; -	if(!(f->set = FcFontSort(0, match, FcTrue, 0, &result))) { -		FcPatternDestroy(match); -		return 1; -	} -  	if(!(f->match = XftFontOpenPattern(xw.dpy, match))) {  		FcPatternDestroy(match);  		return 1;  	} +	f->set = NULL;  	f->pattern = FcPatternDuplicate(pattern);  	f->ascent = f->match->ascent; @@ -2727,6 +2724,15 @@ xloadfonts(char *fontstr, int fontsize) {  	FcPatternDestroy(pattern);  } +int +xloadfontset(Font *f) { +	FcResult result; + +	if(!(f->set = FcFontSort(0, f->pattern, FcTrue, 0, &result))) +		return 1; +	return 0; +} +  void  xunloadfonts(void) {  	int i, ip; @@ -2987,7 +2993,6 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) {  	r.width = width;  	XftDrawSetClipRectangles(xw.draw, winx, winy, &r, 1); -	fcsets[0] = font->set;  	for(xp = winx; bytelen > 0;) {  		/*  		 * Search for the range in the to be printed string of glyphs @@ -3045,6 +3050,10 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) {  		/* Nothing was found. */  		if(i >= frclen) { +			if(!font->set) +				xloadfontset(font); +			fcsets[0] = font->set; +  			/*  			 * Nothing was found in the cache. Now use  			 * some dozen of Fontconfig calls to get the  | 
