diff options
-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, if (XGetSelectionOwner (dpyinfo->display, dpyinfo->Xatom_NET_WM_CM_Sn) != None) { + x_catch_errors (dpyinfo->display); overlay_window = XCompositeGetOverlayWindow (dpyinfo->display, dpyinfo->root_window); XCompositeReleaseOverlayWindow (dpyinfo->display, dpyinfo->root_window); - XGetWindowAttributes (dpyinfo->display, overlay_window, &attrs); - - if (attrs.map_state == IsViewable) + if (!x_had_errors_p (dpyinfo->display)) { - proxy = x_dnd_get_window_proxy (dpyinfo, overlay_window); + XGetWindowAttributes (dpyinfo->display, overlay_window, &attrs); - if (proxy != None) + if (attrs.map_state == IsViewable) { - proto = x_dnd_get_window_proto (dpyinfo, proxy); + proxy = x_dnd_get_window_proxy (dpyinfo, overlay_window); - if (proto != -1) + if (proxy != None) { - *proto_out = proto; - return proxy; + proto = x_dnd_get_window_proto (dpyinfo, proxy); + + if (proto != -1) + { + *proto_out = proto; + x_uncatch_errors_after_check (); + + return proxy; + } } } } + x_uncatch_errors_after_check (); } } |