Skip to content

Commit ebaa33c

Browse files
authored
fix(core): remove closed window from window.__TAURI__.__windows (#2057)
1 parent fca9764 commit ebaa33c

2 files changed

Lines changed: 27 additions & 8 deletions

File tree

.changes/fix-window-get-all.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"tauri": patch
3+
---
4+
5+
Remove closed window from the `window.__TAURI__.__windows` array, used by the `window.getAll` API from `@tauri-apps/api`.

core/tauri/src/manager.rs

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -697,8 +697,9 @@ impl<P: Params> WindowManager<P> {
697697

698698
let window_ = window.clone();
699699
let window_event_listeners = self.inner.window_event_listeners.clone();
700+
let manager = self.clone();
700701
window.on_window_event(move |event| {
701-
let _ = on_window_event(&window_, event);
702+
let _ = on_window_event(&window_, &manager, event);
702703
for handler in window_event_listeners.iter() {
703704
handler(GlobalWindowEvent {
704705
window: window_.clone(),
@@ -849,7 +850,11 @@ impl<P: Params> WindowManager<P> {
849850
}
850851
}
851852

852-
fn on_window_event<P: Params>(window: &Window<P>, event: &WindowEvent) -> crate::Result<()> {
853+
fn on_window_event<P: Params>(
854+
window: &Window<P>,
855+
manager: &WindowManager<P>,
856+
event: &WindowEvent,
857+
) -> crate::Result<()> {
853858
match event {
854859
WindowEvent::Resized(size) => window.emit(
855860
&WINDOW_RESIZED_EVENT
@@ -863,12 +868,21 @@ fn on_window_event<P: Params>(window: &Window<P>, event: &WindowEvent) -> crate:
863868
.unwrap_or_else(|_| panic!("unhandled event")),
864869
Some(position),
865870
)?,
866-
WindowEvent::CloseRequested => window.emit(
867-
&WINDOW_CLOSE_REQUESTED_EVENT
868-
.parse()
869-
.unwrap_or_else(|_| panic!("unhandled event")),
870-
Some(()),
871-
)?,
871+
WindowEvent::CloseRequested => {
872+
window.emit(
873+
&WINDOW_CLOSE_REQUESTED_EVENT
874+
.parse()
875+
.unwrap_or_else(|_| panic!("unhandled event")),
876+
Some(()),
877+
)?;
878+
let label = window.label();
879+
for window in manager.inner.windows.lock().unwrap().values() {
880+
window.eval(&format!(
881+
r#"window.__TAURI__.__windows = window.__TAURI__.__windows.filter(w => w.label !== "{}");"#,
882+
label
883+
))?;
884+
}
885+
}
872886
WindowEvent::Destroyed => window.emit(
873887
&WINDOW_DESTROYED_EVENT
874888
.parse()

0 commit comments

Comments
 (0)