|
@@ -30,7 +30,7 @@ use crate::hooks::IsolationJavascript;
|
|
|
use crate::pattern::{format_real_schema, PatternJavascript};
|
|
|
use crate::{
|
|
|
app::{AppHandle, GlobalWindowEvent, GlobalWindowEventListener},
|
|
|
- event::{is_event_name_valid, Event, EventHandler, Listeners},
|
|
|
+ event::{assert_event_name_is_valid, Event, EventHandler, Listeners},
|
|
|
hooks::{InvokeHandler, InvokePayload, InvokeResponder, OnPageLoad, PageLoadPayload},
|
|
|
plugin::PluginStore,
|
|
|
runtime::{
|
|
@@ -850,6 +850,7 @@ impl<R: Runtime> WindowManager<R> {
|
|
|
self.event_listeners_object_name(),
|
|
|
"eventName".into(),
|
|
|
0,
|
|
|
+ None,
|
|
|
"window['_' + window.__TAURI__.transformCallback(cb) ]".into()
|
|
|
)
|
|
|
),
|
|
@@ -865,18 +866,22 @@ impl<R: Runtime> WindowManager<R> {
|
|
|
fn event_initialization_script(&self) -> String {
|
|
|
return format!(
|
|
|
"
|
|
|
- window['{function}'] = function (eventData) {{
|
|
|
- const listeners = (window['{listeners}'] && window['{listeners}'][eventData.event]) || []
|
|
|
-
|
|
|
- for (let i = listeners.length - 1; i >= 0; i--) {{
|
|
|
- const listener = listeners[i]
|
|
|
- eventData.id = listener.id
|
|
|
- listener.handler(eventData)
|
|
|
- }}
|
|
|
- }}
|
|
|
+ Object.defineProperty(window, '{function}', {{
|
|
|
+ value: function (eventData) {{
|
|
|
+ const listeners = (window['{listeners}'] && window['{listeners}'][eventData.event]) || []
|
|
|
+
|
|
|
+ for (let i = listeners.length - 1; i >= 0; i--) {{
|
|
|
+ const listener = listeners[i]
|
|
|
+ if (listener.windowLabel === null || listener.windowLabel === eventData.windowLabel) {{
|
|
|
+ eventData.id = listener.id
|
|
|
+ listener.handler(eventData)
|
|
|
+ }}
|
|
|
+ }}
|
|
|
+ }}
|
|
|
+ }});
|
|
|
",
|
|
|
- function = self.inner.listeners.function_name(),
|
|
|
- listeners = self.inner.listeners.listeners_object_name()
|
|
|
+ function = self.event_emit_function_name(),
|
|
|
+ listeners = self.event_listeners_object_name()
|
|
|
);
|
|
|
}
|
|
|
}
|
|
@@ -1088,17 +1093,23 @@ impl<R: Runtime> WindowManager<R> {
|
|
|
self.windows_lock().remove(label);
|
|
|
}
|
|
|
|
|
|
- pub fn emit_filter<S, F>(&self, event: &str, payload: S, filter: F) -> crate::Result<()>
|
|
|
+ pub fn emit_filter<S, F>(
|
|
|
+ &self,
|
|
|
+ event: &str,
|
|
|
+ source_window_label: Option<&str>,
|
|
|
+ payload: S,
|
|
|
+ filter: F,
|
|
|
+ ) -> crate::Result<()>
|
|
|
where
|
|
|
S: Serialize + Clone,
|
|
|
F: Fn(&Window<R>) -> bool,
|
|
|
{
|
|
|
- assert!(is_event_name_valid(event));
|
|
|
+ assert_event_name_is_valid(event);
|
|
|
self
|
|
|
.windows_lock()
|
|
|
.values()
|
|
|
.filter(|&w| filter(w))
|
|
|
- .try_for_each(|window| window.emit(event, payload.clone()))
|
|
|
+ .try_for_each(|window| window.emit_internal(event, source_window_label, payload.clone()))
|
|
|
}
|
|
|
|
|
|
pub fn labels(&self) -> HashSet<String> {
|
|
@@ -1118,7 +1129,7 @@ impl<R: Runtime> WindowManager<R> {
|
|
|
}
|
|
|
|
|
|
pub fn trigger(&self, event: &str, window: Option<String>, data: Option<String>) {
|
|
|
- assert!(is_event_name_valid(event));
|
|
|
+ assert_event_name_is_valid(event);
|
|
|
self.inner.listeners.trigger(event, window, data)
|
|
|
}
|
|
|
|
|
@@ -1128,7 +1139,7 @@ impl<R: Runtime> WindowManager<R> {
|
|
|
window: Option<String>,
|
|
|
handler: F,
|
|
|
) -> EventHandler {
|
|
|
- assert!(is_event_name_valid(&event));
|
|
|
+ assert_event_name_is_valid(&event);
|
|
|
self.inner.listeners.listen(event, window, handler)
|
|
|
}
|
|
|
|
|
@@ -1138,7 +1149,7 @@ impl<R: Runtime> WindowManager<R> {
|
|
|
window: Option<String>,
|
|
|
handler: F,
|
|
|
) -> EventHandler {
|
|
|
- assert!(is_event_name_valid(&event));
|
|
|
+ assert_event_name_is_valid(&event);
|
|
|
self.inner.listeners.once(event, window, handler)
|
|
|
}
|
|
|
|
|
@@ -1171,7 +1182,7 @@ fn on_window_event<R: Runtime>(
|
|
|
label: _,
|
|
|
signal_tx,
|
|
|
} => {
|
|
|
- if window.has_js_listener(WINDOW_CLOSE_REQUESTED_EVENT) {
|
|
|
+ if window.has_js_listener(Some(window.label().into()), WINDOW_CLOSE_REQUESTED_EVENT) {
|
|
|
signal_tx.send(true).unwrap();
|
|
|
}
|
|
|
window.emit_and_trigger(WINDOW_CLOSE_REQUESTED_EVENT, ())?;
|
|
@@ -1210,7 +1221,7 @@ fn on_window_event<R: Runtime>(
|
|
|
Ok(())
|
|
|
}
|
|
|
|
|
|
-#[derive(Serialize)]
|
|
|
+#[derive(Clone, Serialize)]
|
|
|
#[serde(rename_all = "camelCase")]
|
|
|
struct ScaleFactorChanged {
|
|
|
scale_factor: f64,
|