emacs-diffs
[Top][All Lists]
Advanced

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

master 5cbe50a4fb 2/3: Make DND from other GTK programs work on Wayland


From: Po Lu
Subject: master 5cbe50a4fb 2/3: Make DND from other GTK programs work on Wayland
Date: Thu, 23 Jun 2022 01:58:52 -0400 (EDT)

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

    Make DND from other GTK programs work on Wayland
    
    * lisp/pgtk-dnd.el (pgtk-dnd-handle-gdk): Try to keep the
    selection contents in extra-data during a motion event.
---
 lisp/pgtk-dnd.el | 22 +++++++++++++++++-----
 1 file changed, 17 insertions(+), 5 deletions(-)

diff --git a/lisp/pgtk-dnd.el b/lisp/pgtk-dnd.el
index 2aaf4c4e97..df267549d7 100644
--- a/lisp/pgtk-dnd.el
+++ b/lisp/pgtk-dnd.el
@@ -373,15 +373,27 @@ message."
              (time (nth 2 client-message))
              (action-type (pgtk-dnd-maybe-call-test-function window
                                                              action)))
+        ;; Get the selection contents now.  GdkWaylandSelection
+        ;; becomes unavailable immediately after `drag-drop' is sent.
+        (let* ((current-type (pgtk-dnd-current-type window))
+               (current-action-type (car-safe (aref state 6))))
+          (when (and current-type
+                     (not (equal current-action-type action-type)))
+            (aset state 6 (cons action-type
+                                (pgtk-get-selection-internal
+                                 (nth 1 client-message)
+                                 (intern current-type))))))
         (pgtk-update-drop-status (car action-type) time)
         (dnd-handle-movement (event-start event)))))
    ((eq (car client-message) 'quote) ; drag-drop
-    (let* ((timestamp (nth 2 client-message))
+    (let* ((state (pgtk-dnd-get-state-for-frame frame))
+           (timestamp (nth 2 client-message))
            (value (and (pgtk-dnd-current-type window)
-                       (pgtk-get-selection-internal
-                        (nth 1 client-message)
-                        (intern (pgtk-dnd-current-type window))
-                        timestamp)))
+                       (or (cdr-safe (aref state 6))
+                           (pgtk-get-selection-internal
+                            (nth 1 client-message)
+                            (intern (pgtk-dnd-current-type window))
+                            timestamp))))
            action)
       (unwind-protect
           (setq action (when value



reply via email to

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