fix: drag & drop de fichiers — fenêtre créée sans le handler Tauri (BUG-107)
CI / lint (push) Successful in 2m46s
CI / security (push) Successful in 2m0s
CI / test (push) Successful in 4m40s
CI / build (push) Successful in 1m52s
CI / e2e (push) Successful in 16m25s

This commit is contained in:
2026-10-02 23:42:01 -04:00
parent d6fa8c7bb1
commit 649f965c52
11 changed files with 60 additions and 13 deletions
+34
View File
@@ -48,6 +48,7 @@ fn pick_free_port() -> u16 {
#[cfg(target_os = "windows")]
use std::os::windows::process::CommandExt;
use tauri::Manager;
use tauri::webview::WebviewWindowBuilder;
// ── State ───────────────────────────────────────────────────────────────────
@@ -624,6 +625,19 @@ fn main() {
list_dirs,
])
.setup(move |app| {
// BUG-107 / #89 — HTML5 drag & drop des fichiers : Tauri installe
// son propre IDropTarget par-dessus celui du WebView2 (wry :
// « find the WebView2 window and override! ») et aucun événement
// natif n'est écouté ici → les glisser-déposer depuis
// l'Explorateur n'atteignaient jamais la page. La fenêtre est donc
// créée manuellement (`create: false` dans tauri.conf.json) avec
// le handler désactivé : la page reçoit les drops comme sur le web.
let window_config = app.config().app.windows[0].clone();
WebviewWindowBuilder::from_config(app, &window_config)
.expect("fenêtre principale (tauri.conf.json)")
.disable_drag_drop_handler()
.build()?;
// Build native menu bar (File / Edit / Help)
let _ = build_native_menu(app);
@@ -1205,4 +1219,24 @@ mod tests {
}
assert!(seen > 0, "aucun invoke('…') trouvé dans frontend/js");
}
/// BUG-107 : la fenêtre est créée en code (`create: false`) avec le
/// handler de drag & drop de Tauri désactivé. Si l'un des deux manque,
/// wry réinstalle son IDropTarget par-dessus celui du WebView2 et les
/// glisser-déposer de fichiers depuis l'Explorateur n'atteignent plus la
/// page (#89 fonctionnait uniquement sur le web).
#[test]
fn test_window_created_without_tauri_drag_drop_handler() {
let dir = std::path::Path::new(env!("CARGO_MANIFEST_DIR"));
let conf = fs::read_to_string(dir.join("tauri.conf.json")).unwrap();
assert!(
conf.contains("\"create\": false"),
"tauri.conf.json : la fenêtre doit être créée en code (create: false)"
);
let main_src = fs::read_to_string(dir.join("src/main.rs")).unwrap();
assert!(
main_src.contains("disable_drag_drop_handler()"),
"main.rs : disable_drag_drop_handler() manquant — drag & drop bloqué"
);
}
}