From: Po Lu Date: Thu, 24 Mar 2022 03:41:29 +0000 (+0800) Subject: Fix an infinite loop if the window manager pings Emacs during DND X-Git-Tag: emacs-29.0.90~1931^2~950 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=ebd5725e0b2f7e1dcf6dcb068bef638edd7f0cb4;p=emacs.git Fix an infinite loop if the window manager pings Emacs during DND * src/xterm.c (handle_one_xevent): Work around _NET_WM_PING infinite loop during drag and drop. --- diff --git a/src/xterm.c b/src/xterm.c index 0543f152eda..fcc1f55ccb6 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -11014,7 +11014,19 @@ handle_one_xevent (struct x_display_info *dpyinfo, send_event.xclient.window = dpyinfo->root_window; XSendEvent (dpyinfo->display, dpyinfo->root_window, False, - SubstructureRedirectMask | SubstructureNotifyMask, + /* FIXME: handling window stacking changes + during drag-and-drop requires Emacs to + select for SubstructureNotifyMask, + which in turn causes the message to be + sent to Emacs itself using the event + mask specified by the EWMH. To avoid + an infinite loop, just use + SubstructureRedirectMask when a + drag-and-drop operation is in + progress. */ + ((x_dnd_in_progress || x_dnd_waiting_for_finish) + ? SubstructureRedirectMask + : SubstructureRedirectMask | SubstructureNotifyMask), &send_event); *finish = X_EVENT_DROP;