Skip to main content

FileDropEvent

Struct FileDropEvent 

Source
pub struct FileDropEvent {
    pub phase: FileDropPhase,
    pub position: Point,
    pub paths: Vec<PathBuf>,
}
Expand description

The file-drop vocabulary for handling file drops from the OS. [InputEvent::FileDrop] carries a FileDropEvent, which embeds a FileDropPhase (Hover, Drop, Cancel, or the broadcast-only Ended that follows every Drop/Cancel) and the dropped file paths (only on Drop). A widget handling drops is hit-tested and bubbles like InputEvent::Scroll. Lifted flat for the same reason EditCommand is: an app’s file-drop handler names these types in its public API without being a widget author. A desktop OS file drag/drop event — hit-tested and bubbling exactly like InputEvent::Scroll, by position, so a crate::widget::ChildPod container routes it with no change of its own (see InputEvent::translated/InputEvent::transformed).

§Source

Only a desktop shell publishes this today: frust-shell-desktop maps winit’s HoveredFile/DroppedFile/HoveredFileCancelled window events onto the three FileDropPhases (see that crate’s app_handler module for the exact mapping, including why Drop’s paths is a coalesced batch rather than one event per file). Android, iOS and web publish nothing — none of those embeddings surfaces an OS file-drag signal to this framework, so a frust-widgets drop target never engages on those hosts (see docs/LIMITATIONS.md).

§Broadcast follow-up

A shell resolves a Drop or Cancel at the last cursor position it knows, which can sit over a region no widget handles a file drop in — and on a platform that sends no cursor motion during an OS drag, that is the last in-window position before the drag began, not the release point. Even a Drop or Cancel some widget handles reaches only that one widget, while the drag may have opened state in others along the way (two independent drop-target groups, each hovered in turn). So after the hit-tested dispatch of every Drop or Cancel, handled or EventResult::Ignored, crate::app::RenderRoot::event immediately dispatches a second event in the same call: this struct with FileDropPhase::Ended, which InputEvent::is_broadcast reports as a broadcast, so every container forwards it to every child. A widget that already finished the drag on the hit-tested event finds nothing left to end in it, so answering Ended must be idempotent.

Fields§

§phase: FileDropPhase

The gesture phase.

§position: Point

Where the drag is, in the receiving widget’s local logical space — translated like InputEvent::Scroll’s position by the container chain that routes it.

§paths: Vec<PathBuf>

The dropped files — populated only for FileDropPhase::Drop. FileDropPhase::Hover/FileDropPhase::Cancel/ FileDropPhase::Ended always carry an empty list: the platform source delivers one file per hover notification with no “this is the complete set” signal, so the full list is only ever knowable once files are actually released.

Untrusted input. The paths arrive verbatim from the OS drag source — whatever application the user dragged from — and nothing between it and the receiving widget validates them: a path may be a symlink to somewhere else, a directory, a device node, a file of any size, or carry a name built to mislead when displayed. A consumer must treat them as untrusted: resolve symlinks (and re-check where they lead) before opening, check the type and size before reading, and sanitise a file name before showing it.

Trait Implementations§

Source§

impl Clone for FileDropEvent

Source§

fn clone(&self) -> FileDropEvent

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for FileDropEvent

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl PartialEq for FileDropEvent

Source§

fn eq(&self, other: &FileDropEvent) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for FileDropEvent

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync> ⓘ

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T, S> SimdFrom<T, S> for T
where S: Simd,

Source§

fn simd_from(_simd: S, value: T) -> T

Source§

impl<F, T, S> SimdInto<T, S> for F
where T: SimdFrom<F, S>, S: Simd,

Source§

fn simd_into(self, simd: S) -> T

Source§

impl<T> StorageAccess<T> for T

Source§

fn as_borrowed(&self) -> &T

Borrows the value.
Source§

fn into_taken(self) -> T

Takes the value.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WasmNotSend for T
where T: Send,

Source§

impl<T> WasmNotSendSync for T

Source§

impl<T> WasmNotSync for T
where T: Sync,

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more