diff options
author | Po Lu <luangruo@yahoo.com> | 2022-03-31 17:21:37 +0800 |
---|---|---|
committer | Po Lu <luangruo@yahoo.com> | 2022-03-31 17:21:37 +0800 |
commit | 1d4306a8a770cb73db3b39301ee41e15f9e3656f (patch) | |
tree | b40831da1ca6a8aaf016e2d4e1c556d4ff22dfc9 /lisp/select.el | |
parent | 6f973faa912a5ac1ba643c6f5deb0c02baa0ba6d (diff) | |
download | emacs-1d4306a8a770cb73db3b39301ee41e15f9e3656f.tar.gz emacs-1d4306a8a770cb73db3b39301ee41e15f9e3656f.tar.bz2 emacs-1d4306a8a770cb73db3b39301ee41e15f9e3656f.zip |
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.el | 7 |
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) |