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);