Skip to content

Commit 1ecb865

Browse files
authored
fix(core): listen receiving past events, closes #2323 (#2371)
1 parent d7dd653 commit 1ecb865

File tree

5 files changed

+13
-32
lines changed

5 files changed

+13
-32
lines changed

.changes/fix-event-queue.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"tauri": patch
3+
---
4+
5+
Fix `listen` calls receiving past events.

core/tauri/src/endpoints/dialog.rs

+7-6
Original file line numberDiff line numberDiff line change
@@ -115,9 +115,13 @@ impl Cmd {
115115
}
116116

117117
#[cfg(all(target_os = "linux", any(dialog_open, dialog_save)))]
118-
fn set_default_path(dialog_builder: FileDialogBuilder, default_path: PathBuf) -> FileDialogBuilder {
119-
if default_path.is_file() {
120-
dialog_builder.set_file_name(&default_path.to_string_lossy().to_string())
118+
fn set_default_path(
119+
mut dialog_builder: FileDialogBuilder,
120+
default_path: PathBuf,
121+
) -> FileDialogBuilder {
122+
if default_path.is_file() || !default_path.exists() {
123+
dialog_builder = dialog_builder.set_file_name(&default_path.to_string_lossy().to_string());
124+
dialog_builder.set_directory(default_path.parent().unwrap())
121125
} else {
122126
dialog_builder.set_directory(default_path)
123127
}
@@ -211,9 +215,6 @@ pub fn save<R: Runtime>(
211215
dialog_builder = dialog_builder.set_parent(&parent(window)?);
212216
}
213217
if let Some(default_path) = options.default_path {
214-
if !default_path.exists() {
215-
return Err(crate::Error::DialogDefaultPathNotExists(default_path));
216-
}
217218
dialog_builder = set_default_path(dialog_builder, default_path);
218219
}
219220
for filter in options.filters {

core/tauri/src/endpoints/event.rs

-7
Original file line numberDiff line numberDiff line change
@@ -87,15 +87,8 @@ pub fn listen_js<R: Runtime>(
8787
id: {event_id},
8888
handler: window['{handler}']
8989
}});
90-
91-
for (let i = 0; i < (window['{queue}'] || []).length; i++) {{
92-
const e = window['{queue}'][i];
93-
window['{emit}'](e.eventData, e.salt, true)
94-
}}
9590
",
9691
listeners = window.manager().event_listeners_object_name(),
97-
queue = window.manager().event_queue_object_name(),
98-
emit = window.manager().event_emit_function_name(),
9992
event = event,
10093
event_id = event_id,
10194
handler = handler

core/tauri/src/event.rs

-7
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ struct InnerListeners {
5959
pending: Mutex<Vec<Pending>>,
6060
function_name: Uuid,
6161
listeners_object_name: Uuid,
62-
queue_object_name: Uuid,
6362
}
6463

6564
/// A self-contained event manager.
@@ -75,7 +74,6 @@ impl Default for Listeners {
7574
pending: Mutex::default(),
7675
function_name: Uuid::new_v4(),
7776
listeners_object_name: Uuid::new_v4(),
78-
queue_object_name: Uuid::new_v4(),
7977
}),
8078
}
8179
}
@@ -100,11 +98,6 @@ impl Listeners {
10098
self.inner.listeners_object_name.to_string()
10199
}
102100

103-
/// Randomly generated queue object name to represent the JavaScript event queue object.
104-
pub(crate) fn queue_object_name(&self) -> String {
105-
self.inner.queue_object_name.to_string()
106-
}
107-
108101
/// Insert a pending event action to the queue.
109102
fn insert_pending(&self, action: Pending) {
110103
self

core/tauri/src/manager.rs

+1-12
Original file line numberDiff line numberDiff line change
@@ -445,15 +445,8 @@ impl<R: Runtime> WindowManager<R> {
445445
fn event_initialization_script(&self, key: u32) -> String {
446446
return format!(
447447
"
448-
window['{queue}'] = [];
449-
window['{function}'] = function (eventData, salt, ignoreQueue) {{
448+
window['{function}'] = function (eventData, salt) {{
450449
const listeners = (window['{listeners}'] && window['{listeners}'][eventData.event]) || []
451-
if (!ignoreQueue && listeners.length === 0) {{
452-
window['{queue}'].push({{
453-
eventData: eventData,
454-
salt: salt
455-
}})
456-
}}
457450
458451
if (listeners.length > 0) {{
459452
window.__TAURI__._invoke('tauri', {{
@@ -476,7 +469,6 @@ impl<R: Runtime> WindowManager<R> {
476469
",
477470
key = key,
478471
function = self.inner.listeners.function_name(),
479-
queue = self.inner.listeners.queue_object_name(),
480472
listeners = self.inner.listeners.listeners_object_name()
481473
);
482474
}
@@ -714,9 +706,6 @@ impl<R: Runtime> WindowManager<R> {
714706
pub fn event_listeners_object_name(&self) -> String {
715707
self.inner.listeners.listeners_object_name()
716708
}
717-
pub fn event_queue_object_name(&self) -> String {
718-
self.inner.listeners.queue_object_name()
719-
}
720709
pub fn event_emit_function_name(&self) -> String {
721710
self.inner.listeners.function_name()
722711
}

0 commit comments

Comments
 (0)