From b5f40ae58dded34b9ddef8e301d0e6e777d135d6 Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Tue, 7 Nov 2023 09:59:09 -0300 Subject: [PATCH] fix(core): global events regression from #7996 closes #8146 (#8147) --- .changes/fix-global-event.md | 5 +++++ core/tauri/src/event/mod.rs | 5 +---- core/tauri/src/window/mod.rs | 22 +++++++++++++++------- examples/api/src-tauri/Cargo.lock | 14 +++++++------- 4 files changed, 28 insertions(+), 18 deletions(-) create mode 100644 .changes/fix-global-event.md diff --git a/.changes/fix-global-event.md b/.changes/fix-global-event.md new file mode 100644 index 000000000..9bf30d43c --- /dev/null +++ b/.changes/fix-global-event.md @@ -0,0 +1,5 @@ +--- +"tauri": patch:bug +--- + +Fixes global events not reaching to window listeners. diff --git a/core/tauri/src/event/mod.rs b/core/tauri/src/event/mod.rs index b16dcb515..ae4660410 100644 --- a/core/tauri/src/event/mod.rs +++ b/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) }} diff --git a/core/tauri/src/window/mod.rs b/core/tauri/src/window/mod.rs index 609d0417e..217c83d44 100644 --- a/core/tauri/src/window/mod.rs +++ b/core/tauri/src/window/mod.rs @@ -2405,14 +2405,22 @@ impl Window { /// 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, 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). diff --git a/examples/api/src-tauri/Cargo.lock b/examples/api/src-tauri/Cargo.lock index 9db83adff..e373e3597 100644 --- a/examples/api/src-tauri/Cargo.lock +++ b/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",