diff options
| author | Kenichi Handa | 2009-03-19 06:50:41 +0000 |
|---|---|---|
| committer | Kenichi Handa | 2009-03-19 06:50:41 +0000 |
| commit | 0875632e0069c5f841081671cee8e768a0f30677 (patch) | |
| tree | 3e7562c4788e26cffbb8f1d833d8c2f525b333b2 /src | |
| parent | c68845e0581685a01e5a6f0603bdc29f9b39c5ef (diff) | |
| download | emacs-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.c | 23 |
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 | ||