Browse Source

fix(core): global events regression from #7996 closes #8146 (#8147)

Lucas Fernandes Nogueira 1 year ago
parent
commit
b5f40ae58d

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

@@ -0,0 +1,5 @@
+---
+"tauri": patch:bug
+---
+
+Fixes global events not reaching to window listeners.

+ 1 - 4
core/tauri/src/event/mod.rs

@@ -141,10 +141,7 @@ pub fn event_initialization_script(function: &str, listeners: &str) -> String {
 
         for (let i = listeners.length - 1; i >= 0; i--) {{
           const listener = listeners[i]
-          if (
-              (listener.windowLabel && listener.windowLabel === eventData.windowLabel) ||
-              (!listener.windowLabel && (listener.windowLabel === null || eventData.windowLabel === null))
-            ) {{
+          if (listener.windowLabel === null || eventData.windowLabel === null || listener.windowLabel === eventData.windowLabel) {{
             eventData.id = listener.id
             listener.handler(eventData)
           }}

+ 15 - 7
core/tauri/src/window/mod.rs

@@ -2405,14 +2405,22 @@ impl<R: Runtime> Window<R> {
 
   /// Whether this window registered a listener to an event from the given window and event name.
   pub(crate) fn has_js_listener(&self, window_label: Option<String>, event: &str) -> bool {
-    self
-      .js_event_listeners
-      .lock()
-      .unwrap()
-      .contains_key(&JsEventListenerKey {
-        window_label,
-        event: event.into(),
+    let listeners = self.js_event_listeners.lock().unwrap();
+
+    if let Some(label) = window_label {
+      let event = event.to_string();
+      // window-specific event is also triggered on global events, so we check that
+      listeners.contains_key(&JsEventListenerKey {
+        window_label: Some(label),
+        event: event.clone(),
+      }) || listeners.contains_key(&JsEventListenerKey {
+        window_label: None,
+        event,
       })
+    } else {
+      // for global events, any listener is triggered
+      listeners.keys().any(|k| k.event == event)
+    }
   }
 
   /// Opens the developer tools window (Web Inspector).

+ 7 - 7
examples/api/src-tauri/Cargo.lock

@@ -3391,7 +3391,7 @@ checksum = "14c39fd04924ca3a864207c66fc2cd7d22d7c016007f9ce846cbb9326331930a"
 
 [[package]]
 name = "tauri"
-version = "2.0.0-alpha.16"
+version = "2.0.0-alpha.17"
 dependencies = [
  "anyhow",
  "bytes",
@@ -3442,7 +3442,7 @@ dependencies = [
 
 [[package]]
 name = "tauri-build"
-version = "2.0.0-alpha.10"
+version = "2.0.0-alpha.11"
 dependencies = [
  "anyhow",
  "cargo_toml",
@@ -3463,7 +3463,7 @@ dependencies = [
 
 [[package]]
 name = "tauri-codegen"
-version = "2.0.0-alpha.9"
+version = "2.0.0-alpha.10"
 dependencies = [
  "base64",
  "brotli",
@@ -3487,7 +3487,7 @@ dependencies = [
 
 [[package]]
 name = "tauri-macros"
-version = "2.0.0-alpha.9"
+version = "2.0.0-alpha.10"
 dependencies = [
  "heck",
  "proc-macro2",
@@ -3523,7 +3523,7 @@ dependencies = [
 
 [[package]]
 name = "tauri-runtime"
-version = "1.0.0-alpha.3"
+version = "1.0.0-alpha.4"
 dependencies = [
  "gtk",
  "http",
@@ -3539,7 +3539,7 @@ dependencies = [
 
 [[package]]
 name = "tauri-runtime-wry"
-version = "1.0.0-alpha.4"
+version = "1.0.0-alpha.5"
 dependencies = [
  "cocoa 0.24.1",
  "gtk",
@@ -3557,7 +3557,7 @@ dependencies = [
 
 [[package]]
 name = "tauri-utils"
-version = "2.0.0-alpha.9"
+version = "2.0.0-alpha.10"
 dependencies = [
  "aes-gcm",
  "brotli",