diff options
| author | Po Lu | 2022-08-20 10:32:09 +0800 |
|---|---|---|
| committer | Po Lu | 2022-08-20 10:32:09 +0800 |
| commit | b2f9c4c6d4bf4a0f1f1f7342cb9de410f187c40c (patch) | |
| tree | b731a9d8a27297e77a08535b73399ca1396d7696 /src | |
| parent | 9a7b3673e09fe839163bf35e25e37e2ac62bc272 (diff) | |
| download | emacs-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.c | 11 |
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 |