diff options
author | Eli Zaretskii <eliz@gnu.org> | 2022-03-03 20:31:33 +0200 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2022-03-03 20:31:33 +0200 |
commit | 29ff903bb0379f6fef0f7dc60977e05a8c60f147 (patch) | |
tree | 3d59d3c4a0bb8e4f0902bccd431c9de26d9299dd /src/fringe.c | |
parent | 92e2d19fe787ce73db15d1549880b54743c0d929 (diff) | |
download | emacs-29ff903bb0379f6fef0f7dc60977e05a8c60f147.tar.gz emacs-29ff903bb0379f6fef0f7dc60977e05a8c60f147.tar.bz2 emacs-29ff903bb0379f6fef0f7dc60977e05a8c60f147.zip |
Avoid crashes when fringe bitmaps are defined in daemon mode
* src/dispextern.h (gui_define_fringe_bitmap): Add prototype.
(max_used_fringe_bitmap): Add declaration.
* src/fringe.c (gui_define_fringe_bitmap): New function.
* src/w32term.c (w32_draw_fringe_bitmap):
* src/xterm.c (x_draw_fringe_bitmap) [USE_CAIRO]: Call
'gui_define_fringe_bitmap' if the terminal-specific bitmap data is
not available when a fringe bitmap is about to be drawn. Don't
try to draw a bitmap that is not known to fringe.c. (Bug#54183)
Diffstat (limited to 'src/fringe.c')
-rw-r--r-- | src/fringe.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/fringe.c b/src/fringe.c index f857aedaf02..14148a67ab1 100644 --- a/src/fringe.c +++ b/src/fringe.c @@ -1802,6 +1802,23 @@ gui_init_fringe (struct redisplay_interface *rif) } } +/* Call frame F's specific define_fringe_bitmap method for a fringe + bitmap number N. Called by various *term.c functions when they + need to display a fringe bitmap whose terminal-specific data is not + available. */ +void +gui_define_fringe_bitmap (struct frame *f, int n) +{ + struct redisplay_interface *rif = FRAME_RIF (f); + + if (!rif || !rif->define_fringe_bitmap || n >= max_used_fringe_bitmap) + return; + + struct fringe_bitmap *fb = fringe_bitmaps[n]; + if (fb) + rif->define_fringe_bitmap (n, fb->bits, fb->height, fb->width); +} + #ifdef HAVE_NTGUI void w32_reset_fringes (void) |