]> git.eshelyaron.com Git - emacs.git/commitdiff
Get rid of calls to XRenderQueryExtension after terminal initialization
authorPo Lu <luangruo@yahoo.com>
Thu, 20 Jan 2022 02:48:25 +0000 (10:48 +0800)
committerPo Lu <luangruo@yahoo.com>
Thu, 20 Jan 2022 02:48:25 +0000 (10:48 +0800)
* 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
src/xterm.c
src/xterm.h

index a4976caba86aeddbe606a02e7f702afc2ab8c8e9..ce9af2dd677b0b509859c94b7ceb8ac60d26fd77 100644 (file)
@@ -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 ()
index d3619f5b5e6083bdf0ca73e100a3ab7d1b3d6696..7a63d9353a0f852618ab9e3cadb7aa92fe3d6d90 100644 (file)
@@ -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)
index a8eb6ee547a521c6a04cc8dda9393826db7cfbe8..26b2851590ddd6dad126ca9315c84d05968f17df 100644 (file)
@@ -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