Skip to content

Commit 76c791b

Browse files
authored
fix(core): regression on the unlisten function (#3623)
1 parent 66fe5d8 commit 76c791b

File tree

6 files changed

+48
-30
lines changed

6 files changed

+48
-30
lines changed

.changes/unlisten-fix.md

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
"tauri": patch
3+
"api": patch
4+
---
5+
6+
Fixes a regression on the `unlisten` command.

core/tauri/scripts/bundle.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

core/tauri/src/endpoints/event.rs

+7-2
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ pub enum Cmd {
6363
},
6464
/// Unlisten to an event.
6565
#[serde(rename_all = "camelCase")]
66-
Unlisten { event_id: u64 },
66+
Unlisten { event: EventId, event_id: u64 },
6767
/// Emit an event to the webview associated with the given window.
6868
/// If the window_label is omitted, the event will be triggered on all listeners.
6969
#[serde(rename_all = "camelCase")]
@@ -103,11 +103,16 @@ impl Cmd {
103103
Ok(event_id)
104104
}
105105

106-
fn unlisten<R: Runtime>(context: InvokeContext<R>, event_id: u64) -> super::Result<()> {
106+
fn unlisten<R: Runtime>(
107+
context: InvokeContext<R>,
108+
event: EventId,
109+
event_id: u64,
110+
) -> super::Result<()> {
107111
context
108112
.window
109113
.eval(&unlisten_js(
110114
context.window.manager().event_listeners_object_name(),
115+
event.0,
111116
event_id,
112117
))
113118
.map_err(crate::error::into_anyhow)?;

core/tauri/src/event.rs

+9-5
Original file line numberDiff line numberDiff line change
@@ -300,17 +300,21 @@ mod test {
300300
}
301301
}
302302

303-
pub fn unlisten_js(listeners_object_name: String, event_id: u64) -> String {
303+
pub fn unlisten_js(listeners_object_name: String, event_name: String, event_id: u64) -> String {
304304
format!(
305305
"
306-
for (var event in (window['{listeners}'] || {{}})) {{
307-
var listeners = (window['{listeners}'] || {{}})[event]
306+
(function () {{
307+
const listeners = (window['{listeners}'] || {{}})['{event_name}']
308308
if (listeners) {{
309-
window['{listeners}'][event] = window['{listeners}'][event].filter(function (e) {{ return e.id !== {event_id} }})
309+
const index = window['{listeners}']['{event_name}'].findIndex(e => e.id === {event_id})
310+
if (index > -1) {{
311+
window['{listeners}']['{event_name}'].splice(index, 1)
312+
}}
310313
}}
311-
}}
314+
}})()
312315
",
313316
listeners = listeners_object_name,
317+
event_name = event_name,
314318
event_id = event_id,
315319
)
316320
}

0 commit comments

Comments
 (0)