Skip to content

Commit b5f40ae

Browse files
authored
fix(core): global events regression from #7996 closes #8146 (#8147)
1 parent 04a682b commit b5f40ae

4 files changed

Lines changed: 28 additions & 18 deletions

File tree

.changes/fix-global-event.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"tauri": patch:bug
3+
---
4+
5+
Fixes global events not reaching to window listeners.

core/tauri/src/event/mod.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -141,10 +141,7 @@ pub fn event_initialization_script(function: &str, listeners: &str) -> String {
141141
142142
for (let i = listeners.length - 1; i >= 0; i--) {{
143143
const listener = listeners[i]
144-
if (
145-
(listener.windowLabel && listener.windowLabel === eventData.windowLabel) ||
146-
(!listener.windowLabel && (listener.windowLabel === null || eventData.windowLabel === null))
147-
) {{
144+
if (listener.windowLabel === null || eventData.windowLabel === null || listener.windowLabel === eventData.windowLabel) {{
148145
eventData.id = listener.id
149146
listener.handler(eventData)
150147
}}

core/tauri/src/window/mod.rs

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2405,14 +2405,22 @@ impl<R: Runtime> Window<R> {
24052405

24062406
/// Whether this window registered a listener to an event from the given window and event name.
24072407
pub(crate) fn has_js_listener(&self, window_label: Option<String>, event: &str) -> bool {
2408-
self
2409-
.js_event_listeners
2410-
.lock()
2411-
.unwrap()
2412-
.contains_key(&JsEventListenerKey {
2413-
window_label,
2414-
event: event.into(),
2408+
let listeners = self.js_event_listeners.lock().unwrap();
2409+
2410+
if let Some(label) = window_label {
2411+
let event = event.to_string();
2412+
// window-specific event is also triggered on global events, so we check that
2413+
listeners.contains_key(&JsEventListenerKey {
2414+
window_label: Some(label),
2415+
event: event.clone(),
2416+
}) || listeners.contains_key(&JsEventListenerKey {
2417+
window_label: None,
2418+
event,
24152419
})
2420+
} else {
2421+
// for global events, any listener is triggered
2422+
listeners.keys().any(|k| k.event == event)
2423+
}
24162424
}
24172425

24182426
/// Opens the developer tools window (Web Inspector).

examples/api/src-tauri/Cargo.lock

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)