diff options
| author | Karoly Lorentey | 2006-12-03 12:25:18 +0000 |
|---|---|---|
| committer | Karoly Lorentey | 2006-12-03 12:25:18 +0000 |
| commit | d6e01aa592f7326dffeafa6e97180a1cc39fe7ea (patch) | |
| tree | 5a22b785cfee1d77d6452607450a12ca82eeecd3 /src/xfns.c | |
| parent | 14bcc1e098410087a837313e2fc822319ff2e8ca (diff) | |
| parent | 4975e69596a64247e8995d1ff9084b98a9a5ed0d (diff) | |
| download | emacs-d6e01aa592f7326dffeafa6e97180a1cc39fe7ea.tar.gz emacs-d6e01aa592f7326dffeafa6e97180a1cc39fe7ea.zip | |
Merged from emacs@sv.gnu.org.
Patches applied:
* emacs@sv.gnu.org/emacs--devo--0--patch-479
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-480
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-481
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-482
Merge from gnus--rel--5.10
* emacs@sv.gnu.org/emacs--devo--0--patch-483
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-484
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-485
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-153
Merge from emacs--devo--0
* emacs@sv.gnu.org/gnus--rel--5.10--patch-154
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-155
Update from CVS
git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-585
Diffstat (limited to 'src/xfns.c')
| -rw-r--r-- | src/xfns.c | 50 |
1 files changed, 43 insertions, 7 deletions
diff --git a/src/xfns.c b/src/xfns.c index 066996628e2..1cd8265d20f 100644 --- a/src/xfns.c +++ b/src/xfns.c | |||
| @@ -2029,13 +2029,14 @@ xic_create_fontsetname (base_fontname, motif) | |||
| 2029 | else | 2029 | else |
| 2030 | { | 2030 | { |
| 2031 | int len; | 2031 | int len; |
| 2032 | char *p1 = NULL, *p2 = NULL; | 2032 | char *p1 = NULL, *p2 = NULL, *p3 = NULL; |
| 2033 | char *font_allcs = NULL; | 2033 | char *font_allcs = NULL; |
| 2034 | char *font_allfamilies = NULL; | 2034 | char *font_allfamilies = NULL; |
| 2035 | char *font_all = NULL; | 2035 | char *font_all = NULL; |
| 2036 | char *allcs = "*-*-*-*-*-*-*"; | 2036 | char *allcs = "*-*-*-*-*-*-*"; |
| 2037 | char *allfamilies = "-*-*-"; | 2037 | char *allfamilies = "-*-*-"; |
| 2038 | char *all = "*-*-*-*-"; | 2038 | char *all = "*-*-*-*-"; |
| 2039 | char *base; | ||
| 2039 | 2040 | ||
| 2040 | for (i = 0, p = base_fontname; i < 8; p++) | 2041 | for (i = 0, p = base_fontname; i < 8; p++) |
| 2041 | { | 2042 | { |
| @@ -2046,8 +2047,27 @@ xic_create_fontsetname (base_fontname, motif) | |||
| 2046 | p1 = p + 1; | 2047 | p1 = p + 1; |
| 2047 | else if (i == 7) | 2048 | else if (i == 7) |
| 2048 | p2 = p + 1; | 2049 | p2 = p + 1; |
| 2050 | else if (i == 6) | ||
| 2051 | p3 = p + 1; | ||
| 2049 | } | 2052 | } |
| 2050 | } | 2053 | } |
| 2054 | /* If base_fontname specifies ADSTYLE, make it a | ||
| 2055 | wildcard. */ | ||
| 2056 | if (*p3 != '*') | ||
| 2057 | { | ||
| 2058 | int diff = (p2 - p3) - 2; | ||
| 2059 | |||
| 2060 | base = alloca (strlen (base_fontname) + 1); | ||
| 2061 | bcopy (base_fontname, base, p3 - base_fontname); | ||
| 2062 | base[p3 - base_fontname] = '*'; | ||
| 2063 | base[(p3 - base_fontname) + 1] = '-'; | ||
| 2064 | strcpy (base + (p3 - base_fontname) + 2, p2); | ||
| 2065 | p = base + (p - base_fontname) - diff; | ||
| 2066 | p1 = base + (p1 - base_fontname); | ||
| 2067 | p2 = base + (p2 - base_fontname) - diff; | ||
| 2068 | base_fontname = base; | ||
| 2069 | } | ||
| 2070 | |||
| 2051 | /* Build the font spec that matches all charsets. */ | 2071 | /* Build the font spec that matches all charsets. */ |
| 2052 | len = p - base_fontname + strlen (allcs) + 1; | 2072 | len = p - base_fontname + strlen (allcs) + 1; |
| 2053 | font_allcs = (char *) alloca (len); | 2073 | font_allcs = (char *) alloca (len); |
| @@ -2055,7 +2075,8 @@ xic_create_fontsetname (base_fontname, motif) | |||
| 2055 | bcopy (base_fontname, font_allcs, p - base_fontname); | 2075 | bcopy (base_fontname, font_allcs, p - base_fontname); |
| 2056 | strcat (font_allcs, allcs); | 2076 | strcat (font_allcs, allcs); |
| 2057 | 2077 | ||
| 2058 | /* Build the font spec that matches all families. */ | 2078 | /* Build the font spec that matches all families and |
| 2079 | add-styles. */ | ||
| 2059 | len = p - p1 + strlen (allcs) + strlen (allfamilies) + 1; | 2080 | len = p - p1 + strlen (allcs) + strlen (allfamilies) + 1; |
| 2060 | font_allfamilies = (char *) alloca (len); | 2081 | font_allfamilies = (char *) alloca (len); |
| 2061 | bzero (font_allfamilies, len); | 2082 | bzero (font_allfamilies, len); |
| @@ -2122,13 +2143,28 @@ xic_create_xfontset (f, base_fontname) | |||
| 2122 | if (!xfs) | 2143 | if (!xfs) |
| 2123 | { | 2144 | { |
| 2124 | char *fontsetname = xic_create_fontsetname (base_fontname, False); | 2145 | char *fontsetname = xic_create_fontsetname (base_fontname, False); |
| 2146 | char *p0 = fontsetname, *p1; | ||
| 2125 | 2147 | ||
| 2126 | /* New fontset. */ | 2148 | /* New fontset. */ |
| 2127 | xfs = XCreateFontSet (FRAME_X_DISPLAY (f), | 2149 | /* FONTSETNAME contains a list of font names (specific fonts |
| 2128 | fontsetname, &missing_list, | 2150 | first, general fonts last), but giving that to XCreateFontSet |
| 2129 | &missing_count, &def_string); | 2151 | at once occasionally fails (bug of X?). So, we try to call |
| 2130 | if (missing_list) | 2152 | XCreateFontSet for each fontname. */ |
| 2131 | XFreeStringList (missing_list); | 2153 | |
| 2154 | while (p0) | ||
| 2155 | { | ||
| 2156 | p1 = strchr (p0, ','); | ||
| 2157 | if (p1) | ||
| 2158 | *p1 = '\0'; | ||
| 2159 | xfs = XCreateFontSet (FRAME_X_DISPLAY (f), | ||
| 2160 | p0, &missing_list, | ||
| 2161 | &missing_count, &def_string); | ||
| 2162 | if (missing_list) | ||
| 2163 | XFreeStringList (missing_list); | ||
| 2164 | if (xfs) | ||
| 2165 | break; | ||
| 2166 | p0 = p1 ? p1 + 1 : NULL; | ||
| 2167 | } | ||
| 2132 | xfree (fontsetname); | 2168 | xfree (fontsetname); |
| 2133 | } | 2169 | } |
| 2134 | 2170 | ||