aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/ChangeLog5
-rw-r--r--src/xfns.c41
2 files changed, 31 insertions, 15 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 51f2a856f6a..115ab52de12 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,8 @@
12001-01-10 Gerd Moellmann <gerd@gnu.org>
2
3 * xfns.c (Fx_backspace_delete_keys_p): Use XkbGetMap and
4 XkbGetNames instead of XkbGetKeyboard.
5
12001-01-10 Dave Love <fx@gnu.org> 62001-01-10 Dave Love <fx@gnu.org>
2 7
3 * sysdep.c (random): Revert the declaration. 8 * sysdep.c (random): Revert the declaration.
diff --git a/src/xfns.c b/src/xfns.c
index 037a0baa294..6d0d959fb09 100644
--- a/src/xfns.c
+++ b/src/xfns.c
@@ -11179,34 +11179,45 @@ usual X keysyms.")
11179 major = XkbMajorVersion; 11179 major = XkbMajorVersion;
11180 minor = XkbMinorVersion; 11180 minor = XkbMinorVersion;
11181 if (!XkbLibraryVersion (&major, &minor)) 11181 if (!XkbLibraryVersion (&major, &minor))
11182 return Qnil; 11182 {
11183 UNBLOCK_INPUT;
11184 return Qnil;
11185 }
11183 11186
11184 /* Check that the server supports XKB. */ 11187 /* Check that the server supports XKB. */
11185 major = XkbMajorVersion; 11188 major = XkbMajorVersion;
11186 minor = XkbMinorVersion; 11189 minor = XkbMinorVersion;
11187 if (!XkbQueryExtension (dpy, &op, &event, &error, &major, &minor)) 11190 if (!XkbQueryExtension (dpy, &op, &event, &error, &major, &minor))
11188 return Qnil; 11191 {
11192 UNBLOCK_INPUT;
11193 return Qnil;
11194 }
11189 11195
11190 have_keys = Qnil; 11196 have_keys = Qnil;
11191 kb = XkbGetKeyboard (dpy, XkbAllComponentsMask, XkbUseCoreKbd); 11197 kb = XkbGetMap (dpy, XkbAllMapComponentsMask, XkbUseCoreKbd);
11192 if (kb) 11198 if (kb)
11193 { 11199 {
11194 int delete_keycode = 0, backspace_keycode = 0, i; 11200 int delete_keycode = 0, backspace_keycode = 0, i;
11195 11201
11196 for (i = kb->min_key_code; 11202 if (XkbGetNames (dpy, XkbAllNamesMask, kb) == Success)
11197 (i < kb->max_key_code
11198 && (delete_keycode == 0 || backspace_keycode == 0));
11199 ++i)
11200 { 11203 {
11201 /* The XKB symbolic key names can be seen most easily 11204 for (i = kb->min_key_code;
11202 in the PS file generated by `xkbprint -label name $DISPLAY'. */ 11205 (i < kb->max_key_code
11203 if (bcmp ("DELE", kb->names->keys[i].name, 4) == 0) 11206 && (delete_keycode == 0 || backspace_keycode == 0));
11204 delete_keycode = i; 11207 ++i)
11205 else if (bcmp ("BKSP", kb->names->keys[i].name, 4) == 0) 11208 {
11206 backspace_keycode = i; 11209 /* The XKB symbolic key names can be seen most easily
11210 in the PS file generated by `xkbprint -label name $DISPLAY'. */
11211 if (bcmp ("DELE", kb->names->keys[i].name, 4) == 0)
11212 delete_keycode = i;
11213 else if (bcmp ("BKSP", kb->names->keys[i].name, 4) == 0)
11214 backspace_keycode = i;
11215 }
11216
11217 XkbFreeNames (kb, 0, True);
11207 } 11218 }
11208 11219
11209 XkbFreeKeyboard (kb, 0, True); 11220 XkbFreeClientMap (kb, 0, True);
11210 11221
11211 if (delete_keycode 11222 if (delete_keycode
11212 && backspace_keycode 11223 && backspace_keycode