aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChong Yidong2008-06-30 02:09:21 +0000
committerChong Yidong2008-06-30 02:09:21 +0000
commit8d3810fd985abe6eb918e05457d6de28894b085a (patch)
tree7c55264a412c0c5eda96266fe6fcda66fad1d2b0 /src
parent44b754c7c9125e63e0969b50778654547a9c9097 (diff)
downloademacs-8d3810fd985abe6eb918e05457d6de28894b085a.tar.gz
emacs-8d3810fd985abe6eb918e05457d6de28894b085a.zip
(Finternal_merge_in_global_face): If default face was modified,
realize it again. Update the font face attribute.
Diffstat (limited to 'src')
-rw-r--r--src/xfaces.c41
1 files changed, 33 insertions, 8 deletions
diff --git a/src/xfaces.c b/src/xfaces.c
index 787891ab2c1..4992ee4f7de 100644
--- a/src/xfaces.c
+++ b/src/xfaces.c
@@ -3942,10 +3942,11 @@ Default face attributes override any local face attributes. */)
3942{ 3942{
3943 int i; 3943 int i;
3944 Lisp_Object global_lface, local_lface, *gvec, *lvec; 3944 Lisp_Object global_lface, local_lface, *gvec, *lvec;
3945 struct frame *f = XFRAME (frame);
3945 3946
3946 CHECK_LIVE_FRAME (frame); 3947 CHECK_LIVE_FRAME (frame);
3947 global_lface = lface_from_face_name (NULL, face, 1); 3948 global_lface = lface_from_face_name (NULL, face, 1);
3948 local_lface = lface_from_face_name (XFRAME (frame), face, 0); 3949 local_lface = lface_from_face_name (f, face, 0);
3949 if (NILP (local_lface)) 3950 if (NILP (local_lface))
3950 local_lface = Finternal_make_lisp_face (face, frame); 3951 local_lface = Finternal_make_lisp_face (face, frame);
3951 3952
@@ -3957,13 +3958,37 @@ Default face attributes override any local face attributes. */)
3957 lvec = XVECTOR (local_lface)->contents; 3958 lvec = XVECTOR (local_lface)->contents;
3958 gvec = XVECTOR (global_lface)->contents; 3959 gvec = XVECTOR (global_lface)->contents;
3959 for (i = 1; i < LFACE_VECTOR_SIZE; ++i) 3960 for (i = 1; i < LFACE_VECTOR_SIZE; ++i)
3960 if (! UNSPECIFIEDP (gvec[i])) 3961 if (IGNORE_DEFFACE_P (gvec[i]))
3961 { 3962 lvec[i] = Qunspecified;
3962 if (IGNORE_DEFFACE_P (gvec[i])) 3963 else if (! UNSPECIFIEDP (gvec[i]))
3963 lvec[i] = Qunspecified; 3964 lvec[i] = gvec[i];
3964 else 3965
3965 lvec[i] = gvec[i]; 3966 /* If the default face was changed, realize it again, and update the
3966 } 3967 `font' face parameter. */
3968 if (EQ (face, Qdefault))
3969 {
3970 struct face_cache *c = FRAME_FACE_CACHE (f);
3971 struct face *newface, *oldface = FACE_FROM_ID (f, DEFAULT_FACE_ID);
3972 Lisp_Object attrs[LFACE_VECTOR_SIZE];
3973
3974 bcopy (oldface->lface, attrs, sizeof attrs);
3975 merge_face_vectors (f, lvec, attrs, 0);
3976 newface = realize_face (c, attrs, DEFAULT_FACE_ID);
3977
3978 if ((! UNSPECIFIEDP (gvec[LFACE_FAMILY_INDEX])
3979 || ! UNSPECIFIEDP (gvec[LFACE_FOUNDRY_INDEX])
3980 || ! UNSPECIFIEDP (gvec[LFACE_HEIGHT_INDEX])
3981 || ! UNSPECIFIEDP (gvec[LFACE_WEIGHT_INDEX])
3982 || ! UNSPECIFIEDP (gvec[LFACE_SLANT_INDEX])
3983 || ! UNSPECIFIEDP (gvec[LFACE_SWIDTH_INDEX])
3984 || ! UNSPECIFIEDP (gvec[LFACE_FONT_INDEX]))
3985 && newface->font)
3986 {
3987 Lisp_Object name = newface->font->props[FONT_NAME_INDEX];
3988 Fmodify_frame_parameters (frame, Fcons (Fcons (Qfont, name),
3989 Qnil));
3990 }
3991 }
3967 3992
3968 return Qnil; 3993 return Qnil;
3969} 3994}