summaryrefslogtreecommitdiff
path: root/src/xfns.c
diff options
context:
space:
mode:
authorKaroly Lorentey <lorentey@elte.hu>2005-03-19 17:55:13 +0000
committerKaroly Lorentey <lorentey@elte.hu>2005-03-19 17:55:13 +0000
commit392711ede18168618ac6eedd4fdf5910d11a2714 (patch)
tree29940aa43a5fb4527b4111db7fb7aa2b57b444fd /src/xfns.c
parent04e9296582b1bbe7b2c5911691d9fbe4a9581382 (diff)
parent951f97e67d904729032b476caf5f7c2e7e303d73 (diff)
downloademacs-392711ede18168618ac6eedd4fdf5910d11a2714.tar.gz
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
Diffstat (limited to 'src/xfns.c')
-rw-r--r--src/xfns.c62
1 files changed, 41 insertions, 21 deletions
diff --git a/src/xfns.c b/src/xfns.c
index 4c9b38d2556..72547e2010f 100644
--- a/src/xfns.c
+++ b/src/xfns.c
@@ -1971,14 +1971,24 @@ static XIMStyle supported_xim_styles[] =
char xic_defaut_fontset[] = "-*-*-*-r-normal--14-*-*-*-*-*-*-*";
+/* Create an Xt fontset spec from the name of a base font.
+ If `motif' is True use the Motif syntax. */
char *
-xic_create_fontsetname (base_fontname)
+xic_create_fontsetname (base_fontname, motif)
char *base_fontname;
+ Bool motif;
{
+ const char *sep = motif ? ";" : ",";
+ char *fontsetname;
+
/* Make a fontset name from the base font name. */
if (xic_defaut_fontset == base_fontname)
- /* There is no base font name, use the default. */
- return base_fontname;
+ { /* There is no base font name, use the default. */
+ int len = strlen (base_fontname) + 2;
+ fontsetname = xmalloc (len);
+ bzero (fontsetname, len);
+ strcpy (fontsetname, base_fontname);
+ }
else
{
/* Make a fontset name from the base font name.
@@ -1987,30 +1997,31 @@ xic_create_fontsetname (base_fontname)
- the base font where the charset spec is replaced by -*-*.
- the same but with the family also replaced with -*-*-. */
char *p = base_fontname;
- char *fontsetname;
int i;
-
+
for (i = 0; *p; p++)
if (*p == '-') i++;
if (i != 14)
{ /* As the font name doesn't conform to XLFD, we can't
modify it to generalize it to allcs and allfamilies.
Use the specified font plus the default. */
- int len = strlen (base_fontname) + strlen (xic_defaut_fontset) + 2;
+ int len = strlen (base_fontname) + strlen (xic_defaut_fontset) + 3;
fontsetname = xmalloc (len);
bzero (fontsetname, len);
strcpy (fontsetname, base_fontname);
- strcat (fontsetname, ",");
+ strcat (fontsetname, sep);
strcat (fontsetname, xic_defaut_fontset);
}
else
{
int len;
- char *p1 = NULL;
+ char *p1 = NULL, *p2 = NULL;
char *font_allcs = NULL;
char *font_allfamilies = NULL;
+ char *font_all = NULL;
char *allcs = "*-*-*-*-*-*-*";
char *allfamilies = "-*-*-";
+ char *all = "*-*-*-*-";
for (i = 0, p = base_fontname; i < 8; p++)
{
@@ -2019,6 +2030,8 @@ xic_create_fontsetname (base_fontname)
i++;
if (i == 3)
p1 = p + 1;
+ else if (i == 7)
+ p2 = p + 1;
}
}
/* Build the font spec that matches all charsets. */
@@ -2033,22 +2046,35 @@ xic_create_fontsetname (base_fontname)
font_allfamilies = (char *) alloca (len);
bzero (font_allfamilies, len);
strcpy (font_allfamilies, allfamilies);
- bcopy (p1, font_allfamilies + (strlen (allfamilies)), p - p1);
+ bcopy (p1, font_allfamilies + strlen (allfamilies), p - p1);
strcat (font_allfamilies, allcs);
+ /* Build the font spec that matches all. */
+ len = p - p2 + strlen (allcs) + strlen (all) + strlen (allfamilies) + 1;
+ font_all = (char *) alloca (len);
+ bzero (font_all, len);
+ strcpy (font_all, allfamilies);
+ strcat (font_all, all);
+ bcopy (p2, font_all + strlen (all) + strlen (allfamilies), p - p2);
+ strcat (font_all, allcs);
+
/* Build the actual font set name. */
len = strlen (base_fontname) + strlen (font_allcs)
- + strlen (font_allfamilies) + 3;
+ + strlen (font_allfamilies) + strlen (font_all) + 5;
fontsetname = xmalloc (len);
bzero (fontsetname, len);
strcpy (fontsetname, base_fontname);
- strcat (fontsetname, ",");
+ strcat (fontsetname, sep);
strcat (fontsetname, font_allcs);
- strcat (fontsetname, ",");
+ strcat (fontsetname, sep);
strcat (fontsetname, font_allfamilies);
+ strcat (fontsetname, sep);
+ strcat (fontsetname, font_all);
}
- return fontsetname;
}
+ if (motif)
+ strcat (fontsetname, ":");
+ return fontsetname;
}
static XFontSet
@@ -2081,7 +2107,7 @@ xic_create_xfontset (f, base_fontname)
if (!xfs)
{
- char *fontsetname = xic_create_fontsetname (base_fontname);
+ char *fontsetname = xic_create_fontsetname (base_fontname, False);
/* New fontset. */
xfs = XCreateFontSet (FRAME_X_DISPLAY (f),
@@ -2089,8 +2115,7 @@ xic_create_xfontset (f, base_fontname)
&missing_count, &def_string);
if (missing_list)
XFreeStringList (missing_list);
- if (fontsetname != base_fontname)
- xfree (fontsetname);
+ xfree (fontsetname);
}
if (FRAME_XIC_BASE_FONTNAME (f))
@@ -4596,9 +4621,6 @@ x_create_tip_frame (dpyinfo, parms, text)
check_x ();
- /* Use this general default value to start with until we know if
- this frame has a specified name. */
- Vx_resource_name = Vinvocation_name;
#ifdef MULTI_KBOARD
kb = dpyinfo->kboard;
@@ -4613,8 +4635,6 @@ x_create_tip_frame (dpyinfo, parms, text)
&& !NILP (name))
error ("Invalid frame name--not a string or nil");
- Vx_resource_name = name;
-
frame = Qnil;
GCPRO3 (parms, name, frame);
f = make_frame (1);