Forráskód Böngészése

fix(core): `listen` receiving past events, closes #2323 (#2371)

Lucas Fernandes Nogueira 4 éve
szülő
commit
1ecb8651a7

+ 5 - 0
.changes/fix-event-queue.md

@@ -0,0 +1,5 @@
+---
+"tauri": patch
+---
+
+Fix `listen` calls receiving past events.

+ 7 - 6
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<R: Runtime>(
     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 {

+ 0 - 7
core/tauri/src/endpoints/event.rs

@@ -87,15 +87,8 @@ pub fn listen_js<R: Runtime>(
       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

+ 0 - 7
core/tauri/src/event.rs

@@ -59,7 +59,6 @@ struct InnerListeners {
   pending: Mutex<Vec<Pending>>,
   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

+ 1 - 12
core/tauri/src/manager.rs

@@ -445,15 +445,8 @@ impl<R: Runtime> WindowManager<R> {
   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<R: Runtime> WindowManager<R> {
     ",
       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<R: Runtime> WindowManager<R> {
   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()
   }