Drag-and-Drop Protocol for the X Window System
Comparison to other protocols
XDND was developed because the other DND protocols that have been developed do not satisfy all the requirements discussed in the introductory section of the XDND specification.
Note that since XDND uses a special window property (XdndAware) to signify compliance, it can coexist with all other protocols. Of course, it is our opinion that XDND makes at least most other protocols obsolete.
Please also note that, since some of the protocols discussed here are also under development, this information may be out of date, or we may have simply missed something while scanning their web sites and documentation. If so, please let us know.
This page was last updated on April 23, 1999
Motif
-
Far more complicated than necessary, especially by requiring lots of globally shared information.
-
The data stored on the motifDragWindow is unsafe because malfunctioning programs can corrupt it. It will also pile up since nobody is required to clean up when they quit.
-
Creating the motifDragWindow and accessing its data is not safe from race conditions. (unless you use XGrabServer(display), which is not much of an improvement, performance-wise)
-
If the application that created the motifDragWindow crashes, the window will disappear but the _MOTIF_DRAG_WINDOW property on the root window will remain, thereby setting a trap for all other programs. (unless you use XSetCloseDownMode(display, RetainPermanent))
-
Actions are limited to only copy/move/link.
-
Does not require feedback to the user while dragging.
OffiX
-
Does not provide feedback to the user while dragging.
-
This in turn means that the drag source usually won't scroll when it should.
-
Allows only a single data type to be dropped, so the target is not allowed to pick the format that it prefers.
-
Requires the use of MIME encoding/decoding to support data types other than a predefined set.
-
Does not provide any way to specify the action to be performed after the drop.
-
Not compatible with Motif DND.
Amulet
Amulet's Drag-and-Drop system is apparently only for use inside a single application. Their documentation only describes their API.