frame.c (Fdelete_frame): Don't call font_update_drviers if

HAVE_WINDOW_SYSTEM is not defined.
xfaces.c (merge_face_ref, merge_face_vectors)
(Finternal_set_lisp_face_attribute): Use FONT_*_INDEX only when
HAVE_WINDOW_SYSTEM is defined.
(Fface_font): Fix non-HAVE_WINDOW_SYSTEM case.
This commit is contained in:
Eli Zaretskii 2008-05-16 11:10:16 +00:00
parent 09eabf0fa5
commit 1ccdfd3359
2 changed files with 42 additions and 1 deletions

View file

@ -1459,8 +1459,10 @@ But FORCE inhibits this too. */)
memory. */
free_glyphs (f);
#ifdef HAVE_WINDOW_SYSTEM
/* Give chance to each font driver to free a frame specific data. */
font_update_drivers (f, Qnil);
#endif
/* Mark all the windows that used to be on FRAME as deleted, and then
remove the reference to them. */

View file

@ -2514,6 +2514,7 @@ merge_face_vectors (f, from, to, named_merge_points)
&& !NILP (from[LFACE_INHERIT_INDEX]))
merge_face_ref (f, from[LFACE_INHERIT_INDEX], to, 0, named_merge_points);
#ifdef HAVE_WINDOW_SYSTEM
i = LFACE_FONT_INDEX;
if (!UNSPECIFIEDP (from[i]))
{
@ -2523,6 +2524,7 @@ merge_face_vectors (f, from, to, named_merge_points)
to[i] = Fcopy_font_spec (from[i]);
ASET (to[i], FONT_SIZE_INDEX, Qnil);
}
#endif
for (i = 1; i < LFACE_VECTOR_SIZE; ++i)
if (!UNSPECIFIEDP (from[i]))
@ -2530,8 +2532,11 @@ merge_face_vectors (f, from, to, named_merge_points)
if (i == LFACE_HEIGHT_INDEX && !INTEGERP (from[i]))
{
to[i] = merge_face_heights (from[i], to[i], to[i]);
#ifdef HAVE_WINDOW_SYSTEM
font_clear_prop (to, FONT_SIZE_INDEX);
#endif
}
#ifdef HAVE_WINDOW_SYSTEM
else if (i != LFACE_FONT_INDEX)
{
to[i] = from[i];
@ -2543,6 +2548,7 @@ merge_face_vectors (f, from, to, named_merge_points)
: i == LFACE_WEIGHT_INDEX ? FONT_WEIGHT_INDEX
: FONT_SLANT_INDEX));
}
#endif
}
/* If `font' attribute is specified, reflect the font properties in
@ -2667,7 +2673,9 @@ merge_face_ref (f, face_ref, to, err_msgs, named_merge_points)
if (STRINGP (value))
{
to[LFACE_FAMILY_INDEX] = value;
#ifdef HAVE_WINDOW_SYSTEM
font_clear_prop (to, FONT_FAMILY_INDEX);
#endif
}
else
err = 1;
@ -2680,7 +2688,9 @@ merge_face_ref (f, face_ref, to, err_msgs, named_merge_points)
if (! NILP (new_height))
{
to[LFACE_HEIGHT_INDEX] = new_height;
#ifdef HAVE_WINDOW_SYSTEM
font_clear_prop (to, FONT_SIZE_INDEX);
#endif
}
else
err = 1;
@ -2690,7 +2700,9 @@ merge_face_ref (f, face_ref, to, err_msgs, named_merge_points)
if (SYMBOLP (value) && FONT_WEIGHT_NAME_NUMERIC (value) >= 0)
{
to[LFACE_WEIGHT_INDEX] = value;
#ifdef HAVE_WINDOW_SYSTEM
font_clear_prop (to, FONT_WEIGHT_INDEX);
#endif
}
else
err = 1;
@ -2700,7 +2712,9 @@ merge_face_ref (f, face_ref, to, err_msgs, named_merge_points)
if (SYMBOLP (value) && FONT_SLANT_NAME_NUMERIC (value) >= 0)
{
to[LFACE_SLANT_INDEX] = value;
#ifdef HAVE_WINDOW_SYSTEM
font_clear_prop (to, FONT_SLANT_INDEX);
#endif
}
else
err = 1;
@ -2781,7 +2795,9 @@ merge_face_ref (f, face_ref, to, err_msgs, named_merge_points)
if (SYMBOLP (value) && FONT_WIDTH_NAME_NUMERIC (value) >= 0)
{
to[LFACE_SWIDTH_INDEX] = value;
#ifdef HAVE_WINDOW_SYSTEM
font_clear_prop (to, FONT_WIDTH_INDEX);
#endif
}
else
err = 1;
@ -3013,9 +3029,11 @@ FRAME 0 means change the face on all frames, and change the default
{
Lisp_Object lface;
Lisp_Object old_value = Qnil;
#ifdef HAVE_WINDOW_SYSTEM
/* Set one of enum font_property_index (> 0) if ATTR is one of
font-related attributes other than QCfont and QCfontset. */
enum font_property_index prop_index = 0;
#endif
CHECK_SYMBOL (face);
CHECK_SYMBOL (attr);
@ -3070,7 +3088,9 @@ FRAME 0 means change the face on all frames, and change the default
}
old_value = LFACE_FAMILY (lface);
LFACE_FAMILY (lface) = value;
#ifdef HAVE_WINDOW_SYSTEM
prop_index = FONT_FAMILY_INDEX;
#endif
}
else if (EQ (attr, QCheight))
{
@ -3091,7 +3111,9 @@ FRAME 0 means change the face on all frames, and change the default
old_value = LFACE_HEIGHT (lface);
LFACE_HEIGHT (lface) = value;
#ifdef HAVE_WINDOW_SYSTEM
prop_index = FONT_SIZE_INDEX;
#endif
}
else if (EQ (attr, QCweight))
{
@ -3103,7 +3125,9 @@ FRAME 0 means change the face on all frames, and change the default
}
old_value = LFACE_WEIGHT (lface);
LFACE_WEIGHT (lface) = value;
#ifdef HAVE_WINDOW_SYSTEM
prop_index = FONT_WEIGHT_INDEX;
#endif
}
else if (EQ (attr, QCslant))
{
@ -3115,7 +3139,9 @@ FRAME 0 means change the face on all frames, and change the default
}
old_value = LFACE_SLANT (lface);
LFACE_SLANT (lface) = value;
#ifdef HAVE_WINDOW_SYSTEM
prop_index = FONT_SLANT_INDEX;
#endif
}
else if (EQ (attr, QCunderline))
{
@ -3283,7 +3309,9 @@ FRAME 0 means change the face on all frames, and change the default
}
old_value = LFACE_SWIDTH (lface);
LFACE_SWIDTH (lface) = value;
#ifdef HAVE_WINDOW_SYSTEM
prop_index = FONT_WIDTH_INDEX;
#endif
}
else if (EQ (attr, QCfont))
{
@ -3362,18 +3390,23 @@ FRAME 0 means change the face on all frames, and change the default
{
old_value = LFACE_WEIGHT (lface);
LFACE_WEIGHT (lface) = NILP (value) ? Qnormal : Qbold;
#ifdef HAVE_WINDOW_SYSTEM
prop_index = FONT_WEIGHT_INDEX;
#endif
}
else if (EQ (attr, QCitalic))
{
attr = QCslant;
old_value = LFACE_SLANT (lface);
LFACE_SLANT (lface) = NILP (value) ? Qnormal : Qitalic;
#ifdef HAVE_WINDOW_SYSTEM
prop_index = FONT_SLANT_INDEX;
#endif
}
else
signal_error ("Invalid face attribute name", attr);
#ifdef HAVE_WINDOW_SYSTEM
if (prop_index)
/* If a font-related attribute other than QCfont and QCfontset is
specified, and if the original QCfont attribute has a font
@ -3381,6 +3414,7 @@ FRAME 0 means change the face on all frames, and change the default
the font to nil so that the font selector doesn't think that
the attribute is mandatory. */
font_clear_prop (XVECTOR (lface)->contents, prop_index);
#endif
/* Changing a named face means that all realized faces depending on
that face are invalid. Since we cannot tell which realized faces
@ -4016,10 +4050,15 @@ return the font name used for CHARACTER. */)
face_id = FACE_FOR_CHAR (f, face, XINT (character), -1, Qnil);
face = FACE_FROM_ID (f, face_id);
}
#endif
return (face->font
? face->font->props[FONT_NAME_INDEX]
: Qnil);
#else /* !HAVE_WINDOW_SYSTEM */
return build_string (FRAME_MSDOS_P (f)
? "ms-dos"
: FRAME_W32_P (f) ? "w32term"
:"tty");
#endif
}
}