Drag and Drop

Drag and Drop — Functions for controlling drag and drop handling

Synopsis


#include <gdk/gdk.h>

GdkAtom             gdk_drag_get_selection              (GdkDragContext *context);
void                gdk_drag_abort                      (GdkDragContext *context,
                                                         guint32 time_);
void                gdk_drop_reply                      (GdkDragContext *context,
                                                         gboolean ok,
                                                         guint32 time_);
GdkDragContext*     gdk_drag_context_new                (void);
void                gdk_drag_drop                       (GdkDragContext *context,
                                                         guint32 time_);
void                gdk_drag_find_window                (GdkDragContext *context,
                                                         GdkWindow *drag_window,
                                                         gint x_root,
                                                         gint y_root,
                                                         GdkWindow **dest_window,
                                                         GdkDragProtocol *protocol);
void                gdk_drag_find_window_for_screen     (GdkDragContext *context,
                                                         GdkWindow *drag_window,
                                                         GdkScreen *screen,
                                                         gint x_root,
                                                         gint y_root,
                                                         GdkWindow **dest_window,
                                                         GdkDragProtocol *protocol);
void                gdk_drag_context_ref                (GdkDragContext *context);
GdkDragContext*     gdk_drag_begin                      (GdkWindow *window,
                                                         GList *targets);
gboolean            gdk_drag_motion                     (GdkDragContext *context,
                                                         GdkWindow *dest_window,
                                                         GdkDragProtocol protocol,
                                                         gint x_root,
                                                         gint y_root,
                                                         GdkDragAction suggested_action,
                                                         GdkDragAction possible_actions,
                                                         guint32 time_);
void                gdk_drop_finish                     (GdkDragContext *context,
                                                         gboolean success,
                                                         guint32 time_);
guint32             gdk_drag_get_protocol               (guint32 xid,
                                                         GdkDragProtocol *protocol);
guint32             gdk_drag_get_protocol_for_display   (GdkDisplay *display,
                                                         guint32 xid,
                                                         GdkDragProtocol *protocol);
enum                GdkDragProtocol;
void                gdk_drag_context_unref              (GdkDragContext *context);
                    GdkDragContext;
enum                GdkDragAction;
void                gdk_drag_status                     (GdkDragContext *context,
                                                         GdkDragAction action,
                                                         guint32 time_);
gboolean            gdk_drag_drop_succeeded             (GdkDragContext *context);

Description

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.

GTK+ provides a higher level abstraction based on top of these functions, and so they are not normally needed in GTK+ applications. See the Drag and Drop section of the GTK+ documentation for more information.

Details

gdk_drag_get_selection ()

GdkAtom             gdk_drag_get_selection              (GdkDragContext *context);

Returns the selection atom for the current source window.

context : a GdkDragContext.
Returns : the selection atom.

gdk_drag_abort ()

void                gdk_drag_abort                      (GdkDragContext *context,
                                                         guint32 time_);

Aborts a drag without dropping.

This function is called by the drag source.

context : a GdkDragContext.
time_ : the timestamp for this operation.

gdk_drop_reply ()

void                gdk_drop_reply                      (GdkDragContext *context,
                                                         gboolean ok,
                                                         guint32 time_);

Accepts or rejects a drop.

This function is called by the drag destination in response to a drop initiated by the drag source.

context : a GdkDragContext.
ok : TRUE if the drop is accepted.
time_ : the timestamp for this operation.

gdk_drag_context_new ()

GdkDragContext*     gdk_drag_context_new                (void);

Creates a new GdkDragContext.

Returns : the newly created GdkDragContext.

gdk_drag_drop ()

void                gdk_drag_drop                       (GdkDragContext *context,
                                                         guint32 time_);

Drops on the current destination.

This function is called by the drag source.

context : a GdkDragContext.
time_ : the timestamp for this operation.

gdk_drag_find_window ()

void                gdk_drag_find_window                (GdkDragContext *context,
                                                         GdkWindow *drag_window,
                                                         gint x_root,
                                                         gint y_root,
                                                         GdkWindow **dest_window,
                                                         GdkDragProtocol *protocol);

Finds the destination window and DND protocol to use at the given pointer position.

This function is called by the drag source to obtain the dest_window and protocol parameters for gdk_drag_motion().

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.

gdk_drag_find_window_for_screen ()

void                gdk_drag_find_window_for_screen     (GdkDragContext *context,
                                                         GdkWindow *drag_window,
                                                         GdkScreen *screen,
                                                         gint x_root,
                                                         gint y_root,
                                                         GdkWindow **dest_window,
                                                         GdkDragProtocol *protocol);

Finds the destination window and DND protocol to use at the given pointer position.

This function is called by the drag source to obtain the dest_window and protocol parameters for gdk_drag_motion().

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.
screen : the screen where the destination window is sought.
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.

Since 2.2


gdk_drag_context_ref ()

void                gdk_drag_context_ref                (GdkDragContext *context);

Warning

gdk_drag_context_ref is deprecated and should not be used in newly-written code.

Deprecated function; use g_object_ref() instead.

context : a GdkDragContext.

gdk_drag_begin ()

GdkDragContext*     gdk_drag_begin                      (GdkWindow *window,
                                                         GList *targets);

Starts a drag and creates a new drag context for it.

This function is called by the drag source.

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

gdk_drag_motion ()

gboolean            gdk_drag_motion                     (GdkDragContext *context,
                                                         GdkWindow *dest_window,
                                                         GdkDragProtocol protocol,
                                                         gint x_root,
                                                         gint y_root,
                                                         GdkDragAction suggested_action,
                                                         GdkDragAction possible_actions,
                                                         guint32 time_);

Updates the drag context when the pointer moves or the set of actions changes.

This function is called by the drag source.

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

gdk_drop_finish ()

void                gdk_drop_finish                     (GdkDragContext *context,
                                                         gboolean success,
                                                         guint32 time_);

Ends the drag operation after a drop.

This function is called by the drag destination.

context : a GtkDragContext.
success : TRUE if the data was successfully received.
time_ : the timestamp for this operation.

gdk_drag_get_protocol ()

guint32             gdk_drag_get_protocol               (guint32 xid,
                                                         GdkDragProtocol *protocol);

Finds out the DND protocol supported by a window.

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.

gdk_drag_get_protocol_for_display ()

guint32             gdk_drag_get_protocol_for_display   (GdkDisplay *display,
                                                         guint32 xid,
                                                         GdkDragProtocol *protocol);

Finds out the DND protocol supported by a window.

display : the GdkDisplay where the destination window resides
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.

Since 2.2


enum GdkDragProtocol

typedef enum
{
  GDK_DRAG_PROTO_MOTIF,
  GDK_DRAG_PROTO_XDND,
  GDK_DRAG_PROTO_ROOTWIN,	  /* A root window with nobody claiming
				   * drags */
  GDK_DRAG_PROTO_NONE,		  /* Not a valid drag window */
  GDK_DRAG_PROTO_WIN32_DROPFILES, /* The simple WM_DROPFILES dnd */
  GDK_DRAG_PROTO_OLE2,		  /* The complex OLE2 dnd (not implemented) */
  GDK_DRAG_PROTO_LOCAL            /* Intra-app */
} GdkDragProtocol;

Used in GdkDragContext to indicate the protocol according to which DND is done.

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.

gdk_drag_context_unref ()

void                gdk_drag_context_unref              (GdkDragContext *context);

Warning

gdk_drag_context_unref is deprecated and should not be used in newly-written code.

Deprecated function; use g_object_unref() instead.

context : a GdkDragContext.

GdkDragContext

typedef struct {
  GObject parent_instance;

  
  GdkDragProtocol protocol;
  
  gboolean is_source;
  
  GdkWindow *source_window;
  GdkWindow *dest_window;

  GList *targets;
  GdkDragAction actions;
  GdkDragAction suggested_action;
  GdkDragAction action; 

  guint32 start_time;
} GdkDragContext;

A GdkDragContext holds information about a drag in progress. It is used on both source and destination sides.

GObject parent_instance; the parent instance
GdkDragProtocol protocol; the DND protocol which governs this drag.
gboolean is_source; TRUE if the context is used on the source side.
GdkWindow *source_window; the source of this drag.
GdkWindow *dest_window; the destination window of this drag.
GList *targets; a list of targets offered by the source.
GdkDragAction actions; a bitmask of actions proposed by the source when suggested_action is GDK_ACTION_ASK.
GdkDragAction suggested_action; the action suggested by the source.
GdkDragAction action; the action chosen by the destination.
guint32 start_time; a timestamp recording the start time of this drag.

enum GdkDragAction

typedef enum
{
  GDK_ACTION_DEFAULT = 1 << 0,
  GDK_ACTION_COPY    = 1 << 1,
  GDK_ACTION_MOVE    = 1 << 2,
  GDK_ACTION_LINK    = 1 << 3,
  GDK_ACTION_PRIVATE = 1 << 4,
  GDK_ACTION_ASK     = 1 << 5
} GdkDragAction;

Used in GdkDragContext to indicate what the destination should do with the dropped data.

GDK_ACTION_DEFAULT Means nothing, and should not be used.
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.

gdk_drag_status ()

void                gdk_drag_status                     (GdkDragContext *context,
                                                         GdkDragAction action,
                                                         guint32 time_);

Selects one of the actions offered by the drag source.

This function is called by the drag destination in response to gdk_drag_motion() called by the drag source.

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.

gdk_drag_drop_succeeded ()

gboolean            gdk_drag_drop_succeeded             (GdkDragContext *context);

Returns wether the dropped data has been successfully transferred. This function is intended to be used while handling a GDK_DROP_FINISHED event, its return value is meaningless at other times.

context : a GdkDragContext
Returns : TRUE if the drop was successful.

Since 2.6