Struct gtk4::DragSource [−][src]
pub struct DragSource(_);
Expand description
DragSource
is an event controller to initiate Drag-And-Drop operations.
DragSource
can be set up with the necessary
ingredients for a DND operation ahead of time. This includes
the source for the data that is being transferred, in the form
of a gdk::ContentProvider
, the desired action, and the icon to
use during the drag operation. After setting it up, the drag
source must be added to a widget as an event controller, using
WidgetExt::add_controller()
.
⚠️ The following code is in c ⚠️
static void
my_widget_init (MyWidget *self)
{
GtkDragSource *drag_source = gtk_drag_source_new ();
g_signal_connect (drag_source, "prepare", G_CALLBACK (on_drag_prepare), self);
g_signal_connect (drag_source, "drag-begin", G_CALLBACK (on_drag_begin), self);
gtk_widget_add_controller (GTK_WIDGET (self), GTK_EVENT_CONTROLLER (drag_source));
}
Setting up the content provider and icon ahead of time only makes
sense when the data does not change. More commonly, you will want
to set them up just in time. To do so, DragSource
has
signal::DragSource::prepare
and signal::DragSource::drag-begin
signals.
The ::prepare signal is emitted before a drag is started, and can be used to set the content provider and actions that the drag should be started with.
⚠️ The following code is in c ⚠️
static GdkContentProvider *
on_drag_prepare (GtkDragSource *source,
double x,
double y,
MyWidget *self)
{
// This widget supports two types of content: GFile objects
// and GdkPixbuf objects; GTK will handle the serialization
// of these types automatically
GFile *file = my_widget_get_file (self);
GdkPixbuf *pixbuf = my_widget_get_pixbuf (self);
return gdk_content_provider_new_union ((GdkContentProvider *[2]) {
gdk_content_provider_new_typed (G_TYPE_FILE, file),
gdk_content_provider_new_typed (GDK_TYPE_PIXBUF, pixbuf),
}, 2);
}
The ::drag-begin signal is emitted after the gdk::Drag
object has
been created, and can be used to set up the drag icon.
⚠️ The following code is in c ⚠️
static void
on_drag_begin (GtkDragSource *source,
GtkDrag *drag,
MyWidget *self)
{
// Set the widget as the drag icon
GdkPaintable *paintable = gtk_widget_paintable_new (GTK_WIDGET (self));
gtk_drag_source_set_icon (source, paintable, 0, 0);
g_object_unref (paintable);
}
During the DND operation, DragSource
emits signals that
can be used to obtain updates about the status of the operation,
but it is not normally necessary to connect to any signals,
except for one case: when the supported actions include
gdk::DragAction::MOVE
, you need to listen for the
signal::DragSource::drag-end
signal and delete the
data after it has been transferred.
Implements
GestureSingleExt
, GestureExt
, EventControllerExt
, glib::ObjectExt
Implementations
Creates a new builder-pattern struct instance to construct DragSource
objects.
This method returns an instance of DragSourceBuilder
which can be used to create DragSource
objects.
Cancels a currently ongoing drag operation.
Sets the actions on the DragSource
.
During a DND operation, the actions are offered to potential
drop targets. If actions
include gdk::DragAction::MOVE
, you need
to listen to the signal::DragSource::drag-end
signal and
handle delete_data
being true
.
This function can be called before a drag is started,
or in a handler for the signal::DragSource::prepare
signal.
actions
the actions to offer
Sets a content provider on a DragSource
.
When the data is requested in the cause of a DND operation, it will be obtained from the content provider.
This function can be called before a drag is started,
or in a handler for the signal::DragSource::prepare
signal.
You may consider setting the content provider back to
None
in a signal::DragSource::drag-end
signal handler.
content
Sets a paintable to use as icon during DND operations.
The hotspot coordinates determine the point on the icon that gets aligned with the hotspot of the cursor.
If paintable
is None
, a default icon is used.
This function can be called before a drag is started, or in
a signal::DragSource::prepare
or
signal::DragSource::drag-begin
signal handler.
paintable
the gdk::Paintable
to use as icon
hot_x
the hotspot X coordinate on the icon
hot_y
the hotspot Y coordinate on the icon
Emitted on the drag source when a drag is started.
It can be used to e.g. set a custom drag icon with
set_icon()
.
drag
the gdk::Drag
object
pub fn connect_drag_cancel<F: Fn(&Self, &Drag, DragCancelReason) -> bool + 'static>(
&self,
f: F
) -> SignalHandlerId
pub fn connect_drag_cancel<F: Fn(&Self, &Drag, DragCancelReason) -> bool + 'static>(
&self,
f: F
) -> SignalHandlerId
Emitted on the drag source when a drag has failed.
The signal handler may handle a failed drag operation based on
the type of error. It should return true
if the failure has been handled
and the default “drag operation failed” animation should not be shown.
drag
the gdk::Drag
object
reason
information on why the drag failed
Returns
true
if the failed drag operation has been already handled
Emitted on the drag source when a drag is finished.
A typical reason to connect to this signal is to undo
things done in signal::DragSource::prepare
or
signal::DragSource::drag-begin
handlers.
drag
the gdk::Drag
object
delete_data
true
if the drag was performing gdk::DragAction::MOVE
,
and the data should be deleted
pub fn connect_prepare<F: Fn(&Self, f64, f64) -> Option<ContentProvider> + 'static>(
&self,
f: F
) -> SignalHandlerId
pub fn connect_prepare<F: Fn(&Self, f64, f64) -> Option<ContentProvider> + 'static>(
&self,
f: F
) -> SignalHandlerId
Emitted when a drag is about to be initiated.
It returns the gdk::ContentProvider
to use for the drag that is about
to start. The default handler for this signal returns the value of
the property::DragSource::content
property, so if you set up that
property ahead of time, you don’t need to connect to this signal.
x
the X coordinate of the drag starting point
y
the Y coordinate fo the drag starting point
Returns
Trait Implementations
type Parent = GestureSingle
This method returns an ordering between self
and other
values if one exists. Read more
This method tests less than (for self
and other
) and is used by the <
operator. Read more
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
Returns the type identifier of Self
.
Auto Trait Implementations
impl RefUnwindSafe for DragSource
impl !Send for DragSource
impl !Sync for DragSource
impl Unpin for DragSource
impl UnwindSafe for DragSource
Blanket Implementations
Mutably borrows from an owned value. Read more
Upcasts an object to a superclass or interface T
. Read more
Upcasts an object to a reference of its superclass or interface T
. Read more
Tries to downcast to a subclass or interface implementor T
. Read more
Tries to downcast to a reference of its subclass or interface implementor T
. Read more
Tries to cast to an object of type T
. This handles upcasting, downcasting
and casting between interface and interface implementors. All checks are performed at
runtime, while downcast
and upcast
will do many checks at compile-time already. Read more
Tries to cast to reference to an object of type T
. This handles upcasting, downcasting
and casting between interface and interface implementors. All checks are performed at
runtime, while downcast
and upcast
will do many checks at compile-time already. Read more
Casts to T
unconditionally. Read more
Casts to &T
unconditionally. Read more
Returns true
if the object is an instance of (can be cast to) T
.
pub fn set_property<'a, N, V>(
&self,
property_name: N,
value: V
) -> Result<(), BoolError> where
N: Into<&'a str>,
V: ToValue,
pub fn set_property_from_value<'a, N>(
&self,
property_name: N,
value: &Value
) -> Result<(), BoolError> where
N: Into<&'a str>,
pub fn set_properties_from_value(
&self,
property_values: &[(&str, Value)]
) -> Result<(), BoolError>
pub fn has_property<'a, N>(&self, property_name: N, type_: Option<Type>) -> bool where
N: Into<&'a str>,
pub fn find_property<'a, N>(&self, property_name: N) -> Option<ParamSpec> where
N: Into<&'a str>,
Safety Read more
Safety Read more
Safety Read more
Safety Read more
pub fn connect<'a, N, F>(
&self,
signal_name: N,
after: bool,
callback: F
) -> Result<SignalHandlerId, BoolError> where
N: Into<&'a str>,
F: 'static + Fn(&[Value]) -> Option<Value> + Send + Sync,
Same as connect
but takes a SignalId
instead of a signal name.
pub fn connect_local<'a, N, F>(
&self,
signal_name: N,
after: bool,
callback: F
) -> Result<SignalHandlerId, BoolError> where
N: Into<&'a str>,
F: 'static + Fn(&[Value]) -> Option<Value>,
Same as connect_local
but takes a SignalId
instead of a signal name.
pub unsafe fn connect_unsafe<'a, N, F>(
&self,
signal_name: N,
after: bool,
callback: F
) -> Result<SignalHandlerId, BoolError> where
N: Into<&'a str>,
F: Fn(&[Value]) -> Option<Value>,
Same as connect_unsafe
but takes a SignalId
instead of a signal name.
Emit signal by signal id.
Same as emit
but takes Value
for the arguments.
Emit signal by its name.
Same as emit_by_name
but takes Value
for the arguments.
Emit signal with details by signal id.
Same as emit_with_details
but takes Value
for the arguments.
pub fn connect_notify<F>(&self, name: Option<&str>, f: F) -> SignalHandlerId where
F: 'static + Fn(&T, &ParamSpec) + Send + Sync,
pub fn connect_notify_local<F>(
&self,
name: Option<&str>,
f: F
) -> SignalHandlerId where
F: 'static + Fn(&T, &ParamSpec),
pub unsafe fn connect_notify_unsafe<F>(
&self,
name: Option<&str>,
f: F
) -> SignalHandlerId where
F: Fn(&T, &ParamSpec),
pub fn bind_property<'a, O, N, M>(
&'a self,
source_property: N,
target: &'a O,
target_property: M
) -> BindingBuilder<'a> where
O: ObjectType,
N: Into<&'a str>,
M: Into<&'a str>,
Returns a SendValue
clone of self
.