aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPo Lu2022-08-20 10:32:09 +0800
committerPo Lu2022-08-20 10:32:09 +0800
commitb2f9c4c6d4bf4a0f1f1f7342cb9de410f187c40c (patch)
treeb731a9d8a27297e77a08535b73399ca1396d7696 /src
parent9a7b3673e09fe839163bf35e25e37e2ac62bc272 (diff)
downloademacs-b2f9c4c6d4bf4a0f1f1f7342cb9de410f187c40c.tar.gz
emacs-b2f9c4c6d4bf4a0f1f1f7342cb9de410f187c40c.zip
Fix crash when the keymap changes
* src/xterm.c (handle_one_xevent): Call XkbRefreshKeyboardMapping first before trying to update the map.
Diffstat (limited to 'src')
-rw-r--r--src/xterm.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/src/xterm.c b/src/xterm.c
index 12c7b7d4dcc..39e5a8e1861 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -23027,6 +23027,8 @@ handle_one_xevent (struct x_display_info *dpyinfo,
23027 if (xkbevent->any.xkb_type == XkbNewKeyboardNotify 23027 if (xkbevent->any.xkb_type == XkbNewKeyboardNotify
23028 || xkbevent->any.xkb_type == XkbMapNotify) 23028 || xkbevent->any.xkb_type == XkbMapNotify)
23029 { 23029 {
23030 XkbRefreshKeyboardMapping (&xkbevent->map);
23031
23030 if (dpyinfo->xkb_desc) 23032 if (dpyinfo->xkb_desc)
23031 { 23033 {
23032 if (XkbGetUpdatedMap (dpyinfo->display, 23034 if (XkbGetUpdatedMap (dpyinfo->display,
@@ -23035,11 +23037,9 @@ handle_one_xevent (struct x_display_info *dpyinfo,
23035 | XkbModifierMapMask 23037 | XkbModifierMapMask
23036 | XkbVirtualModsMask), 23038 | XkbVirtualModsMask),
23037 dpyinfo->xkb_desc) == Success) 23039 dpyinfo->xkb_desc) == Success)
23038 { 23040 XkbGetNames (dpyinfo->display,
23039 XkbGetNames (dpyinfo->display, 23041 XkbGroupNamesMask | XkbVirtualModNamesMask,
23040 XkbGroupNamesMask | XkbVirtualModNamesMask, 23042 dpyinfo->xkb_desc);
23041 dpyinfo->xkb_desc);
23042 }
23043 else 23043 else
23044 { 23044 {
23045 XkbFreeKeyboard (dpyinfo->xkb_desc, XkbAllComponentsMask, True); 23045 XkbFreeKeyboard (dpyinfo->xkb_desc, XkbAllComponentsMask, True);
@@ -23061,7 +23061,6 @@ handle_one_xevent (struct x_display_info *dpyinfo,
23061 dpyinfo->xkb_desc); 23061 dpyinfo->xkb_desc);
23062 } 23062 }
23063 23063
23064 XkbRefreshKeyboardMapping (&xkbevent->map);
23065 x_find_modifier_meanings (dpyinfo); 23064 x_find_modifier_meanings (dpyinfo);
23066 } 23065 }
23067 else if (x_dnd_in_progress 23066 else if (x_dnd_in_progress