Drag-And-Drop Protocol for the X Window System
Dropping on windows that do not support XDND
Since middle clicking is the universal shortcut for pasting in X, one can
drop data into a window that does not support XDND by:
- After the mouse has been released to trigger the drop, grab ownership of
XA_PRIMARY.
- Send a ButtonPress event and then a ButtonRelease event to the deepest
subwindow containing the mouse to simulate a middle click. The times for
these events should be the time of the actual button release +1 and +2,
respectively. These values will not be used by anybody else, so one can
unambiguously recognize the resulting XConvertSelection() request.
- If a request for XA_PRIMARY arrives bearing the timestamp of either the
ButtonPress or the ButtonRelease event, treat it as a request for
XdndSelection. Note that you must use the X data types instead of the MIME
types in this case. (e.g. XA_STRING instead of text/plain)
Since text is usually the only data that can be pasted into older programs that
do not support XDND (e.g. xterm and emacs), it is a good idea
to only use the above trick when dragging text. As an example, if one drags
anything else and fakes a middle click in xterm, it will paste the
contents of XA_SECONDARY, which is not what the user wants.
Thanks to Jeroen van der Zijp [jvz@cfdrc.com] for the idea.
To get this to work with xterm, you must add
XTerm.VT100.allowSendEvents: True
to your .Xdefaults file.
Last updated on September 9, 1998
Back to the main page.