changeset 102654:8cacd0d8fb30

(Fset_fontset_font): When a spec of ASCII font is changed, use font_load_for_lface to get a new font object. Call free_realized_fontset after handling ASCII font change.
author Kenichi Handa <handa@m17n.org>
date Thu, 19 Mar 2009 06:50:41 +0000
parents eaf39e07d5ea
children 3854b305c65b
files src/fontset.c
diffstat 1 files changed, 13 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/src/fontset.c	Thu Mar 19 06:26:04 2009 +0000
+++ b/src/fontset.c	Thu Mar 19 06:50:41 2009 +0000
@@ -1612,39 +1612,42 @@
   for (; CONSP (range_list); range_list = XCDR (range_list))
     FONTSET_ADD (fontset, XCAR (range_list), font_def, add);
 
-  /* Free all realized fontsets whose base is FONTSET.  This way, the
-     specified character(s) are surely redisplayed by a correct
-     font.  */
-  free_realized_fontsets (fontset);
-
   if (ascii_changed)
     {
       Lisp_Object tail, frame, alist;
       int fontset_id = XINT (FONTSET_ID (fontset));
 
-      alist = Qnil;
       FONTSET_ASCII (fontset) = fontname;
       name = FONTSET_NAME (fontset);
       FOR_EACH_FRAME (tail, frame)
 	{
 	  FRAME_PTR f = XFRAME (frame);
 	  Lisp_Object font_object;
+	  struct face *face;
 
-	  if (FRAME_INITIAL_P(f) || FRAME_TERMCAP_P (f))
+	  if (FRAME_INITIAL_P (f) || FRAME_TERMCAP_P (f))
 	    continue;
 	  if (fontset_id != FRAME_FONTSET (f))
 	    continue;
-	  font_object = font_open_by_spec (f, font_spec);
+	  face = FACE_FROM_ID (f, DEFAULT_FACE_ID);
+	  if (face)
+	    font_object = font_load_for_lface (f, face->lface, font_spec);
+	  else
+	    font_object = font_open_by_spec (f, font_spec);
 	  if (! NILP (font_object))
 	    {
 	      update_auto_fontset_alist (font_object, fontset);
-	      if (NILP (alist))
-		alist = Fcons (Fcons (Qfont, name), Qnil);
+	      alist = Fcons (Fcons (Qfont, Fcons (name, font_object)), Qnil);
 	      Fmodify_frame_parameters (frame, alist);
 	    }
 	}
     }
 
+  /* Free all realized fontsets whose base is FONTSET.  This way, the
+     specified character(s) are surely redisplayed by a correct
+     font.  */
+  free_realized_fontsets (fontset);
+
   return Qnil;
 }