summaryrefslogtreecommitdiff
path: root/lisp/select.el
diff options
context:
space:
mode:
authorPo Lu <luangruo@yahoo.com>2022-03-31 17:21:37 +0800
committerPo Lu <luangruo@yahoo.com>2022-03-31 17:21:37 +0800
commit1d4306a8a770cb73db3b39301ee41e15f9e3656f (patch)
treeb40831da1ca6a8aaf016e2d4e1c556d4ff22dfc9 /lisp/select.el
parent6f973faa912a5ac1ba643c6f5deb0c02baa0ba6d (diff)
downloademacs-1d4306a8a770cb73db3b39301ee41e15f9e3656f.tar.gz
Implement Motif drop protocol
This is the second most widely implemented drag-and-drop protocol on X Windows, but seems to have some unsolvable problems (i.e. stuff will keep accumulating in the drag window as long the target lists keep changing.) The implementation is not yet complete and doesn't work with some programs. * lisp/select.el (xselect-convert-xm-special): New functions. (selection-converter-alist): Add new converters. * lisp/x-dnd.el (x-dnd-handle-motif): Ignore messages sent by the receiver. * src/xterm.c (xm_targets_table_byte_order): New enum; (SWAPCARD32, SWAPCARD16): New macros. (xm_targets_table_rec, xm_drop_start_message) (xm_drag_initiator_info, xm_drag_receiver_info): New structures. (XM_DRAG_SIDE_EFFECT, xm_read_targets_table_header) (xm_read_targets_table_rec, xm_find_targets_table_idx) (x_atoms_compare, xm_write_targets_table) (xm_write_drag_initiator_info, xm_get_drag_window) (xm_setup_dnd_targets, xm_send_drop_message) (xm_read_drag_receiver_info): New functions. (x_dnd_compute_toplevels): Correctly free some temp data. (x_dnd_get_window_proxy, x_dnd_get_window_proto) (x_set_frame_alpha): Likewise. (handle_one_xevent): If the window has no XDND proto but has motif drag receiver data, send a motif drop protocol request. (x_term_init): New atoms for Motif DND support. * src/xterm.h (struct x_display_info): Add new atoms.
Diffstat (limited to 'lisp/select.el')
-rw-r--r--lisp/select.el7
1 files changed, 6 insertions, 1 deletions
diff --git a/lisp/select.el b/lisp/select.el
index 7b9475a6402..ee65678c69d 100644
--- a/lisp/select.el
+++ b/lisp/select.el
@@ -655,6 +655,9 @@ VALUE is the local selection value of SELECTION."
(stringp value)
(file-exists-p value)))
+(defun xselect-convert-xm-special (_selection _type _value)
+ "")
+
(setq selection-converter-alist
'((TEXT . xselect-convert-to-string)
(COMPOUND_TEXT . xselect-convert-to-string)
@@ -679,7 +682,9 @@ VALUE is the local selection value of SELECTION."
(ATOM . xselect-convert-to-atom)
(INTEGER . xselect-convert-to-integer)
(SAVE_TARGETS . xselect-convert-to-save-targets)
- (_EMACS_INTERNAL . xselect-convert-to-identity)))
+ (_EMACS_INTERNAL . xselect-convert-to-identity)
+ (XmTRANSFER_SUCCESS . xselect-convert-xm-special)
+ (XmTRANSFER_FAILURE . xselect-convert-xm-special)))
(provide 'select)