(Fset_fontset_font): When a spec of ASCII font is
authorKenichi Handa <handa@m17n.org>
Thu, 19 Mar 2009 06:50:41 +0000 (06:50 +0000)
committerKenichi Handa <handa@m17n.org>
Thu, 19 Mar 2009 06:50:41 +0000 (06:50 +0000)
changed, use font_load_for_lface to get a new font object.  Call
free_realized_fontset after handling ASCII font change.

src/fontset.c

index 47f99c5..51568a5 100644 (file)
@@ -1612,39 +1612,42 @@ appended.  By default, FONT-SPEC overrides the previous settings.  */)
   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;
 }