diff options
| author | Po Lu | 2022-06-19 12:22:12 +0800 |
|---|---|---|
| committer | Po Lu | 2022-06-19 12:22:12 +0800 |
| commit | ec6f6d23eb37ebd4fad17eb02730bf463aa27c5a (patch) | |
| tree | 4e5a9dc4478cf9c009a331cde03128c0c093d70d | |
| parent | fd853c71a958e3156014378fdd145e6e4d8c2717 (diff) | |
| download | emacs-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.el | 75 |
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))))))) |