Drag-and-Drop Protocol for the X Window System
Dropping on the root window
While any program can draw to the root window, it does not seem possible for
more than one program to accept drops on the root window. To prepare for this,
the program must do the following:
- Call XGrabServer() to avoid race conditions.
- Check for XdndProxy on the root window. If it exists and is valid (Refer
to the Technical Details section of the main XDND protocol.),
give up because somebody else is already catching root window drops.
Otherwise, set XdndProxy to point to your proxy window, and set XdndProxy on
your proxy window to point to itself.
- Call XUngrabServer().
Note that only applications that implement XDND v4 or later will be able to
drop on the root window. In such applications, no special code is required.
When the program no longer wants to accept drops on the root window, simply
remove XdndProxy from the root window. One does not need to call
XGrabServer() because this is a single operation.
Allowing the source to do the work
Programs may want implement private
behaviors when dropping on the root window. To allow for this, an application
that accepts drops on the root window should always be willing to accept drops
of the special type application/x-rootwindow-drop, along with any other data
types that it accepts. The target application should request this type if the
source lists it and no other acceptable type is available. In response to a
request for this type, the source should send empty data of type NULL to the
target (just like for the X Selection target DELETE) and then perform its
private actions.
Developed by Owen Taylor at RedHat.
Last updated on May 1, 1999
Back to the main
page.