Mercurial > emacs
comparison src/xfns.c @ 90127:30ad2795fdab
Revision: miles@gnu.org--gnu-2005/emacs--unicode--0--patch-28
Merge from emacs--cvs-trunk--0
Patches applied:
* emacs--cvs-trunk--0 (patch 180-191)
- Update from CVS
- Merge from gnus--rel--5.10
* gnus--rel--5.10 (patch 39-44)
- Merge from emacs--cvs-trunk--0
- Update from CVS
author | Miles Bader <miles@gnu.org> |
---|---|
date | Sat, 19 Mar 2005 02:42:17 +0000 |
parents | 8395880305fe 41e456f361cc |
children | 62afea0771d8 |
comparison
equal
deleted
inserted
replaced
90126:8ee106ee2dc8 | 90127:30ad2795fdab |
---|---|
1939 | 1939 |
1940 /* Create an X fontset on frame F with base font name BASE_FONTNAME. */ | 1940 /* Create an X fontset on frame F with base font name BASE_FONTNAME. */ |
1941 | 1941 |
1942 char xic_defaut_fontset[] = "-*-*-*-r-normal--14-*-*-*-*-*-*-*"; | 1942 char xic_defaut_fontset[] = "-*-*-*-r-normal--14-*-*-*-*-*-*-*"; |
1943 | 1943 |
1944 /* Create an Xt fontset spec from the name of a base font. | |
1945 If `motif' is True use the Motif syntax. */ | |
1944 char * | 1946 char * |
1945 xic_create_fontsetname (base_fontname) | 1947 xic_create_fontsetname (base_fontname, motif) |
1946 char *base_fontname; | 1948 char *base_fontname; |
1947 { | 1949 Bool motif; |
1950 { | |
1951 const char *sep = motif ? ";" : ","; | |
1952 char *fontsetname; | |
1953 | |
1948 /* Make a fontset name from the base font name. */ | 1954 /* Make a fontset name from the base font name. */ |
1949 if (xic_defaut_fontset == base_fontname) | 1955 if (xic_defaut_fontset == base_fontname) |
1950 /* There is no base font name, use the default. */ | 1956 { /* There is no base font name, use the default. */ |
1951 return base_fontname; | 1957 int len = strlen (base_fontname) + 2; |
1958 fontsetname = xmalloc (len); | |
1959 bzero (fontsetname, len); | |
1960 strcpy (fontsetname, base_fontname); | |
1961 } | |
1952 else | 1962 else |
1953 { | 1963 { |
1954 /* Make a fontset name from the base font name. | 1964 /* Make a fontset name from the base font name. |
1955 The font set will be made of the following elements: | 1965 The font set will be made of the following elements: |
1956 - the base font. | 1966 - the base font. |
1957 - the base font where the charset spec is replaced by -*-*. | 1967 - the base font where the charset spec is replaced by -*-*. |
1958 - the same but with the family also replaced with -*-*-. */ | 1968 - the same but with the family also replaced with -*-*-. */ |
1959 char *p = base_fontname; | 1969 char *p = base_fontname; |
1960 char *fontsetname; | |
1961 int i; | 1970 int i; |
1962 | 1971 |
1963 for (i = 0; *p; p++) | 1972 for (i = 0; *p; p++) |
1964 if (*p == '-') i++; | 1973 if (*p == '-') i++; |
1965 if (i != 14) | 1974 if (i != 14) |
1966 { /* As the font name doesn't conform to XLFD, we can't | 1975 { /* As the font name doesn't conform to XLFD, we can't |
1967 modify it to generalize it to allcs and allfamilies. | 1976 modify it to generalize it to allcs and allfamilies. |
1968 Use the specified font plus the default. */ | 1977 Use the specified font plus the default. */ |
1969 int len = strlen (base_fontname) + strlen (xic_defaut_fontset) + 2; | 1978 int len = strlen (base_fontname) + strlen (xic_defaut_fontset) + 3; |
1970 fontsetname = xmalloc (len); | 1979 fontsetname = xmalloc (len); |
1971 bzero (fontsetname, len); | 1980 bzero (fontsetname, len); |
1972 strcpy (fontsetname, base_fontname); | 1981 strcpy (fontsetname, base_fontname); |
1973 strcat (fontsetname, ","); | 1982 strcat (fontsetname, sep); |
1974 strcat (fontsetname, xic_defaut_fontset); | 1983 strcat (fontsetname, xic_defaut_fontset); |
1975 } | 1984 } |
1976 else | 1985 else |
1977 { | 1986 { |
1978 int len; | 1987 int len; |
1979 char *p1 = NULL; | 1988 char *p1 = NULL, *p2 = NULL; |
1980 char *font_allcs = NULL; | 1989 char *font_allcs = NULL; |
1981 char *font_allfamilies = NULL; | 1990 char *font_allfamilies = NULL; |
1991 char *font_all = NULL; | |
1982 char *allcs = "*-*-*-*-*-*-*"; | 1992 char *allcs = "*-*-*-*-*-*-*"; |
1983 char *allfamilies = "-*-*-"; | 1993 char *allfamilies = "-*-*-"; |
1994 char *all = "*-*-*-*-"; | |
1984 | 1995 |
1985 for (i = 0, p = base_fontname; i < 8; p++) | 1996 for (i = 0, p = base_fontname; i < 8; p++) |
1986 { | 1997 { |
1987 if (*p == '-') | 1998 if (*p == '-') |
1988 { | 1999 { |
1989 i++; | 2000 i++; |
1990 if (i == 3) | 2001 if (i == 3) |
1991 p1 = p + 1; | 2002 p1 = p + 1; |
2003 else if (i == 7) | |
2004 p2 = p + 1; | |
1992 } | 2005 } |
1993 } | 2006 } |
1994 /* Build the font spec that matches all charsets. */ | 2007 /* Build the font spec that matches all charsets. */ |
1995 len = p - base_fontname + strlen (allcs) + 1; | 2008 len = p - base_fontname + strlen (allcs) + 1; |
1996 font_allcs = (char *) alloca (len); | 2009 font_allcs = (char *) alloca (len); |
2001 /* Build the font spec that matches all families. */ | 2014 /* Build the font spec that matches all families. */ |
2002 len = p - p1 + strlen (allcs) + strlen (allfamilies) + 1; | 2015 len = p - p1 + strlen (allcs) + strlen (allfamilies) + 1; |
2003 font_allfamilies = (char *) alloca (len); | 2016 font_allfamilies = (char *) alloca (len); |
2004 bzero (font_allfamilies, len); | 2017 bzero (font_allfamilies, len); |
2005 strcpy (font_allfamilies, allfamilies); | 2018 strcpy (font_allfamilies, allfamilies); |
2006 bcopy (p1, font_allfamilies + (strlen (allfamilies)), p - p1); | 2019 bcopy (p1, font_allfamilies + strlen (allfamilies), p - p1); |
2007 strcat (font_allfamilies, allcs); | 2020 strcat (font_allfamilies, allcs); |
2021 | |
2022 /* Build the font spec that matches all. */ | |
2023 len = p - p2 + strlen (allcs) + strlen (all) + strlen (allfamilies) + 1; | |
2024 font_all = (char *) alloca (len); | |
2025 bzero (font_all, len); | |
2026 strcpy (font_all, allfamilies); | |
2027 strcat (font_all, all); | |
2028 bcopy (p2, font_all + strlen (all) + strlen (allfamilies), p - p2); | |
2029 strcat (font_all, allcs); | |
2008 | 2030 |
2009 /* Build the actual font set name. */ | 2031 /* Build the actual font set name. */ |
2010 len = strlen (base_fontname) + strlen (font_allcs) | 2032 len = strlen (base_fontname) + strlen (font_allcs) |
2011 + strlen (font_allfamilies) + 3; | 2033 + strlen (font_allfamilies) + strlen (font_all) + 5; |
2012 fontsetname = xmalloc (len); | 2034 fontsetname = xmalloc (len); |
2013 bzero (fontsetname, len); | 2035 bzero (fontsetname, len); |
2014 strcpy (fontsetname, base_fontname); | 2036 strcpy (fontsetname, base_fontname); |
2015 strcat (fontsetname, ","); | 2037 strcat (fontsetname, sep); |
2016 strcat (fontsetname, font_allcs); | 2038 strcat (fontsetname, font_allcs); |
2017 strcat (fontsetname, ","); | 2039 strcat (fontsetname, sep); |
2018 strcat (fontsetname, font_allfamilies); | 2040 strcat (fontsetname, font_allfamilies); |
2041 strcat (fontsetname, sep); | |
2042 strcat (fontsetname, font_all); | |
2019 } | 2043 } |
2020 return fontsetname; | 2044 } |
2021 } | 2045 if (motif) |
2046 strcat (fontsetname, ":"); | |
2047 return fontsetname; | |
2022 } | 2048 } |
2023 | 2049 |
2024 static XFontSet | 2050 static XFontSet |
2025 xic_create_xfontset (f, base_fontname) | 2051 xic_create_xfontset (f, base_fontname) |
2026 struct frame *f; | 2052 struct frame *f; |
2049 } | 2075 } |
2050 } | 2076 } |
2051 | 2077 |
2052 if (!xfs) | 2078 if (!xfs) |
2053 { | 2079 { |
2054 char *fontsetname = xic_create_fontsetname (base_fontname); | 2080 char *fontsetname = xic_create_fontsetname (base_fontname, False); |
2055 | 2081 |
2056 /* New fontset. */ | 2082 /* New fontset. */ |
2057 xfs = XCreateFontSet (FRAME_X_DISPLAY (f), | 2083 xfs = XCreateFontSet (FRAME_X_DISPLAY (f), |
2058 fontsetname, &missing_list, | 2084 fontsetname, &missing_list, |
2059 &missing_count, &def_string); | 2085 &missing_count, &def_string); |
2060 if (missing_list) | 2086 if (missing_list) |
2061 XFreeStringList (missing_list); | 2087 XFreeStringList (missing_list); |
2062 if (fontsetname != base_fontname) | 2088 xfree (fontsetname); |
2063 xfree (fontsetname); | |
2064 } | 2089 } |
2065 | 2090 |
2066 if (FRAME_XIC_BASE_FONTNAME (f)) | 2091 if (FRAME_XIC_BASE_FONTNAME (f)) |
2067 xfree (FRAME_XIC_BASE_FONTNAME (f)); | 2092 xfree (FRAME_XIC_BASE_FONTNAME (f)); |
2068 FRAME_XIC_BASE_FONTNAME (f) = xstrdup (base_fontname); | 2093 FRAME_XIC_BASE_FONTNAME (f) = xstrdup (base_fontname); |
4559 Lisp_Object buffer; | 4584 Lisp_Object buffer; |
4560 struct buffer *old_buffer; | 4585 struct buffer *old_buffer; |
4561 | 4586 |
4562 check_x (); | 4587 check_x (); |
4563 | 4588 |
4564 /* Use this general default value to start with until we know if | |
4565 this frame has a specified name. */ | |
4566 Vx_resource_name = Vinvocation_name; | |
4567 | 4589 |
4568 #ifdef MULTI_KBOARD | 4590 #ifdef MULTI_KBOARD |
4569 kb = dpyinfo->kboard; | 4591 kb = dpyinfo->kboard; |
4570 #else | 4592 #else |
4571 kb = &the_only_kboard; | 4593 kb = &the_only_kboard; |
4575 name = x_get_arg (dpyinfo, parms, Qname, "name", "Name", RES_TYPE_STRING); | 4597 name = x_get_arg (dpyinfo, parms, Qname, "name", "Name", RES_TYPE_STRING); |
4576 if (!STRINGP (name) | 4598 if (!STRINGP (name) |
4577 && !EQ (name, Qunbound) | 4599 && !EQ (name, Qunbound) |
4578 && !NILP (name)) | 4600 && !NILP (name)) |
4579 error ("Invalid frame name--not a string or nil"); | 4601 error ("Invalid frame name--not a string or nil"); |
4580 Vx_resource_name = name; | |
4581 | 4602 |
4582 frame = Qnil; | 4603 frame = Qnil; |
4583 GCPRO3 (parms, name, frame); | 4604 GCPRO3 (parms, name, frame); |
4584 f = make_frame (1); | 4605 f = make_frame (1); |
4585 XSETFRAME (frame, f); | 4606 XSETFRAME (frame, f); |