fix(core): emit tauri://window-created event for windows created on Rust (#3299)

This commit is contained in:
Lucas Fernandes Nogueira
2022-02-04 23:47:44 -03:00
committed by GitHub
parent 878b8b9a1f
commit 1dbd887a6e
3 changed files with 31 additions and 23 deletions

View File

@@ -0,0 +1,5 @@
---
"tauri": patch
---
Emit `tauri://window-created` event for windows created on the backend.

View File

@@ -146,12 +146,6 @@ pub enum Cmd {
},
}
#[cfg(window_create)]
#[derive(Clone, serde::Serialize)]
struct WindowCreatedEvent {
label: String,
}
impl Cmd {
#[module_command_handler(window_create, "window > create")]
async fn create_webview<R: Runtime>(
@@ -162,14 +156,12 @@ impl Cmd {
let label = options.label.clone();
let url = options.url.clone();
window
.create_window(label.clone(), url, |_, webview_attributes| {
(
<<R::Dispatcher as Dispatch>::WindowBuilder>::with_config(*options),
webview_attributes,
)
})?
.emit_others("tauri://window-created", Some(WindowCreatedEvent { label }))?;
window.create_window(label, url, |_, webview_attributes| {
(
<<R::Dispatcher as Dispatch>::WindowBuilder>::with_config(*options),
webview_attributes,
)
})?;
Ok(())
}

View File

@@ -498,6 +498,11 @@ pub(crate) mod sealed {
Dispatch(R::Dispatcher),
}
#[derive(Clone, serde::Serialize)]
struct WindowCreatedEvent {
label: String,
}
/// Managed handle to the application runtime.
pub trait ManagerBase<R: Runtime> {
/// The manager behind the [`Managed`] item.
@@ -516,16 +521,22 @@ pub(crate) mod sealed {
let pending = self
.manager()
.prepare_window(self.app_handle(), pending, &labels)?;
match self.runtime() {
RuntimeOrDispatch::Runtime(runtime) => runtime.create_window(pending).map_err(Into::into),
RuntimeOrDispatch::RuntimeHandle(handle) => {
handle.create_window(pending).map_err(Into::into)
}
RuntimeOrDispatch::Dispatch(mut dispatcher) => {
dispatcher.create_window(pending).map_err(Into::into)
}
let window = match self.runtime() {
RuntimeOrDispatch::Runtime(runtime) => runtime.create_window(pending),
RuntimeOrDispatch::RuntimeHandle(handle) => handle.create_window(pending),
RuntimeOrDispatch::Dispatch(mut dispatcher) => dispatcher.create_window(pending),
}
.map(|window| self.manager().attach_window(self.app_handle(), window))
.map(|window| self.manager().attach_window(self.app_handle(), window))?;
self.manager().emit_filter(
"tauri://window-created",
Some(WindowCreatedEvent {
label: window.label().into(),
}),
|w| w != &window,
)?;
Ok(window)
}
}
}