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;