Drag And Drop

Drag And Drop — Functions for controlling drag and drop handling

Synopsis

#include <gdk/gdk.h>

                    GdkDragContext;
GdkAtom             gdk_drag_get_selection              (GdkDragContext *context);
void                gdk_drag_abort                      (GdkDragContext *context,
                                                         guint32 time_);
void                gdk_drop_reply                      (GdkDragContext *context,
                                                         gboolean accepted,
                                                         guint32 time_);
void                gdk_drag_drop                       (GdkDragContext *context,
                                                         guint32 time_);
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);
GdkDragContext *    gdk_drag_begin                      (GdkWindow *window,
                                                         GList *targets);
GdkDragContext *    gdk_drag_begin_for_device           (GdkWindow *window,
                                                         GdkDevice *device,
                                                         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_);
enum                GdkDragProtocol;
enum                GdkDragAction;
void                gdk_drag_status                     (GdkDragContext *context,
                                                         GdkDragAction action,
                                                         guint32 time_);
gboolean            gdk_drag_drop_succeeded             (GdkDragContext *context);
GdkDragProtocol     gdk_window_get_drag_protocol        (GdkWindow *window,
                                                         GdkWindow **target);
GdkDragAction       gdk_drag_context_get_actions        (GdkDragContext *context);
GdkDragAction       gdk_drag_context_get_suggested_action
                                                        (GdkDragContext *context);
GdkDragAction       gdk_drag_context_get_selected_action
                                                        (GdkDragContext *context);
GList *             gdk_drag_context_list_targets       (GdkDragContext *context);
GdkDevice *         gdk_drag_context_get_device         (GdkDragContext *context);
void                gdk_drag_context_set_device         (GdkDragContext *context,
                                                         GdkDevice *device);
GdkWindow *         gdk_drag_context_get_source_window  (GdkDragContext *context);
GdkWindow *         gdk_drag_context_get_dest_window    (GdkDragContext *context);
GdkDragProtocol     gdk_drag_context_get_protocol       (GdkDragContext *context);

Object Hierarchy

  GObject
   +----GdkDragContext

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

GdkDragContext

typedef struct _GdkDragContext GdkDragContext;


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, or GDK_NONE. [transfer none]

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 accepted,
                                                         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

accepted :

TRUE if the drop is accepted

time_ :

the timestamp for this operation

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_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. [out]

protocol :

location to store the DND protocol in. [out]

Since 2.2


gdk_drag_begin ()

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

Starts a drag and creates a new drag context for it. This function assumes that the drag is controlled by the client pointer device, use gdk_drag_begin_for_device() to begin a drag with a different device.

This function is called by the drag source.

window :

the source window for this drag.

targets :

the offered targets, as list of GdkAtoms. [transfer none][element-type GdkAtom]

Returns :

a newly created GdkDragContext. [transfer full]

gdk_drag_begin_for_device ()

GdkDragContext *    gdk_drag_begin_for_device           (GdkWindow *window,
                                                         GdkDevice *device,
                                                         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

device :

the device that controls this drag

targets :

the offered targets, as list of GdkAtoms. [transfer none][element-type GdkAtom]

Returns :

a newly created GdkDragContext. [transfer full]

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

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

enum GdkDragProtocol

typedef enum
{
  GDK_DRAG_PROTO_NONE = 0,
  GDK_DRAG_PROTO_MOTIF,
  GDK_DRAG_PROTO_XDND,
  GDK_DRAG_PROTO_ROOTWIN,
  GDK_DRAG_PROTO_WIN32_DROPFILES,
  GDK_DRAG_PROTO_OLE2,
  GDK_DRAG_PROTO_LOCAL
} GdkDragProtocol;

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

GDK_DRAG_PROTO_NONE

no protocol.

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

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 whether 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


gdk_window_get_drag_protocol ()

GdkDragProtocol     gdk_window_get_drag_protocol        (GdkWindow *window,
                                                         GdkWindow **target);

Finds out the DND protocol supported by a window.

window :

the destination window

target :

location of the window where the drop should happen. This may be window or a proxy window, or NULL if window does not support Drag and Drop. [out][allow-none][transfer full]

Returns :

the supported DND protocol.

Since 3.0


gdk_drag_context_get_actions ()

GdkDragAction       gdk_drag_context_get_actions        (GdkDragContext *context);

Determines the bitmask of actions proposed by the source if gdk_drag_context_get_suggested_action() returns GDK_ACTION_ASK.

context :

a GdkDragContext

Returns :

the GdkDragAction flags

Since 2.22


gdk_drag_context_get_suggested_action ()

GdkDragAction       gdk_drag_context_get_suggested_action
                                                        (GdkDragContext *context);

Determines the suggested drag action of the context.

context :

a GdkDragContext

Returns :

a GdkDragAction value

Since 2.22


gdk_drag_context_get_selected_action ()

GdkDragAction       gdk_drag_context_get_selected_action
                                                        (GdkDragContext *context);

Determines the action chosen by the drag destination.

context :

a GdkDragContext

Returns :

a GdkDragAction value

Since 2.22


gdk_drag_context_list_targets ()

GList *             gdk_drag_context_list_targets       (GdkDragContext *context);

Retrieves the list of targets of the context.

context :

a GdkDragContext

Returns :

a GList of targets. [transfer none][element-type GdkAtom]

Since 2.22


gdk_drag_context_get_device ()

GdkDevice *         gdk_drag_context_get_device         (GdkDragContext *context);

Returns the GdkDevice associated to the drag context.

context :

a GdkDragContext

Returns :

The GdkDevice associated to context. [transfer none]

gdk_drag_context_set_device ()

void                gdk_drag_context_set_device         (GdkDragContext *context,
                                                         GdkDevice *device);

Associates a GdkDevice to context, so all Drag and Drop events for context are emitted as if they came from this device.

context :

a GdkDragContext

device :

a GdkDevice

gdk_drag_context_get_source_window ()

GdkWindow *         gdk_drag_context_get_source_window  (GdkDragContext *context);

Returns the GdkWindow where the DND operation started.

context :

a GdkDragContext

Returns :

a GdkWindow. [transfer none]

Since 2.22


gdk_drag_context_get_dest_window ()

GdkWindow *         gdk_drag_context_get_dest_window    (GdkDragContext *context);

Returns the destination windw for the DND operation.

context :

a GdkDragContext

Returns :

a GdkWindow. [transfer none]

Since 3.0


gdk_drag_context_get_protocol ()

GdkDragProtocol     gdk_drag_context_get_protocol       (GdkDragContext *context);

Returns the drag protocol thats used by this context.

context :

a GdkDragContext

Returns :

the drag protocol

Since 3.0