diff --git a/plugins/window-state/src/lib.rs b/plugins/window-state/src/lib.rs index 200cf9d7..9b974a9a 100644 --- a/plugins/window-state/src/lib.rs +++ b/plugins/window-state/src/lib.rs @@ -64,15 +64,21 @@ struct WindowState { struct WindowStateCache(Arc>>); pub trait AppHandleExt { - fn save_window_state(&self) -> Result<()>; + fn save_window_state(&self, flags: StateFlags) -> Result<()>; } impl AppHandleExt for tauri::AppHandle { - fn save_window_state(&self) -> Result<()> { + fn save_window_state(&self, flags: StateFlags) -> Result<()> { if let Some(app_dir) = self.path_resolver().app_config_dir() { let state_path = app_dir.join(STATE_FILENAME); let cache = self.state::(); - let state = cache.0.lock().unwrap(); + let mut state = cache.0.lock().unwrap(); + for (label, s) in state.iter_mut() { + self.get_window(label) + .ok_or_else(|| Error::Tauri(tauri::Error::WebviewNotFound))? + .update_state(s, flags)?; + } + create_dir_all(&app_dir) .map_err(Error::Io) .and_then(|_| File::create(state_path).map_err(Into::into)) @@ -261,6 +267,7 @@ impl Builder { } pub fn build(self) -> TauriPlugin { + let flags = self.state_flags; PluginBuilder::new("window-state") .setup(|app| { let cache: Arc>> = if let Some(app_dir) = @@ -306,9 +313,9 @@ impl Builder { } }); }) - .on_event(|app, event| { + .on_event(move |app, event| { if let RunEvent::Exit = event { - let _ = app.save_window_state(); + let _ = app.save_window_state(flags); } }) .build()