From fe6f1dfeb4ad4aaf517d1ac34435f3750f7f4569 Mon Sep 17 00:00:00 2001 From: Po Lu Date: Sat, 4 Jun 2022 20:00:40 +0800 Subject: [PATCH] Fix error during DND from both Emacs and GTK at the same time * src/xterm.c (x_dnd_get_target_window): Make mapping and releasing the COW atomic. This is to fix a rare bug when MPX (multi-pointer X) is in use and the user tries to drag from both GTK and Emacs at the same time using multiple seats. --- src/xterm.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/xterm.c b/src/xterm.c index edfb89070ff..34a40da548f 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -3524,10 +3524,13 @@ x_dnd_get_target_window (struct x_display_info *dpyinfo, dpyinfo->Xatom_NET_WM_CM_Sn) != None) { x_catch_errors (dpyinfo->display); + XGrabServer (dpyinfo->display); overlay_window = XCompositeGetOverlayWindow (dpyinfo->display, dpyinfo->root_window); XCompositeReleaseOverlayWindow (dpyinfo->display, dpyinfo->root_window); + XUngrabServer (dpyinfo->display); + if (!x_had_errors_p (dpyinfo->display)) { XGetWindowAttributes (dpyinfo->display, overlay_window, &attrs); @@ -3682,10 +3685,13 @@ x_dnd_get_target_window (struct x_display_info *dpyinfo, dpyinfo->Xatom_NET_WM_CM_Sn) != None) { x_catch_errors (dpyinfo->display); + XGrabServer (dpyinfo->display); overlay_window = XCompositeGetOverlayWindow (dpyinfo->display, dpyinfo->root_window); XCompositeReleaseOverlayWindow (dpyinfo->display, dpyinfo->root_window); + XUngrabServer (dpyinfo->display); + if (!x_had_errors_p (dpyinfo->display)) { XGetWindowAttributes (dpyinfo->display, overlay_window, &attrs); -- 2.39.2