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:
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.
- After the mouse has been released to trigger the drop, obtain 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)
Thanks to Jeroen van der Zijp for the idea.
To get this to work with xterm, you must add
to your .Xdefaults file.
Last updated on September 9, 1998
Back to the main page.