diff options
| author | Robert Pluim | 2020-03-16 17:21:02 +0100 |
|---|---|---|
| committer | Robert Pluim | 2020-03-17 16:58:09 +0100 |
| commit | 5747a59a886e16fadbd04c385c43628b1d8f50df (patch) | |
| tree | 0bc7cffa4d127fa213af9b13d7c050cc2c8e7b1b /src/frame.c | |
| parent | a2dd8c4234c9a858e273ea22129962cee58fa4ce (diff) | |
| download | emacs-5747a59a886e16fadbd04c385c43628b1d8f50df.tar.gz emacs-5747a59a886e16fadbd04c385c43628b1d8f50df.zip | |
Recalculate default font when switching font backend
This is an updated version of the patch by Dmitry Antipov
<dmantipov@yandex.ru> in
<https://debbugs.gnu.org/cgi/bugreport.cgi?bug=23386#43>.
Fixes Bug#23386
* src/dispextern.h (struct redisplay_interface): New member
default_font_parameter.
* src/xterm.h: Add prototype for x_default_font_parameter.
* src/xterm.c (x_redisplay_interface): Initialize
default_font_parameter member.
* src/xfns.c (x_default_font_parameter): Make non-static.
* src/w32term.h: Add prototype for w32_default_font_parameter
* src/w32fns.c (w32_default_font_parameter): Make non-static.
* src/w32term.c (w32_redisplay_interface): Initialize
default_font_parameter member.
* src/nsterm.m (ns_redisplay_interface): Add dummy
ns_default_font_parameter (there is currently only one possible font
backend on macOS). Initialize default_font_parameter member.
* src/frame.c (gui_set_font_backend): Recalculate default font using
RIF default_font_parameter to avoid crash when changing font backend.
Diffstat (limited to 'src/frame.c')
| -rw-r--r-- | src/frame.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/src/frame.c b/src/frame.c index 88d6f22fc0a..ecf175f4f99 100644 --- a/src/frame.c +++ b/src/frame.c | |||
| @@ -4565,7 +4565,11 @@ gui_set_font_backend (struct frame *f, Lisp_Object new_value, Lisp_Object old_va | |||
| 4565 | return; | 4565 | return; |
| 4566 | 4566 | ||
| 4567 | if (FRAME_FONT (f)) | 4567 | if (FRAME_FONT (f)) |
| 4568 | free_all_realized_faces (Qnil); | 4568 | { |
| 4569 | Lisp_Object frame; | ||
| 4570 | XSETFRAME (frame, f); | ||
| 4571 | free_all_realized_faces (frame); | ||
| 4572 | } | ||
| 4569 | 4573 | ||
| 4570 | new_value = font_update_drivers (f, NILP (new_value) ? Qt : new_value); | 4574 | new_value = font_update_drivers (f, NILP (new_value) ? Qt : new_value); |
| 4571 | if (NILP (new_value)) | 4575 | if (NILP (new_value)) |
| @@ -4579,10 +4583,8 @@ gui_set_font_backend (struct frame *f, Lisp_Object new_value, Lisp_Object old_va | |||
| 4579 | 4583 | ||
| 4580 | if (FRAME_FONT (f)) | 4584 | if (FRAME_FONT (f)) |
| 4581 | { | 4585 | { |
| 4582 | Lisp_Object frame; | 4586 | /* Reconsider default font after backend(s) change (Bug#23386). */ |
| 4583 | 4587 | FRAME_RIF(f)->default_font_parameter (f, Qnil); | |
| 4584 | XSETFRAME (frame, f); | ||
| 4585 | gui_set_font (f, Fframe_parameter (frame, Qfont), Qnil); | ||
| 4586 | face_change = true; | 4588 | face_change = true; |
| 4587 | windows_or_buffers_changed = 18; | 4589 | windows_or_buffers_changed = 18; |
| 4588 | } | 4590 | } |