comparison src/xfns.c @ 83271:1830bcd0eec0

Merged from miles@gnu.org--gnu-2005 (patch 39-44, 184-191) Patches applied: * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-184 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-185 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-186 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-187 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-188 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-189 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-190 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-191 Update from CVS * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-39 Merge from emacs--cvs-trunk--0 * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-40 Update from CVS * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-41 Update from CVS * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-42 Update from CVS * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-43 Update from CVS * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-44 Merge from emacs--cvs-trunk--0 git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-311
author Karoly Lorentey <lorentey@elte.hu>
date Sat, 19 Mar 2005 17:55:13 +0000
parents 48ba3f89c89f 41e456f361cc
children b877c1847af1
comparison
equal deleted inserted replaced
83270:42406ecdf5bf 83271:1830bcd0eec0
1969 1969
1970 /* Create an X fontset on frame F with base font name BASE_FONTNAME. */ 1970 /* Create an X fontset on frame F with base font name BASE_FONTNAME. */
1971 1971
1972 char xic_defaut_fontset[] = "-*-*-*-r-normal--14-*-*-*-*-*-*-*"; 1972 char xic_defaut_fontset[] = "-*-*-*-r-normal--14-*-*-*-*-*-*-*";
1973 1973
1974 /* Create an Xt fontset spec from the name of a base font.
1975 If `motif' is True use the Motif syntax. */
1974 char * 1976 char *
1975 xic_create_fontsetname (base_fontname) 1977 xic_create_fontsetname (base_fontname, motif)
1976 char *base_fontname; 1978 char *base_fontname;
1977 { 1979 Bool motif;
1980 {
1981 const char *sep = motif ? ";" : ",";
1982 char *fontsetname;
1983
1978 /* Make a fontset name from the base font name. */ 1984 /* Make a fontset name from the base font name. */
1979 if (xic_defaut_fontset == base_fontname) 1985 if (xic_defaut_fontset == base_fontname)
1980 /* There is no base font name, use the default. */ 1986 { /* There is no base font name, use the default. */
1981 return base_fontname; 1987 int len = strlen (base_fontname) + 2;
1988 fontsetname = xmalloc (len);
1989 bzero (fontsetname, len);
1990 strcpy (fontsetname, base_fontname);
1991 }
1982 else 1992 else
1983 { 1993 {
1984 /* Make a fontset name from the base font name. 1994 /* Make a fontset name from the base font name.
1985 The font set will be made of the following elements: 1995 The font set will be made of the following elements:
1986 - the base font. 1996 - the base font.
1987 - the base font where the charset spec is replaced by -*-*. 1997 - the base font where the charset spec is replaced by -*-*.
1988 - the same but with the family also replaced with -*-*-. */ 1998 - the same but with the family also replaced with -*-*-. */
1989 char *p = base_fontname; 1999 char *p = base_fontname;
1990 char *fontsetname;
1991 int i; 2000 int i;
1992 2001
1993 for (i = 0; *p; p++) 2002 for (i = 0; *p; p++)
1994 if (*p == '-') i++; 2003 if (*p == '-') i++;
1995 if (i != 14) 2004 if (i != 14)
1996 { /* As the font name doesn't conform to XLFD, we can't 2005 { /* As the font name doesn't conform to XLFD, we can't
1997 modify it to generalize it to allcs and allfamilies. 2006 modify it to generalize it to allcs and allfamilies.
1998 Use the specified font plus the default. */ 2007 Use the specified font plus the default. */
1999 int len = strlen (base_fontname) + strlen (xic_defaut_fontset) + 2; 2008 int len = strlen (base_fontname) + strlen (xic_defaut_fontset) + 3;
2000 fontsetname = xmalloc (len); 2009 fontsetname = xmalloc (len);
2001 bzero (fontsetname, len); 2010 bzero (fontsetname, len);
2002 strcpy (fontsetname, base_fontname); 2011 strcpy (fontsetname, base_fontname);
2003 strcat (fontsetname, ","); 2012 strcat (fontsetname, sep);
2004 strcat (fontsetname, xic_defaut_fontset); 2013 strcat (fontsetname, xic_defaut_fontset);
2005 } 2014 }
2006 else 2015 else
2007 { 2016 {
2008 int len; 2017 int len;
2009 char *p1 = NULL; 2018 char *p1 = NULL, *p2 = NULL;
2010 char *font_allcs = NULL; 2019 char *font_allcs = NULL;
2011 char *font_allfamilies = NULL; 2020 char *font_allfamilies = NULL;
2021 char *font_all = NULL;
2012 char *allcs = "*-*-*-*-*-*-*"; 2022 char *allcs = "*-*-*-*-*-*-*";
2013 char *allfamilies = "-*-*-"; 2023 char *allfamilies = "-*-*-";
2024 char *all = "*-*-*-*-";
2014 2025
2015 for (i = 0, p = base_fontname; i < 8; p++) 2026 for (i = 0, p = base_fontname; i < 8; p++)
2016 { 2027 {
2017 if (*p == '-') 2028 if (*p == '-')
2018 { 2029 {
2019 i++; 2030 i++;
2020 if (i == 3) 2031 if (i == 3)
2021 p1 = p + 1; 2032 p1 = p + 1;
2033 else if (i == 7)
2034 p2 = p + 1;
2022 } 2035 }
2023 } 2036 }
2024 /* Build the font spec that matches all charsets. */ 2037 /* Build the font spec that matches all charsets. */
2025 len = p - base_fontname + strlen (allcs) + 1; 2038 len = p - base_fontname + strlen (allcs) + 1;
2026 font_allcs = (char *) alloca (len); 2039 font_allcs = (char *) alloca (len);
2031 /* Build the font spec that matches all families. */ 2044 /* Build the font spec that matches all families. */
2032 len = p - p1 + strlen (allcs) + strlen (allfamilies) + 1; 2045 len = p - p1 + strlen (allcs) + strlen (allfamilies) + 1;
2033 font_allfamilies = (char *) alloca (len); 2046 font_allfamilies = (char *) alloca (len);
2034 bzero (font_allfamilies, len); 2047 bzero (font_allfamilies, len);
2035 strcpy (font_allfamilies, allfamilies); 2048 strcpy (font_allfamilies, allfamilies);
2036 bcopy (p1, font_allfamilies + (strlen (allfamilies)), p - p1); 2049 bcopy (p1, font_allfamilies + strlen (allfamilies), p - p1);
2037 strcat (font_allfamilies, allcs); 2050 strcat (font_allfamilies, allcs);
2051
2052 /* Build the font spec that matches all. */
2053 len = p - p2 + strlen (allcs) + strlen (all) + strlen (allfamilies) + 1;
2054 font_all = (char *) alloca (len);
2055 bzero (font_all, len);
2056 strcpy (font_all, allfamilies);
2057 strcat (font_all, all);
2058 bcopy (p2, font_all + strlen (all) + strlen (allfamilies), p - p2);
2059 strcat (font_all, allcs);
2038 2060
2039 /* Build the actual font set name. */ 2061 /* Build the actual font set name. */
2040 len = strlen (base_fontname) + strlen (font_allcs) 2062 len = strlen (base_fontname) + strlen (font_allcs)
2041 + strlen (font_allfamilies) + 3; 2063 + strlen (font_allfamilies) + strlen (font_all) + 5;
2042 fontsetname = xmalloc (len); 2064 fontsetname = xmalloc (len);
2043 bzero (fontsetname, len); 2065 bzero (fontsetname, len);
2044 strcpy (fontsetname, base_fontname); 2066 strcpy (fontsetname, base_fontname);
2045 strcat (fontsetname, ","); 2067 strcat (fontsetname, sep);
2046 strcat (fontsetname, font_allcs); 2068 strcat (fontsetname, font_allcs);
2047 strcat (fontsetname, ","); 2069 strcat (fontsetname, sep);
2048 strcat (fontsetname, font_allfamilies); 2070 strcat (fontsetname, font_allfamilies);
2071 strcat (fontsetname, sep);
2072 strcat (fontsetname, font_all);
2049 } 2073 }
2050 return fontsetname; 2074 }
2051 } 2075 if (motif)
2076 strcat (fontsetname, ":");
2077 return fontsetname;
2052 } 2078 }
2053 2079
2054 static XFontSet 2080 static XFontSet
2055 xic_create_xfontset (f, base_fontname) 2081 xic_create_xfontset (f, base_fontname)
2056 struct frame *f; 2082 struct frame *f;
2079 } 2105 }
2080 } 2106 }
2081 2107
2082 if (!xfs) 2108 if (!xfs)
2083 { 2109 {
2084 char *fontsetname = xic_create_fontsetname (base_fontname); 2110 char *fontsetname = xic_create_fontsetname (base_fontname, False);
2085 2111
2086 /* New fontset. */ 2112 /* New fontset. */
2087 xfs = XCreateFontSet (FRAME_X_DISPLAY (f), 2113 xfs = XCreateFontSet (FRAME_X_DISPLAY (f),
2088 fontsetname, &missing_list, 2114 fontsetname, &missing_list,
2089 &missing_count, &def_string); 2115 &missing_count, &def_string);
2090 if (missing_list) 2116 if (missing_list)
2091 XFreeStringList (missing_list); 2117 XFreeStringList (missing_list);
2092 if (fontsetname != base_fontname) 2118 xfree (fontsetname);
2093 xfree (fontsetname);
2094 } 2119 }
2095 2120
2096 if (FRAME_XIC_BASE_FONTNAME (f)) 2121 if (FRAME_XIC_BASE_FONTNAME (f))
2097 xfree (FRAME_XIC_BASE_FONTNAME (f)); 2122 xfree (FRAME_XIC_BASE_FONTNAME (f));
2098 FRAME_XIC_BASE_FONTNAME (f) = xstrdup (base_fontname); 2123 FRAME_XIC_BASE_FONTNAME (f) = xstrdup (base_fontname);
4594 Lisp_Object buffer; 4619 Lisp_Object buffer;
4595 struct buffer *old_buffer; 4620 struct buffer *old_buffer;
4596 4621
4597 check_x (); 4622 check_x ();
4598 4623
4599 /* Use this general default value to start with until we know if
4600 this frame has a specified name. */
4601 Vx_resource_name = Vinvocation_name;
4602 4624
4603 #ifdef MULTI_KBOARD 4625 #ifdef MULTI_KBOARD
4604 kb = dpyinfo->kboard; 4626 kb = dpyinfo->kboard;
4605 #else 4627 #else
4606 kb = &the_only_kboard; 4628 kb = &the_only_kboard;
4610 name = x_get_arg (dpyinfo, parms, Qname, "name", "Name", RES_TYPE_STRING); 4632 name = x_get_arg (dpyinfo, parms, Qname, "name", "Name", RES_TYPE_STRING);
4611 if (!STRINGP (name) 4633 if (!STRINGP (name)
4612 && !EQ (name, Qunbound) 4634 && !EQ (name, Qunbound)
4613 && !NILP (name)) 4635 && !NILP (name))
4614 error ("Invalid frame name--not a string or nil"); 4636 error ("Invalid frame name--not a string or nil");
4615
4616 Vx_resource_name = name;
4617 4637
4618 frame = Qnil; 4638 frame = Qnil;
4619 GCPRO3 (parms, name, frame); 4639 GCPRO3 (parms, name, frame);
4620 f = make_frame (1); 4640 f = make_frame (1);
4621 XSETFRAME (frame, f); 4641 XSETFRAME (frame, f);