emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 8c184bb166: Get rid of calls to XRenderQueryExtension after termi


From: Po Lu
Subject: master 8c184bb166: Get rid of calls to XRenderQueryExtension after terminal initialization
Date: Wed, 19 Jan 2022 21:49:42 -0500 (EST)

branch: master
commit 8c184bb166048e9ae65245cab75a4d49642a69fe
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>

    Get rid of calls to XRenderQueryExtension after terminal initialization
    
    * src/image.c (x_create_xrender_picture):
    (Fimage_transforms_p): Use `xrender_supported_p'.
    
    * src/xterm.c (x_term_init): Query for XRender support and
    extension versions.
    
    * src/xterm.h (struct x_display_info): New fields
    `xrender_supported_p', `xrender_major' and `xrender_minor'.
---
 src/image.c |  6 ++----
 src/xterm.c | 18 +++++++++++++-----
 src/xterm.h |  6 ++++++
 3 files changed, 21 insertions(+), 9 deletions(-)

diff --git a/src/image.c b/src/image.c
index a4976caba8..ce9af2dd67 100644
--- a/src/image.c
+++ b/src/image.c
@@ -2906,9 +2906,8 @@ x_create_xrender_picture (struct frame *f, Emacs_Pixmap 
pixmap, int depth)
 {
   Picture p;
   Display *display = FRAME_X_DISPLAY (f);
-  int event_basep, error_basep;
 
-  if (XRenderQueryExtension (display, &event_basep, &error_basep))
+  if (FRAME_DISPLAY_INFO (f)->xrender_supported_p)
     {
       if (depth <= 0)
        depth = DefaultDepthOfScreen (FRAME_X_SCREEN (f));
@@ -11198,8 +11197,7 @@ The list of capabilities can include one or more of the 
following:
 # elif defined (HAVE_X_WINDOWS) && defined (HAVE_XRENDER)
       int event_basep, error_basep;
 
-      if (XRenderQueryExtension (FRAME_X_DISPLAY (f),
-                                &event_basep, &error_basep))
+      if (FRAME_DISPLAY_INFO (f)->xrender_supported_p)
        return list2 (Qscale, Qrotate90);
 # elif defined (HAVE_NTGUI)
       return (w32_image_rotations_p ()
diff --git a/src/xterm.c b/src/xterm.c
index d3619f5b5e..7a63d9353a 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -15393,6 +15393,19 @@ x_term_init (Lisp_Object display_name, char 
*xrm_option, char *resource_name)
     }
 #endif
 
+#ifdef HAVE_XRENDER
+  int event_base, error_base;
+  dpyinfo->xrender_supported_p
+    = XRenderQueryExtension (dpyinfo->display, &event_base, &error_base);
+
+  if (dpyinfo->xrender_supported_p)
+    {
+      if (!XRenderQueryVersion (dpyinfo->display, &dpyinfo->xrender_major,
+                               &dpyinfo->xrender_minor))
+       dpyinfo->xrender_supported_p = false;
+    }
+#endif
+
 #if defined USE_CAIRO || defined HAVE_XFT
   {
     /* If we are using Xft, the following precautions should be made:
@@ -15409,11 +15422,6 @@ x_term_init (Lisp_Object display_name, char 
*xrm_option, char *resource_name)
        or larger than other for other applications, even if it is the same
        font name (monospace-10 for example).  */
 
-# ifdef HAVE_XRENDER
-    int event_base, error_base;
-    XRenderQueryExtension (dpyinfo->display, &event_base, &error_base);
-# endif
-
     char *v = XGetDefault (dpyinfo->display, "Xft", "dpi");
     double d;
     if (v != NULL && sscanf (v, "%lf", &d) == 1)
diff --git a/src/xterm.h b/src/xterm.h
index a8eb6ee547..26b2851590 100644
--- a/src/xterm.h
+++ b/src/xterm.h
@@ -540,6 +540,12 @@ struct x_display_info
 #ifdef USE_GTK
   bool prefer_native_input;
 #endif
+
+#ifdef HAVE_XRENDER
+  bool xrender_supported_p;
+  int xrender_major;
+  int xrender_minor;
+#endif
 };
 
 #ifdef HAVE_X_I18N



reply via email to

[Prev in Thread] Current Thread [Next in Thread]