Drag and Drop

Name

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_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);
enum        GdkDragProtocol;
void        gdk_drag_context_unref          (GdkDragContext *context);
struct      GdkDragContext;
enum        GdkDragAction;
void        gdk_drag_status                 (GdkDragContext *context,
                                             GdkDragAction action,
                                             guint32 time);


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.


gdk_drag_abort ()

void        gdk_drag_abort                  (GdkDragContext *context,
                                             guint32 time);

Aborts a drag without dropping.

This function is called by the drag source.


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.


gdk_drag_context_new ()

GdkDragContext* gdk_drag_context_new        (void);

Creates a new 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.


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().


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.


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.


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.


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.


gdk_drag_get_protocol ()

guint32     gdk_drag_get_protocol           (guint32 xid,
                                             GdkDragProtocol *protocol);

Finds out the DND protocol supported by a window.


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_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.


struct GdkDragContext

struct GdkDragContext {
  GObject parent_instance;

  /*< public >*/
  
  GdkDragProtocol protocol;
  
  gboolean is_source;
  
  GdkWindow *source_window;
  GdkWindow *dest_window;

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

  guint32 start_time;

  /*< private >*/
  
  gpointer windowing_data;
};

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


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_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.