[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
};
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master 8719abe4ca: Test for Xkb support when opening a display,
Po Lu <=