|
@@ -2,7 +2,7 @@ use crate::{
|
|
config::{Config, WindowCloseBehaviour},
|
|
config::{Config, WindowCloseBehaviour},
|
|
element::DesktopElement,
|
|
element::DesktopElement,
|
|
event_handlers::WindowEventHandlers,
|
|
event_handlers::WindowEventHandlers,
|
|
- file_upload::{DesktopFileUploadForm, FileDialogRequest},
|
|
|
|
|
|
+ file_upload::{DesktopFileDragEvent, DesktopFileUploadForm, FileDialogRequest},
|
|
ipc::{EventData, IpcMessage, UserWindowEvent},
|
|
ipc::{EventData, IpcMessage, UserWindowEvent},
|
|
query::QueryResult,
|
|
query::QueryResult,
|
|
shortcut::{GlobalHotKeyEvent, ShortcutRegistry},
|
|
shortcut::{GlobalHotKeyEvent, ShortcutRegistry},
|
|
@@ -11,7 +11,7 @@ use crate::{
|
|
use crossbeam_channel::Receiver;
|
|
use crossbeam_channel::Receiver;
|
|
use dioxus_core::ElementId;
|
|
use dioxus_core::ElementId;
|
|
use dioxus_core::VirtualDom;
|
|
use dioxus_core::VirtualDom;
|
|
-use dioxus_html::{native_bind::NativeFileEngine, HtmlEvent, PlatformEventData};
|
|
|
|
|
|
+use dioxus_html::{native_bind::NativeFileEngine, HasFileData, HtmlEvent, PlatformEventData};
|
|
use std::{
|
|
use std::{
|
|
cell::{Cell, RefCell},
|
|
cell::{Cell, RefCell},
|
|
collections::HashMap,
|
|
collections::HashMap,
|
|
@@ -231,6 +231,7 @@ impl App {
|
|
|
|
|
|
let view = self.webviews.get_mut(&id).unwrap();
|
|
let view = self.webviews.get_mut(&id).unwrap();
|
|
let query = view.desktop_context.query.clone();
|
|
let query = view.desktop_context.query.clone();
|
|
|
|
+ let recent_file = view.desktop_context.file_hover.clone();
|
|
|
|
|
|
// check for a mounted event placeholder and replace it with a desktop specific element
|
|
// check for a mounted event placeholder and replace it with a desktop specific element
|
|
let as_any = match data {
|
|
let as_any = match data {
|
|
@@ -238,6 +239,25 @@ impl App {
|
|
let element = DesktopElement::new(element, view.desktop_context.clone(), query);
|
|
let element = DesktopElement::new(element, view.desktop_context.clone(), query);
|
|
Rc::new(PlatformEventData::new(Box::new(element)))
|
|
Rc::new(PlatformEventData::new(Box::new(element)))
|
|
}
|
|
}
|
|
|
|
+ dioxus_html::EventData::Drag(ref drag) => {
|
|
|
|
+ // we want to override this with a native file engine, provided by the most recent drag event
|
|
|
|
+ if drag.files().is_some() {
|
|
|
|
+ let file_event = recent_file.current().unwrap();
|
|
|
|
+ let paths = match file_event {
|
|
|
|
+ wry::FileDropEvent::Hovered { paths, position } => paths,
|
|
|
|
+ wry::FileDropEvent::Dropped { paths, position } => paths,
|
|
|
|
+ _ => vec![],
|
|
|
|
+ };
|
|
|
|
+ let files = Arc::new(NativeFileEngine::new(paths));
|
|
|
|
+ let event = DesktopFileDragEvent {
|
|
|
|
+ mouse: drag.mouse.clone(),
|
|
|
|
+ files,
|
|
|
|
+ };
|
|
|
|
+ Rc::new(PlatformEventData::new(Box::new(event)))
|
|
|
|
+ } else {
|
|
|
|
+ data.into_any()
|
|
|
|
+ }
|
|
|
|
+ }
|
|
_ => data.into_any(),
|
|
_ => data.into_any(),
|
|
};
|
|
};
|
|
|
|
|