aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKenichi Handa2009-03-19 06:50:41 +0000
committerKenichi Handa2009-03-19 06:50:41 +0000
commit0875632e0069c5f841081671cee8e768a0f30677 (patch)
tree3e7562c4788e26cffbb8f1d833d8c2f525b333b2 /src
parentc68845e0581685a01e5a6f0603bdc29f9b39c5ef (diff)
downloademacs-0875632e0069c5f841081671cee8e768a0f30677.tar.gz
emacs-0875632e0069c5f841081671cee8e768a0f30677.zip
(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.
Diffstat (limited to 'src')
-rw-r--r--src/fontset.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/src/fontset.c b/src/fontset.c
index 47f99c59d2c..51568a50d43 100644
--- a/src/fontset.c
+++ b/src/fontset.c
@@ -1612,39 +1612,42 @@ appended. By default, FONT-SPEC overrides the previous settings. */)
1612 for (; CONSP (range_list); range_list = XCDR (range_list)) 1612 for (; CONSP (range_list); range_list = XCDR (range_list))
1613 FONTSET_ADD (fontset, XCAR (range_list), font_def, add); 1613 FONTSET_ADD (fontset, XCAR (range_list), font_def, add);
1614 1614
1615 /* Free all realized fontsets whose base is FONTSET. This way, the
1616 specified character(s) are surely redisplayed by a correct
1617 font. */
1618 free_realized_fontsets (fontset);
1619
1620 if (ascii_changed) 1615 if (ascii_changed)
1621 { 1616 {
1622 Lisp_Object tail, frame, alist; 1617 Lisp_Object tail, frame, alist;
1623 int fontset_id = XINT (FONTSET_ID (fontset)); 1618 int fontset_id = XINT (FONTSET_ID (fontset));
1624 1619
1625 alist = Qnil;
1626 FONTSET_ASCII (fontset) = fontname; 1620 FONTSET_ASCII (fontset) = fontname;
1627 name = FONTSET_NAME (fontset); 1621 name = FONTSET_NAME (fontset);
1628 FOR_EACH_FRAME (tail, frame) 1622 FOR_EACH_FRAME (tail, frame)
1629 { 1623 {
1630 FRAME_PTR f = XFRAME (frame); 1624 FRAME_PTR f = XFRAME (frame);
1631 Lisp_Object font_object; 1625 Lisp_Object font_object;
1626 struct face *face;
1632 1627
1633 if (FRAME_INITIAL_P(f) || FRAME_TERMCAP_P (f)) 1628 if (FRAME_INITIAL_P (f) || FRAME_TERMCAP_P (f))
1634 continue; 1629 continue;
1635 if (fontset_id != FRAME_FONTSET (f)) 1630 if (fontset_id != FRAME_FONTSET (f))
1636 continue; 1631 continue;
1637 font_object = font_open_by_spec (f, font_spec); 1632 face = FACE_FROM_ID (f, DEFAULT_FACE_ID);
1633 if (face)
1634 font_object = font_load_for_lface (f, face->lface, font_spec);
1635 else
1636 font_object = font_open_by_spec (f, font_spec);
1638 if (! NILP (font_object)) 1637 if (! NILP (font_object))
1639 { 1638 {
1640 update_auto_fontset_alist (font_object, fontset); 1639 update_auto_fontset_alist (font_object, fontset);
1641 if (NILP (alist)) 1640 alist = Fcons (Fcons (Qfont, Fcons (name, font_object)), Qnil);
1642 alist = Fcons (Fcons (Qfont, name), Qnil);
1643 Fmodify_frame_parameters (frame, alist); 1641 Fmodify_frame_parameters (frame, alist);
1644 } 1642 }
1645 } 1643 }
1646 } 1644 }
1647 1645
1646 /* Free all realized fontsets whose base is FONTSET. This way, the
1647 specified character(s) are surely redisplayed by a correct
1648 font. */
1649 free_realized_fontsets (fontset);
1650
1648 return Qnil; 1651 return Qnil;
1649} 1652}
1650 1653