<!-- ##### SECTION Title ##### -->
Drag and Drop

<!-- ##### SECTION Short_Description ##### -->
functions for controlling drag and drop handling.

<!-- ##### SECTION Long_Description ##### -->
<para>
These functions provide a low level interface for drag and drop.
The X backend of GDK supports both the Xdnd and Motif drag and drop protocols 
transparently, the Win32 backend supports the WM_DROPFILES protocol.
</para>
<para>
GTK+ provides a higher level abstraction based on top of these functions,
and so they are not normally needed in GTK+ applications.
See the <link linkend="gtk-Drag-and-Drop">Drag and Drop</link> section of
the GTK+ documentation for more information.
</para>

<!-- ##### SECTION See_Also ##### -->
<para>

</para>

<!-- ##### FUNCTION gdk_drag_get_selection ##### -->
<para>
Returns the selection atom for the current source window.
</para>

@context: a #GdkDragContext.
@Returns: the selection atom.


<!-- ##### FUNCTION gdk_drag_abort ##### -->
<para>
Aborts a drag without dropping. 
</para>
<para>
This function is called by the drag source.
</para>

@context: a #GdkDragContext.
@time: the timestamp for this operation.


<!-- ##### FUNCTION gdk_drop_reply ##### -->
<para>
Accepts or rejects a drop. 
</para>
<para>
This function is called by the drag destination in response
to a drop initiated by the drag source.
</para>

@context: a #GdkDragContext.
@ok: %TRUE if the drop is accepted.
@time: the timestamp for this operation.


<!-- ##### FUNCTION gdk_drag_context_new ##### -->
<para>
Creates a new #GdkDragContext.
</para>

@Returns: the newly created #GdkDragContext.


<!-- ##### FUNCTION gdk_drag_drop ##### -->
<para>
Drops on the current destination.
</para>
<para>
This function is called by the drag source.
</para>

@context: a #GdkDragContext.
@time: the timestamp for this operation.


<!-- ##### FUNCTION gdk_drag_find_window ##### -->
<para>
Finds the destination window and DND protocol to use at the
given pointer position. 
</para>
<para>
This function is called by the drag source to obtain the 
@dest_window and @protocol parameters for gdk_drag_motion().
</para>

@context: a #GdkDragContext.
@drag_window: a window which may be at the pointer position, but
  should be ignored, since it is put up by the drag source as an icon.
@x_root: the x position of the pointer in root coordinates.
@y_root: the y position of the pointer in root coordinates.
@dest_window: location to store the destination window in.
@protocol: location to store the DND protocol in.


<!-- ##### FUNCTION gdk_drag_context_ref ##### -->
<para>
Deprecated function; use g_object_ref() instead.
</para>

@context: a #GdkDragContext.


<!-- ##### FUNCTION gdk_drag_begin ##### -->
<para>
Starts a drag and creates a new drag context for it.
</para>
<para>
This function is called by the drag source.
</para>

@window: the source window for this drag.
@targets: the list of offered targets.
@Returns: a newly created #GdkDragContext.


<!-- ##### FUNCTION gdk_drag_motion ##### -->
<para>
Updates the drag context when the pointer moves or the 
set of actions changes.
</para>
<para>
This function is called by the drag source.
</para>

@context: a #GdkDragContext.
@dest_window: the new destination window, obtained by gdk_drag_find_window().
@protocol: the DND protocol in use, obtained by gdk_drag_find_window().
@x_root: the x position of the pointer in root coordinates.
@y_root: the y position of the pointer in root coordinates.
@suggested_action: the suggested action.
@possible_actions: the possible actions.
@time: the timestamp for this operation.
@Returns: FIXME


<!-- ##### FUNCTION gdk_drop_finish ##### -->
<para>
Ends the drag operation after a drop.
</para>
<para>
This function is called by the drag destination.
</para>

@context: a #GtkDragContext.
@success: %TRUE if the data was successfully received.
@time: the timestamp for this operation.


<!-- ##### FUNCTION gdk_drag_get_protocol ##### -->
<para>
Finds out the DND protocol supported by a window.
</para>

@xid: the X id of the destination window.
@protocol: location where the supported DND protocol is returned.
@Returns: the X id of the window where the drop should happen. This 
  may be @xid or the X id of a proxy window, or None if @xid doesn't
  support Drag and Drop.


<!-- ##### ENUM GdkDragProtocol ##### -->
<para>
Used in #GdkDragContext to indicate the protocol according to
which DND is done.
</para>

@GDK_DRAG_PROTO_MOTIF: The Motif DND protocol.
@GDK_DRAG_PROTO_XDND: The Xdnd protocol.
@GDK_DRAG_PROTO_ROOTWIN: An extension to the Xdnd protocol for
  unclaimed root window drops.
@GDK_DRAG_PROTO_NONE: no protocol.
@GDK_DRAG_PROTO_WIN32_DROPFILES: The simple WM_DROPFILES protocol.
@GDK_DRAG_PROTO_OLE2: The complex OLE2 DND protocol (not implemented).
@GDK_DRAG_PROTO_LOCAL: Intra-application DND.

<!-- ##### FUNCTION gdk_drag_context_unref ##### -->
<para>
Deprecated function; use g_object_unref() instead.
</para>

@context: a #GdkDragContext.


<!-- ##### STRUCT GdkDragContext ##### -->
<para>
A <structname>GdkDragContext</structname> holds information about a 
drag in progress. It is used on both source and destination sides.
</para>

@parent_instance: 
@protocol: the DND protocol which governs this drag.
@is_source: %TRUE if the context is used on the source side.
@source_window: the source of this drag.
@dest_window: the destination window of this drag.
@targets: a list of targets offered by the source.
@actions: a bitmask of actions proposed by the source when 
   @suggested_action is %GDK_ACTION_ASK.
@suggested_action: the action suggested by the source.
@action: the action chosen by the destination.
@start_time: a timestamp recording the start time of this drag.

<!-- ##### ENUM GdkDragAction ##### -->
<para>
Used in #GdkDragContext to indicate what the destination
should do with the dropped data.
</para>

@GDK_ACTION_DEFAULT: 
@GDK_ACTION_COPY: Copy the data.
@GDK_ACTION_MOVE: Move the data, i.e. first copy it, then delete
  it from the source using the DELETE target of the X selection protocol.
@GDK_ACTION_LINK: Add a link to the data. Note that this is only
  useful if source and destination agree on what it means.
@GDK_ACTION_PRIVATE: Special action which tells the source that the
  destination will do something that the source doesn't understand.
@GDK_ACTION_ASK: Ask the user what to do with the data.

<!-- ##### FUNCTION gdk_drag_status ##### -->
<para>
Selects one of the actions offered by the drag source.
</para>
<para>
This function is called by the drag destination in response to
gdk_drag_motion() called by the drag source.
</para>

@context: a #GdkDragContext.
@action: the selected action which will be taken when a drop happens, 
  or 0 to indicate that a drop will not be accepted.
@time: the timestamp for this operation.


