emacs-diffs
[Top][All Lists]
Advanced

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

master 8719abe4ca: Test for Xkb support when opening a display


From: Po Lu
Subject: master 8719abe4ca: Test for Xkb support when opening a display
Date: Wed, 29 Dec 2021 04:52:04 -0500 (EST)

branch: master
commit 8719abe4ca5d4b6ccc0e405dc0313730c6ec7d72
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>

    Test for Xkb support when opening a display
    
    * src/xfns.c (Fx_backspace_delete_keys_p): Use
    dpyinfo->supports_xkb instead of testing for its presence
    manually.
    
    * src/xterm.c (x_term_init): Test for Xkb presence
    and set supports_xkb appropriately.
    
    * src/xterm.h (struct x_display_info): New field `supports_xkb'.
---
 src/xfns.c  | 20 ++------------------
 src/xterm.c | 16 +++++++++++++---
 src/xterm.h |  1 +
 3 files changed, 16 insertions(+), 21 deletions(-)

diff --git a/src/xfns.c b/src/xfns.c
index 8dc383ddfa..ae01bb0405 100644
--- a/src/xfns.c
+++ b/src/xfns.c
@@ -7748,27 +7748,11 @@ present and mapped to the usual X keysyms.  */)
   struct frame *f = decode_window_system_frame (frame);
   Display *dpy = FRAME_X_DISPLAY (f);
   Lisp_Object have_keys;
-  int major, minor, op, event, error_code;
 
   block_input ();
 
-  /* Check library version in case we're dynamically linked.  */
-  major = XkbMajorVersion;
-  minor = XkbMinorVersion;
-  if (!XkbLibraryVersion (&major, &minor))
-    {
-      unblock_input ();
-      return Qlambda;
-    }
-
-  /* Check that the server supports XKB.  */
-  major = XkbMajorVersion;
-  minor = XkbMinorVersion;
-  if (!XkbQueryExtension (dpy, &op, &event, &error_code, &major, &minor))
-    {
-      unblock_input ();
-      return Qlambda;
-    }
+  if (!FRAME_DISPLAY_INFO (f)->supports_xkb)
+    return Qlambda;
 
   /* In this code we check that the keyboard has physical keys with names
      that start with BKSP (Backspace) and DELE (Delete), and that they
diff --git a/src/xterm.c b/src/xterm.c
index e3079727d5..61dff7aaab 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -14887,9 +14887,19 @@ x_term_init (Lisp_Object display_name, char 
*xrm_option, char *resource_name)
 #endif
 
 #ifdef HAVE_XKB
-  dpyinfo->xkb_desc = XkbGetMap (dpyinfo->display,
-                                XkbAllComponentsMask,
-                                XkbUseCoreKbd);
+  int xkb_major, xkb_minor, xkb_op, xkb_event, xkb_error_code;
+  xkb_major = XkbMajorVersion;
+  xkb_minor = XkbMinorVersion;
+
+  if (XkbLibraryVersion (&xkb_major, &xkb_minor)
+      && XkbQueryExtension (dpyinfo->display, &xkb_op, &xkb_event,
+                           &xkb_error_code, &xkb_major, &xkb_minor))
+    {
+      dpyinfo->supports_xkb = true;
+      dpyinfo->xkb_desc = XkbGetMap (dpyinfo->display,
+                                    XkbAllComponentsMask,
+                                    XkbUseCoreKbd);
+    }
 #endif
 
 #if defined USE_CAIRO || defined HAVE_XFT
diff --git a/src/xterm.h b/src/xterm.h
index 5615a55d6b..a233e28dbe 100644
--- a/src/xterm.h
+++ b/src/xterm.h
@@ -522,6 +522,7 @@ struct x_display_info
 #endif
 
 #ifdef HAVE_XKB
+  bool supports_xkb;
   XkbDescPtr xkb_desc;
 #endif
 };



reply via email to

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