]> git.eshelyaron.com Git - emacs.git/commitdiff
Restore pending_signals at a point in the DND event loop
authorPo Lu <luangruo@yahoo.com>
Sun, 17 Apr 2022 00:38:37 +0000 (08:38 +0800)
committerPo Lu <luangruo@yahoo.com>
Sun, 17 Apr 2022 00:38:37 +0000 (08:38 +0800)
* src/xterm.c (x_dnd_begin_drag_and_drop): Restore
pending_signals after unblock_input.

src/xterm.c

index b65de88674ff3f6d24f866c10f0073f986538331..89dd28c0d5802e6f9e0bdc85f263e3316f6e179a 100644 (file)
@@ -9465,6 +9465,7 @@ x_dnd_begin_drag_and_drop (struct frame *f, Time time, Atom xaction,
   XTextProperty prop;
   xm_drop_start_message dmsg;
   Lisp_Object frame_object, x, y, frame, local_value;
+  bool signals_were_pending;
 #ifdef HAVE_XKB
   XkbStateRec keyboard_state;
 #endif
@@ -9674,7 +9675,12 @@ x_dnd_begin_drag_and_drop (struct frame *f, Time time, Atom xaction,
                         &next_event, &finish, &hold_quit);
 #endif
 #endif
+      /* The unblock_input below might try to read input, but
+        XTread_socket does nothing inside a drag-and-drop event
+        loop, so don't let it clear the pending_signals flag.  */
+      signals_were_pending = pending_signals;
       unblock_input ();
+      pending_signals = signals_were_pending;
 
       if (x_dnd_movement_frame)
        {