DropTargetRef
public struct DropTargetRef : DropTargetProtocol, GWeakCapturing
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 [ctorGtk.DropTarget.new
], passing in the
GType
of the data you want to receive and connect to the
[signalGtk.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 [methodGtk.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
], [signalGtk.DropTarget::motion
] and [signalGtk.DropTarget::leave
] signals - configuring how to receive data by setting the
[property
Gtk.DropTarget:preload
] property and listening for its availability via the [propertyGtk.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 [classGtk.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 [classGtk.DropControllerMotion
].
The DropTargetRef
type acts as a lightweight Swift reference to an underlying GtkDropTarget
instance.
It exposes methods that can operate on this data type through DropTargetProtocol
conformance.
Use DropTargetRef
only as an unowned
reference to an existing GtkDropTarget
instance.
-
Untyped pointer to the underlying `GtkDropTarget` instance.
For type-safe access, use the generated, typed pointer
drop_target_ptr
property instead.Declaration
Swift
public let ptr: UnsafeMutableRawPointer!
-
Designated initialiser from the underlying
C
data typeDeclaration
Swift
@inlinable init(_ p: UnsafeMutablePointer<GtkDropTarget>)
-
Designated initialiser from a constant pointer to the underlying
C
data typeDeclaration
Swift
@inlinable init(_ p: UnsafePointer<GtkDropTarget>)
-
Conditional initialiser from an optional pointer to the underlying
C
data typeDeclaration
Swift
@inlinable init!(_ maybePointer: UnsafeMutablePointer<GtkDropTarget>?)
-
Conditional initialiser from an optional, non-mutable pointer to the underlying
C
data typeDeclaration
Swift
@inlinable init!(_ maybePointer: UnsafePointer<GtkDropTarget>?)
-
Conditional initialiser from an optional
gpointer
Declaration
Swift
@inlinable init!(gpointer g: gpointer?)
-
Conditional initialiser from an optional, non-mutable
gconstpointer
Declaration
Swift
@inlinable init!(gconstpointer g: gconstpointer?)
-
Reference intialiser for a related type that implements
DropTargetProtocol
Declaration
Swift
@inlinable init<T>(_ other: T) where T : DropTargetProtocol
-
This factory is syntactic sugar for setting weak pointers wrapped in
GWeak<T>
Declaration
Swift
@inlinable static func unowned<T>(_ other: T) -> DropTargetRef where T : DropTargetProtocol
-
Unsafe typed initialiser. Do not use unless you know the underlying data type the pointer points to conforms to
DropTargetProtocol
.Declaration
Swift
@inlinable init<T>(cPointer: UnsafeMutablePointer<T>)
-
Unsafe typed initialiser. Do not use unless you know the underlying data type the pointer points to conforms to
DropTargetProtocol
.Declaration
Swift
@inlinable init<T>(constPointer: UnsafePointer<T>)
-
Unsafe untyped initialiser. Do not use unless you know the underlying data type the pointer points to conforms to
DropTargetProtocol
.Declaration
Swift
@inlinable init(mutating raw: UnsafeRawPointer)
-
Unsafe untyped initialiser. Do not use unless you know the underlying data type the pointer points to conforms to
DropTargetProtocol
.Declaration
Swift
@inlinable init(raw: UnsafeMutableRawPointer)
-
Unsafe untyped initialiser. Do not use unless you know the underlying data type the pointer points to conforms to
DropTargetProtocol
.Declaration
Swift
@inlinable init(opaquePointer: OpaquePointer)
-
Creates a new `GtkDropTarget` object.
If the drop target should support more than 1 type, pass
G_TYPE_INVALID
fortype
and then call [methodGtk.DropTarget.set_gtypes
].Declaration
Swift
@inlinable init(type: GType, actions: Gdk.DragAction)