mirror of
https://github.com/tauri-apps/tauri.git
synced 2026-04-03 10:11:15 +02:00
fix(core): emit tauri://window-created event for windows created on Rust (#3299)
This commit is contained in:
committed by
GitHub
parent
878b8b9a1f
commit
1dbd887a6e
5
.changes/emit-window-created-backend.md
Normal file
5
.changes/emit-window-created-backend.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"tauri": patch
|
||||
---
|
||||
|
||||
Emit `tauri://window-created` event for windows created on the backend.
|
||||
@@ -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(())
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user