emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master fea97e2989: Try harder to own DND selections


From: Po Lu
Subject: master fea97e2989: Try harder to own DND selections
Date: Sat, 9 Apr 2022 21:31:52 -0400 (EDT)

branch: master
commit fea97e29895ebe7ca1cc17095766d7c30f9884ac
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>

    Try harder to own DND selections
    
    * src/xterm.c (x_dnd_do_unsupported_drop): Fix computation of
    local value.
    (x_dnd_begin_drag_and_drop): Try to own the selection if we do
    have a local value.
---
 src/xterm.c | 24 ++++++++++++++++--------
 1 file changed, 16 insertions(+), 8 deletions(-)

diff --git a/src/xterm.c b/src/xterm.c
index 0a2c3c5863..14a1506604 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -2856,10 +2856,11 @@ x_dnd_do_unsupported_drop (struct x_display_info 
*dpyinfo,
       root_y = dest_y;
     }
 
-  x_own_selection (QPRIMARY,
-                  assq_no_quit (QPRIMARY,
-                                dpyinfo->terminal->Vselection_alist),
-                  frame);
+  if (CONSP (value))
+    x_own_selection (QPRIMARY, Fnth (make_fixnum (1), value),
+                    frame);
+  else
+    x_own_selection (QPRIMARY, Qnil, frame);
 
   event.xbutton.window = child;
   event.xbutton.x = dest_x;
@@ -9369,20 +9370,27 @@ x_dnd_begin_drag_and_drop (struct frame *f, Time time, 
Atom xaction,
   ptrdiff_t i, end, fill;
   XTextProperty prop;
   xm_drop_start_message dmsg;
-  Lisp_Object frame_object, x, y;
+  Lisp_Object frame_object, x, y, frame, local_value;
 
   if (!FRAME_VISIBLE_P (f))
     error ("Frame is invisible");
 
+  XSETFRAME (frame, f);
+  local_value = assq_no_quit (QXdndSelection,
+                             FRAME_TERMINAL (f)->Vselection_alist);
+
   if (x_dnd_in_progress || x_dnd_waiting_for_finish)
     error ("A drag-and-drop session is already in progress");
 
+  if (CONSP (local_value))
+    x_own_selection (QXdndSelection,
+                    Fnth (make_fixnum (1), local_value), frame);
+  else
+    error ("No local value for XdndSelection");
+
   ltimestamp = x_timestamp_for_selection (FRAME_DISPLAY_INFO (f),
                                          QXdndSelection);
 
-  if (NILP (ltimestamp))
-    error ("No local value for XdndSelection");
-
   if (BIGNUMP (ltimestamp))
     x_dnd_selection_timestamp = bignum_to_intmax (ltimestamp);
   else



reply via email to

[Prev in Thread] Current Thread [Next in Thread]