From 9cb363dbdae22fb8e00a400516da140d62434a3d Mon Sep 17 00:00:00 2001 From: YAMAMOTO Mitsuharu Date: Mon, 11 May 2009 09:30:34 +0000 Subject: [PATCH] (xftfont_open): Make sure that Xrender extension is added before Xft one (Bug#1696). --- src/ChangeLog | 3 +++ src/xftfont.c | 10 ++++++++++ 2 files changed, 13 insertions(+) diff --git a/src/ChangeLog b/src/ChangeLog index 4e774d027f0..e4afbc9298a 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -3,6 +3,9 @@ * gtkutil.c (xg_frame_set_char_size): Set frame pixel width/height to what we expect to get in the next ConfigureNotify event. + * xftfont.c (xftfont_open): Make sure that Xrender extension is added + before Xft one (Bug#1696). + 2009-05-07 David Reitter * nsfns.m (Fx_display_planes): Compute bitplanes using diff --git a/src/xftfont.c b/src/xftfont.c index af0feb9b7e6..4a1b488bcf9 100644 --- a/src/xftfont.c +++ b/src/xftfont.c @@ -274,6 +274,16 @@ xftfont_open (f, entity, pixel_size) BLOCK_INPUT; + /* Make sure that the Xrender extension is added before the Xft one. + Otherwise, the close-display hook set by Xft is called after the + one for Xrender, and the former tries to re-add the latter. This + results in inconsistency of internal states and leads to X + protocol error when one reconnects to the same X server. + (Bug#1696) */ + { + int event_base, error_base; + XRenderQueryExtension (display, &event_base, &error_base); + } match = XftFontMatch (display, FRAME_X_SCREEN_NUMBER (f), pat, &result); FcPatternDestroy (pat); xftfont = XftFontOpenPattern (display, match); -- 2.39.5