DropTarget

GtkDropTarget is an event controller to receive Drag-and-Drop operations.

The most basic way to use a GtkDropTarget to receive drops on a widget is to create it via [ctor@Gtk.DropTarget.new], passing in the GType of the data you want to receive and connect to the [signal@Gtk.DropTarget::drop] signal to receive the data:

static gboolean
on_drop (GtkDropTarget *target,
const GValue  *value,
double         x,
double         y,
gpointer       data)
{
MyWidget *self = data;

// Call the appropriate setter depending on the type of data
// that we received
if (G_VALUE_HOLDS (value, G_TYPE_FILE))
my_widget_set_file (self, g_value_get_object (value));
else if (G_VALUE_HOLDS (value, GDK_TYPE_PIXBUF))
my_widget_set_pixbuf (self, g_value_get_object (value));
else
return FALSE;

return TRUE;
}

static void
my_widget_init (MyWidget *self)
{
GtkDropTarget *target =
gtk_drop_target_new (G_TYPE_INVALID, GDK_ACTION_COPY);

// This widget accepts two types of drop types: GFile objects
// and GdkPixbuf objects
gtk_drop_target_set_gtypes (target, (GTypes [2]) {
G_TYPE_FILE,
GDK_TYPE_PIXBUF,
}, 2);

gtk_widget_add_controller (GTK_WIDGET (self), GTK_EVENT_CONTROLLER (target));
}

GtkDropTarget supports more options, such as:

* rejecting potential drops via the [signal@Gtk.DropTarget::accept] signal and the [method@Gtk.DropTarget.reject] function to let other drop targets handle the drop * tracking an ongoing drag operation before the drop via the [signal@Gtk.DropTarget::enter], [signal@Gtk.DropTarget::motion] and [signal@Gtk.DropTarget::leave] signals * configuring how to receive data by setting the [property@Gtk.DropTarget:preload] property and listening for its availability via the [property@Gtk.DropTarget:value] property

However, GtkDropTarget is ultimately modeled in a synchronous way and only supports data transferred via GType. If you want full control over an ongoing drop, the [class@Gtk.DropTargetAsync] object gives you this ability.

While a pointer is dragged over the drop target's widget and the drop has not been rejected, that widget will receive the %GTK_STATE_FLAG_DROP_ACTIVE state, which can be used to style the widget.

If you are not interested in receiving the drop, but just want to update UI state during a Drag-and-Drop operation (e.g. switching tabs), you can use [class@Gtk.DropControllerMotion].

Constructors

this
this(GtkDropTarget* gtkDropTarget, bool ownedRef)

Sets our main struct and passes it to the parent class.

this
this(GType type, GdkDragAction actions)

Creates a new GtkDropTarget object.

Members

Functions

addOnAccept
gulong addOnAccept(bool delegate(Drop, DropTarget) dlg, ConnectFlags connectFlags)

Emitted on the drop site when a drop operation is about to begin.

addOnDrop
gulong addOnDrop(bool delegate(Value, double, double, DropTarget) dlg, ConnectFlags connectFlags)

Emitted on the drop site when the user drops the data onto the widget.

addOnEnter
gulong addOnEnter(GdkDragAction delegate(double, double, DropTarget) dlg, ConnectFlags connectFlags)

Emitted on the drop site when the pointer enters the widget.

addOnLeave
gulong addOnLeave(void delegate(DropTarget) dlg, ConnectFlags connectFlags)

Emitted on the drop site when the pointer leaves the widget.

addOnMotion
gulong addOnMotion(GdkDragAction delegate(double, double, DropTarget) dlg, ConnectFlags connectFlags)

Emitted while the pointer is moving over the drop target.

getActions
GdkDragAction getActions()

Gets the actions that this drop target supports.

getDrop
Drop getDrop()

Gets the currently handled drop operation.

getDropTargetStruct
GtkDropTarget* getDropTargetStruct(bool transferOwnership)

Get the main Gtk struct

getFormats
ContentFormats getFormats()

Gets the data formats that this drop target accepts.

getGtypes
GType[] getGtypes()

Gets the list of supported GTypes for @self.

getPreload
bool getPreload()

Gets whether data should be preloaded on hover.

getStruct
void* getStruct()

the main Gtk struct as a void*

getValue
Value getValue()

Gets the current drop data, as a GValue.

reject
void reject()

Rejects the ongoing drop operation.

setActions
void setActions(GdkDragAction actions)

Sets the actions that this drop target supports.

setGtypes
void setGtypes(GType[] types)

Sets the supported GTypes for this drop target.

setPreload
void setPreload(bool preload)

Sets whether data should be preloaded on hover.

Static functions

getType
GType getType()

Variables

gtkDropTarget
GtkDropTarget* gtkDropTarget;

the main Gtk struct

Inherited Members

From EventController

gtkEventController
GtkEventController* gtkEventController;

the main Gtk struct

getEventControllerStruct
GtkEventController* getEventControllerStruct(bool transferOwnership)

Get the main Gtk struct

getStruct
void* getStruct()

the main Gtk struct as a void*

getType
GType getType()
getCurrentEvent
Event getCurrentEvent()

Returns the event that is currently being handled by the controller, and %NULL at other times.

getCurrentEventDevice
Device getCurrentEventDevice()

Returns the device of the event that is currently being handled by the controller, and %NULL otherwise.

getCurrentEventState
GdkModifierType getCurrentEventState()

Returns the modifier state of the event that is currently being handled by the controller, and 0 otherwise.

getCurrentEventTime
uint getCurrentEventTime()

Returns the timestamp of the event that is currently being handled by the controller, and 0 otherwise.

getName
string getName()

Gets the name of @controller.

getPropagationLimit
GtkPropagationLimit getPropagationLimit()

Gets the propagation limit of the event controller.

getPropagationPhase
GtkPropagationPhase getPropagationPhase()

Gets the propagation phase at which @controller handles events.

getWidget
Widget getWidget()

Returns the #GtkWidget this controller relates to.

reset
void reset()

Resets the @controller to a clean state.

setName
void setName(string name)

Sets a name on the controller that can be used for debugging.

setPropagationLimit
void setPropagationLimit(GtkPropagationLimit limit)

Sets the event propagation limit on the event controller.

setPropagationPhase
void setPropagationPhase(GtkPropagationPhase phase)

Sets the propagation phase at which a controller handles events.

Meta