]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix phantom drag-and-drop targets showing up in some programs
authorPo Lu <luangruo@yahoo.com>
Sun, 12 Jun 2022 08:41:40 +0000 (16:41 +0800)
committerPo Lu <luangruo@yahoo.com>
Sun, 12 Jun 2022 08:42:10 +0000 (16:42 +0800)
* src/xterm.c (x_dnd_cleanup_drag_and_drop)
(x_dnd_begin_drag_and_drop): Delete XdndTypeList if it was set
after the DND operation completes.  Some programs apparently
think its presence on the drag source means there are more than
3 targets.

src/xterm.c

index 842de55e2f633cd7525cf62f44573df2cbc790e0..5ec6912fbd73a8387e48be8bd72279ea13678e98 100644 (file)
@@ -4240,6 +4240,12 @@ x_dnd_cleanup_drag_and_drop (void *frame)
   if (x_dnd_motif_setup_p)
     XDeleteProperty (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
                     FRAME_DISPLAY_INFO (f)->Xatom_XdndSelection);
+
+  /* Remove any type list set as well.  */
+  if (x_dnd_init_type_lists && x_dnd_n_targets > 3)
+    XDeleteProperty (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
+                    FRAME_DISPLAY_INFO (f)->Xatom_XdndTypeList);
+
   unblock_input ();
 
   x_dnd_frame = NULL;
@@ -11263,6 +11269,12 @@ x_dnd_begin_drag_and_drop (struct frame *f, Time time, Atom xaction,
                XDeleteProperty (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
                                 FRAME_DISPLAY_INFO (f)->Xatom_XdndSelection);
 
+
+             /* Remove any type list set as well.  */
+             if (x_dnd_init_type_lists && x_dnd_n_targets > 3)
+               XDeleteProperty (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
+                                FRAME_DISPLAY_INFO (f)->Xatom_XdndTypeList);
+
              /* Call kbd_buffer_store event, which calls
                 handle_interrupt and sets `last-event-frame' along
                 with various other things.  */
@@ -11348,6 +11360,12 @@ x_dnd_begin_drag_and_drop (struct frame *f, Time time, Atom xaction,
              if (x_dnd_motif_setup_p)
                XDeleteProperty (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
                                 FRAME_DISPLAY_INFO (f)->Xatom_XdndSelection);
+
+
+             /* Remove any type list set as well.  */
+             if (x_dnd_init_type_lists && x_dnd_n_targets > 3)
+               XDeleteProperty (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
+                                FRAME_DISPLAY_INFO (f)->Xatom_XdndTypeList);
              unblock_input ();
 
              quit ();
@@ -11386,6 +11404,11 @@ x_dnd_begin_drag_and_drop (struct frame *f, Time time, Atom xaction,
   if (x_dnd_motif_setup_p)
     XDeleteProperty (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
                     FRAME_DISPLAY_INFO (f)->Xatom_XdndSelection);
+
+  /* Remove any type list set as well.  */
+  if (x_dnd_init_type_lists && x_dnd_n_targets > 3)
+    XDeleteProperty (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
+                    FRAME_DISPLAY_INFO (f)->Xatom_XdndTypeList);
   unblock_input ();
 
   if (x_dnd_return_frame == 3