aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPo Lu2022-06-19 12:22:12 +0800
committerPo Lu2022-06-19 12:22:12 +0800
commitec6f6d23eb37ebd4fad17eb02730bf463aa27c5a (patch)
tree4e5a9dc4478cf9c009a331cde03128c0c093d70d
parentfd853c71a958e3156014378fdd145e6e4d8c2717 (diff)
downloademacs-ec6f6d23eb37ebd4fad17eb02730bf463aa27c5a.tar.gz
emacs-ec6f6d23eb37ebd4fad17eb02730bf463aa27c5a.zip
Fix XDND from Firefox again
* lisp/x-dnd.el (x-dnd-handle-xdnd): Prevent nil from appearing in format 32 list. (x-dnd-handle-motif): Send reply if the user quit out of the drop handler as well.
-rw-r--r--lisp/x-dnd.el75
1 files changed, 39 insertions, 36 deletions
diff --git a/lisp/x-dnd.el b/lisp/x-dnd.el
index d4aa68a10d4..22277033f52 100644
--- a/lisp/x-dnd.el
+++ b/lisp/x-dnd.el
@@ -636,24 +636,26 @@ FORMAT is 32 (not used). MESSAGE is the data part of an XClientMessageEvent."
636 timestamp))) 636 timestamp)))
637 success action) 637 success action)
638 (x-display-set-last-user-time timestamp) 638 (x-display-set-last-user-time timestamp)
639 (setq action (if value 639 (unwind-protect
640 (condition-case info 640 (setq action (if value
641 (x-dnd-drop-data event frame window value 641 (condition-case info
642 (x-dnd-current-type window)) 642 (x-dnd-drop-data
643 (error 643 event frame window value
644 (message "Error: %s" info) 644 (x-dnd-current-type window))
645 nil)))) 645 (error
646 (setq success (if action 1 0)) 646 (message "Error: %s" info)
647 (when (>= version 2) 647 nil))))
648 (x-send-client-message 648 (setq success (if action 1 0))
649 frame dnd-source frame "XdndFinished" 32 649 (when (>= version 2)
650 (list (string-to-number 650 (x-send-client-message
651 (frame-parameter frame 'outer-window-id)) 651 frame dnd-source frame "XdndFinished" 32
652 (if (>= version 5) success 0) ;; 1 = Success, 0 = Error 652 (list (string-to-number
653 (when (>= version 5) 653 (frame-parameter frame 'outer-window-id))
654 (if (not success) 0 654 (if (>= version 5) success 0) ;; 1 = Success, 0 = Error
655 (car (rassoc action 655 (if (or (not success) (< version 5)) 0
656 x-dnd-xdnd-to-action))))))) 656 (or (car (rassoc action
657 x-dnd-xdnd-to-action))
658 0))))))
657 (x-dnd-forget-drop window))) 659 (x-dnd-forget-drop window)))
658 660
659 (t (error "Unknown XDND message %s %s" message data)))) 661 (t (error "Unknown XDND message %s %s" message data))))
@@ -981,24 +983,25 @@ Return a vector of atoms containing the selection targets."
981 "_MOTIF_DRAG_AND_DROP_MESSAGE" 983 "_MOTIF_DRAG_AND_DROP_MESSAGE"
982 8 984 8
983 reply) 985 reply)
984 (setq action 986 (unwind-protect
985 (when (and reply-action atom-name) 987 (setq action
986 (let* ((value (x-get-selection-internal 988 (when (and reply-action atom-name)
987 (intern atom-name) 989 (let* ((value (x-get-selection-internal
988 (intern (x-dnd-current-type window)) 990 (intern atom-name)
989 timestamp))) 991 (intern (x-dnd-current-type window))
990 (when value 992 timestamp)))
991 (condition-case info 993 (when value
992 (x-dnd-drop-data event frame window value 994 (condition-case info
993 (x-dnd-current-type window)) 995 (x-dnd-drop-data event frame window value
994 (error 996 (x-dnd-current-type window))
995 (message "Error: %s" info) 997 (error
996 nil)))))) 998 (message "Error: %s" info)
997 (x-get-selection-internal 999 nil))))))
998 (intern atom-name) 1000 (x-get-selection-internal
999 (if action 'XmTRANSFER_SUCCESS 'XmTRANSFER_FAILURE) 1001 (intern atom-name)
1000 timestamp) 1002 (if action 'XmTRANSFER_SUCCESS 'XmTRANSFER_FAILURE)
1001 (x-dnd-forget-drop frame)))) 1003 timestamp)
1004 (x-dnd-forget-drop frame)))))
1002 1005
1003 (t (message "Unknown Motif drag-and-drop message: %s" 1006 (t (message "Unknown Motif drag-and-drop message: %s"
1004 (logand (aref data 0) #x3f))))))) 1007 (logand (aref data 0) #x3f)))))))