From 76d79e1576956eb0c07eb830fd75f7b7c4192efe Mon Sep 17 00:00:00 2001 From: Po Lu Date: Sat, 5 Mar 2022 10:05:14 +0800 Subject: [PATCH] Prevent some NoExpose events from being generated * src/xterm.c (x_scroll_run): Use the rendering extension if available to avoid NoExpose events. --- src/xterm.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/xterm.c b/src/xterm.c index 948afa56808..89ec43b4705 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -6037,12 +6037,24 @@ x_scroll_run (struct window *w, struct run *run) } else #endif /* USE_CAIRO */ - XCopyArea (FRAME_X_DISPLAY (f), - FRAME_X_DRAWABLE (f), FRAME_X_DRAWABLE (f), - f->output_data.x->normal_gc, - x, from_y, - width, height, - x, to_y); + { +#ifdef HAVE_XRENDER + /* Avoid useless NoExpose events. This way, we only get regular + exposure events when there is actually something to + expose. */ + if (FRAME_X_PICTURE (f) != None) + XRenderComposite (FRAME_X_DISPLAY (f), PictOpSrc, FRAME_X_PICTURE (f), + None, FRAME_X_PICTURE (f), x, from_y, 0, 0, x, to_y, + width, height); + else +#endif + XCopyArea (FRAME_X_DISPLAY (f), + FRAME_X_DRAWABLE (f), FRAME_X_DRAWABLE (f), + f->output_data.x->normal_gc, + x, from_y, + width, height, + x, to_y); + } unblock_input (); } -- 2.39.5