From 1ecb8651a795aa53eded31e3fb357c857dcf2ab1 Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Mon, 9 Aug 2021 00:10:25 -0300 Subject: [PATCH] fix(core): `listen` receiving past events, closes #2323 (#2371) --- .changes/fix-event-queue.md | 5 +++++ core/tauri/src/endpoints/dialog.rs | 13 +++++++------ core/tauri/src/endpoints/event.rs | 7 ------- core/tauri/src/event.rs | 7 ------- core/tauri/src/manager.rs | 13 +------------ 5 files changed, 13 insertions(+), 32 deletions(-) create mode 100644 .changes/fix-event-queue.md diff --git a/.changes/fix-event-queue.md b/.changes/fix-event-queue.md new file mode 100644 index 00000000000..9ac753a29c5 --- /dev/null +++ b/.changes/fix-event-queue.md @@ -0,0 +1,5 @@ +--- +"tauri": patch +--- + +Fix `listen` calls receiving past events. diff --git a/core/tauri/src/endpoints/dialog.rs b/core/tauri/src/endpoints/dialog.rs index ea6b290a0ad..5a13f3b4fb6 100644 --- a/core/tauri/src/endpoints/dialog.rs +++ b/core/tauri/src/endpoints/dialog.rs @@ -115,9 +115,13 @@ impl Cmd { } #[cfg(all(target_os = "linux", any(dialog_open, dialog_save)))] -fn set_default_path(dialog_builder: FileDialogBuilder, default_path: PathBuf) -> FileDialogBuilder { - if default_path.is_file() { - dialog_builder.set_file_name(&default_path.to_string_lossy().to_string()) +fn set_default_path( + mut dialog_builder: FileDialogBuilder, + default_path: PathBuf, +) -> FileDialogBuilder { + if default_path.is_file() || !default_path.exists() { + dialog_builder = dialog_builder.set_file_name(&default_path.to_string_lossy().to_string()); + dialog_builder.set_directory(default_path.parent().unwrap()) } else { dialog_builder.set_directory(default_path) } @@ -211,9 +215,6 @@ pub fn save( dialog_builder = dialog_builder.set_parent(&parent(window)?); } if let Some(default_path) = options.default_path { - if !default_path.exists() { - return Err(crate::Error::DialogDefaultPathNotExists(default_path)); - } dialog_builder = set_default_path(dialog_builder, default_path); } for filter in options.filters { diff --git a/core/tauri/src/endpoints/event.rs b/core/tauri/src/endpoints/event.rs index 4300069a819..5a025119bf8 100644 --- a/core/tauri/src/endpoints/event.rs +++ b/core/tauri/src/endpoints/event.rs @@ -87,15 +87,8 @@ pub fn listen_js( id: {event_id}, handler: window['{handler}'] }}); - - for (let i = 0; i < (window['{queue}'] || []).length; i++) {{ - const e = window['{queue}'][i]; - window['{emit}'](e.eventData, e.salt, true) - }} ", listeners = window.manager().event_listeners_object_name(), - queue = window.manager().event_queue_object_name(), - emit = window.manager().event_emit_function_name(), event = event, event_id = event_id, handler = handler diff --git a/core/tauri/src/event.rs b/core/tauri/src/event.rs index 6871f076ff7..0b12f9814cd 100644 --- a/core/tauri/src/event.rs +++ b/core/tauri/src/event.rs @@ -59,7 +59,6 @@ struct InnerListeners { pending: Mutex>, function_name: Uuid, listeners_object_name: Uuid, - queue_object_name: Uuid, } /// A self-contained event manager. @@ -75,7 +74,6 @@ impl Default for Listeners { pending: Mutex::default(), function_name: Uuid::new_v4(), listeners_object_name: Uuid::new_v4(), - queue_object_name: Uuid::new_v4(), }), } } @@ -100,11 +98,6 @@ impl Listeners { self.inner.listeners_object_name.to_string() } - /// Randomly generated queue object name to represent the JavaScript event queue object. - pub(crate) fn queue_object_name(&self) -> String { - self.inner.queue_object_name.to_string() - } - /// Insert a pending event action to the queue. fn insert_pending(&self, action: Pending) { self diff --git a/core/tauri/src/manager.rs b/core/tauri/src/manager.rs index 2c18067d830..a4761d86645 100644 --- a/core/tauri/src/manager.rs +++ b/core/tauri/src/manager.rs @@ -445,15 +445,8 @@ impl WindowManager { fn event_initialization_script(&self, key: u32) -> String { return format!( " - window['{queue}'] = []; - window['{function}'] = function (eventData, salt, ignoreQueue) {{ + window['{function}'] = function (eventData, salt) {{ const listeners = (window['{listeners}'] && window['{listeners}'][eventData.event]) || [] - if (!ignoreQueue && listeners.length === 0) {{ - window['{queue}'].push({{ - eventData: eventData, - salt: salt - }}) - }} if (listeners.length > 0) {{ window.__TAURI__._invoke('tauri', {{ @@ -476,7 +469,6 @@ impl WindowManager { ", key = key, function = self.inner.listeners.function_name(), - queue = self.inner.listeners.queue_object_name(), listeners = self.inner.listeners.listeners_object_name() ); } @@ -714,9 +706,6 @@ impl WindowManager { pub fn event_listeners_object_name(&self) -> String { self.inner.listeners.listeners_object_name() } - pub fn event_queue_object_name(&self) -> String { - self.inner.listeners.queue_object_name() - } pub fn event_emit_function_name(&self) -> String { self.inner.listeners.function_name() }