Skip to main content

FileDropEvent

Struct FileDropEvent 

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

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) -> Self

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

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

impl PartialEq for FileDropEvent

Source§

fn eq(&self, other: &Self) -> 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<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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> 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.