diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/xfns.c | 38 |
1 files changed, 24 insertions, 14 deletions
diff --git a/src/xfns.c b/src/xfns.c index 9e8732faba8..e5db1db2e83 100644 --- a/src/xfns.c +++ b/src/xfns.c | |||
| @@ -1961,14 +1961,24 @@ static XIMStyle supported_xim_styles[] = | |||
| 1961 | 1961 | ||
| 1962 | char xic_defaut_fontset[] = "-*-*-*-r-normal--14-*-*-*-*-*-*-*"; | 1962 | char xic_defaut_fontset[] = "-*-*-*-r-normal--14-*-*-*-*-*-*-*"; |
| 1963 | 1963 | ||
| 1964 | /* Create an Xt fontset spec from the name of a base font. | ||
| 1965 | If `motif' is True use the Motif syntax. */ | ||
| 1964 | char * | 1966 | char * |
| 1965 | xic_create_fontsetname (base_fontname) | 1967 | xic_create_fontsetname (base_fontname, motif) |
| 1966 | char *base_fontname; | 1968 | char *base_fontname; |
| 1969 | Bool motif; | ||
| 1967 | { | 1970 | { |
| 1971 | const char *sep = motif ? ";" : ","; | ||
| 1972 | char *fontsetname; | ||
| 1973 | |||
| 1968 | /* Make a fontset name from the base font name. */ | 1974 | /* Make a fontset name from the base font name. */ |
| 1969 | if (xic_defaut_fontset == base_fontname) | 1975 | if (xic_defaut_fontset == base_fontname) |
| 1970 | /* There is no base font name, use the default. */ | 1976 | { /* There is no base font name, use the default. */ |
| 1971 | return base_fontname; | 1977 | int len = strlen (base_fontname) + 2; |
| 1978 | fontsetname = xmalloc (len); | ||
| 1979 | bzero (fontsetname, len); | ||
| 1980 | strcpy (fontsetname, base_fontname); | ||
| 1981 | } | ||
| 1972 | else | 1982 | else |
| 1973 | { | 1983 | { |
| 1974 | /* Make a fontset name from the base font name. | 1984 | /* Make a fontset name from the base font name. |
| @@ -1977,20 +1987,19 @@ xic_create_fontsetname (base_fontname) | |||
| 1977 | - the base font where the charset spec is replaced by -*-*. | 1987 | - the base font where the charset spec is replaced by -*-*. |
| 1978 | - the same but with the family also replaced with -*-*-. */ | 1988 | - the same but with the family also replaced with -*-*-. */ |
| 1979 | char *p = base_fontname; | 1989 | char *p = base_fontname; |
| 1980 | char *fontsetname; | ||
| 1981 | int i; | 1990 | int i; |
| 1982 | 1991 | ||
| 1983 | for (i = 0; *p; p++) | 1992 | for (i = 0; *p; p++) |
| 1984 | if (*p == '-') i++; | 1993 | if (*p == '-') i++; |
| 1985 | if (i != 14) | 1994 | if (i != 14) |
| 1986 | { /* As the font name doesn't conform to XLFD, we can't | 1995 | { /* As the font name doesn't conform to XLFD, we can't |
| 1987 | modify it to generalize it to allcs and allfamilies. | 1996 | modify it to generalize it to allcs and allfamilies. |
| 1988 | Use the specified font plus the default. */ | 1997 | Use the specified font plus the default. */ |
| 1989 | int len = strlen (base_fontname) + strlen (xic_defaut_fontset) + 2; | 1998 | int len = strlen (base_fontname) + strlen (xic_defaut_fontset) + 3; |
| 1990 | fontsetname = xmalloc (len); | 1999 | fontsetname = xmalloc (len); |
| 1991 | bzero (fontsetname, len); | 2000 | bzero (fontsetname, len); |
| 1992 | strcpy (fontsetname, base_fontname); | 2001 | strcpy (fontsetname, base_fontname); |
| 1993 | strcat (fontsetname, ","); | 2002 | strcat (fontsetname, sep); |
| 1994 | strcat (fontsetname, xic_defaut_fontset); | 2003 | strcat (fontsetname, xic_defaut_fontset); |
| 1995 | } | 2004 | } |
| 1996 | else | 2005 | else |
| @@ -2028,17 +2037,19 @@ xic_create_fontsetname (base_fontname) | |||
| 2028 | 2037 | ||
| 2029 | /* Build the actual font set name. */ | 2038 | /* Build the actual font set name. */ |
| 2030 | len = strlen (base_fontname) + strlen (font_allcs) | 2039 | len = strlen (base_fontname) + strlen (font_allcs) |
| 2031 | + strlen (font_allfamilies) + 3; | 2040 | + strlen (font_allfamilies) + 4; |
| 2032 | fontsetname = xmalloc (len); | 2041 | fontsetname = xmalloc (len); |
| 2033 | bzero (fontsetname, len); | 2042 | bzero (fontsetname, len); |
| 2034 | strcpy (fontsetname, base_fontname); | 2043 | strcpy (fontsetname, base_fontname); |
| 2035 | strcat (fontsetname, ","); | 2044 | strcat (fontsetname, sep); |
| 2036 | strcat (fontsetname, font_allcs); | 2045 | strcat (fontsetname, font_allcs); |
| 2037 | strcat (fontsetname, ","); | 2046 | strcat (fontsetname, sep); |
| 2038 | strcat (fontsetname, font_allfamilies); | 2047 | strcat (fontsetname, font_allfamilies); |
| 2039 | } | 2048 | } |
| 2040 | return fontsetname; | ||
| 2041 | } | 2049 | } |
| 2050 | if (motif) | ||
| 2051 | strcat (fontsetname, ":"); | ||
| 2052 | return fontsetname; | ||
| 2042 | } | 2053 | } |
| 2043 | 2054 | ||
| 2044 | static XFontSet | 2055 | static XFontSet |
| @@ -2071,7 +2082,7 @@ xic_create_xfontset (f, base_fontname) | |||
| 2071 | 2082 | ||
| 2072 | if (!xfs) | 2083 | if (!xfs) |
| 2073 | { | 2084 | { |
| 2074 | char *fontsetname = xic_create_fontsetname (base_fontname); | 2085 | char *fontsetname = xic_create_fontsetname (base_fontname, False); |
| 2075 | 2086 | ||
| 2076 | /* New fontset. */ | 2087 | /* New fontset. */ |
| 2077 | xfs = XCreateFontSet (FRAME_X_DISPLAY (f), | 2088 | xfs = XCreateFontSet (FRAME_X_DISPLAY (f), |
| @@ -2079,8 +2090,7 @@ xic_create_xfontset (f, base_fontname) | |||
| 2079 | &missing_count, &def_string); | 2090 | &missing_count, &def_string); |
| 2080 | if (missing_list) | 2091 | if (missing_list) |
| 2081 | XFreeStringList (missing_list); | 2092 | XFreeStringList (missing_list); |
| 2082 | if (fontsetname != base_fontname) | 2093 | xfree (fontsetname); |
| 2083 | xfree (fontsetname); | ||
| 2084 | } | 2094 | } |
| 2085 | 2095 | ||
| 2086 | if (FRAME_XIC_BASE_FONTNAME (f)) | 2096 | if (FRAME_XIC_BASE_FONTNAME (f)) |