summaryrefslogtreecommitdiff
path: root/src/fringe.c
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2022-03-03 20:31:33 +0200
committerEli Zaretskii <eliz@gnu.org>2022-03-03 20:31:33 +0200
commit29ff903bb0379f6fef0f7dc60977e05a8c60f147 (patch)
tree3d59d3c4a0bb8e4f0902bccd431c9de26d9299dd /src/fringe.c
parent92e2d19fe787ce73db15d1549880b54743c0d929 (diff)
downloademacs-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.c17
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)