diff options
| author | Po Lu | 2022-03-20 11:23:11 +0800 |
|---|---|---|
| committer | Po Lu | 2022-03-20 11:23:11 +0800 |
| commit | 629ac0803f29dcc9b5be5f704c0892b121f6adf5 (patch) | |
| tree | 4e12d06926e4d68a8c08e17ebd2a969249752023 /src | |
| parent | 77f5eb874b70ab78ca4daf3adf30f18d002db439 (diff) | |
| download | emacs-629ac0803f29dcc9b5be5f704c0892b121f6adf5.tar.gz emacs-629ac0803f29dcc9b5be5f704c0892b121f6adf5.zip | |
Fix crash on some compositing managers
* src/xterm.c (x_dnd_get_target_window): Catch errors around
CompositeReleaseOverlayWindow.
Diffstat (limited to 'src')
| -rw-r--r-- | src/xterm.c | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/src/xterm.c b/src/xterm.c index 3e888407b3b..3e7b51e4db3 100644 --- a/src/xterm.c +++ b/src/xterm.c | |||
| @@ -911,27 +911,34 @@ x_dnd_get_target_window (struct x_display_info *dpyinfo, | |||
| 911 | if (XGetSelectionOwner (dpyinfo->display, | 911 | if (XGetSelectionOwner (dpyinfo->display, |
| 912 | dpyinfo->Xatom_NET_WM_CM_Sn) != None) | 912 | dpyinfo->Xatom_NET_WM_CM_Sn) != None) |
| 913 | { | 913 | { |
| 914 | x_catch_errors (dpyinfo->display); | ||
| 914 | overlay_window = XCompositeGetOverlayWindow (dpyinfo->display, | 915 | overlay_window = XCompositeGetOverlayWindow (dpyinfo->display, |
| 915 | dpyinfo->root_window); | 916 | dpyinfo->root_window); |
| 916 | XCompositeReleaseOverlayWindow (dpyinfo->display, | 917 | XCompositeReleaseOverlayWindow (dpyinfo->display, |
| 917 | dpyinfo->root_window); | 918 | dpyinfo->root_window); |
| 918 | XGetWindowAttributes (dpyinfo->display, overlay_window, &attrs); | 919 | if (!x_had_errors_p (dpyinfo->display)) |
| 919 | |||
| 920 | if (attrs.map_state == IsViewable) | ||
| 921 | { | 920 | { |
| 922 | proxy = x_dnd_get_window_proxy (dpyinfo, overlay_window); | 921 | XGetWindowAttributes (dpyinfo->display, overlay_window, &attrs); |
| 923 | 922 | ||
| 924 | if (proxy != None) | 923 | if (attrs.map_state == IsViewable) |
| 925 | { | 924 | { |
| 926 | proto = x_dnd_get_window_proto (dpyinfo, proxy); | 925 | proxy = x_dnd_get_window_proxy (dpyinfo, overlay_window); |
| 927 | 926 | ||
| 928 | if (proto != -1) | 927 | if (proxy != None) |
| 929 | { | 928 | { |
| 930 | *proto_out = proto; | 929 | proto = x_dnd_get_window_proto (dpyinfo, proxy); |
| 931 | return proxy; | 930 | |
| 931 | if (proto != -1) | ||
| 932 | { | ||
| 933 | *proto_out = proto; | ||
| 934 | x_uncatch_errors_after_check (); | ||
| 935 | |||
| 936 | return proxy; | ||
| 937 | } | ||
| 932 | } | 938 | } |
| 933 | } | 939 | } |
| 934 | } | 940 | } |
| 941 | x_uncatch_errors_after_check (); | ||
| 935 | } | 942 | } |
| 936 | } | 943 | } |
| 937 | 944 | ||