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, (GType [2]) {
G_TYPE_FILE,
GDK_TYPE_PIXBUF,
}, 2);
g_signal_connect (target, "drop", G_CALLBACK (on_drop), self);
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.
Skipped during bindings generation
parameter
n_types
: n_types: Out parameter is not supportedparameter
types
: Array parameter of type GType is not supported
Constructors
Properties
Functions
Emitted on the drop site when a drop operation is about to begin.
Emitted on the drop site when the user drops the data onto the widget.
Emitted on the drop site when the pointer enters the widget.
Emitted on the drop site when the pointer leaves the widget.
Emitted while the pointer is moving over the drop target.
Gets the actions that this drop target supports.
Gets the currently handled drop operation.
Returns the event that is currently being handled by the controller.
Returns the device of the event that is currently being handled by the controller.
Returns the modifier state of the event that is currently being handled by the controller.
Returns the timestamp of the event that is currently being handled by the controller.
Gets the data formats that this drop target accepts.
Gets whether data should be preloaded on hover.
Gets the propagation limit of the event controller.
Gets the propagation phase at which @controller handles events.
Sets the actions that this drop target supports.
Sets whether data should be preloaded on hover.
Sets the event propagation limit on the event controller.
Sets the propagation phase at which a controller handles events.
Sets a name on the controller that can be used for debugging.