From ff4ea1eabbf2874b113c6b4698002929bbac737a Mon Sep 17 00:00:00 2001 From: Amr Bashir Date: Fri, 31 Mar 2023 15:03:25 +0200 Subject: [PATCH] fix: dispatch focus event to app.run on Windows, closes #6460 (#6504) --- .changes/windows-focused-event.md | 6 ++++++ core/tauri-runtime-wry/src/lib.rs | 34 +++++++++++++++++-------------- 2 files changed, 25 insertions(+), 15 deletions(-) create mode 100644 .changes/windows-focused-event.md diff --git a/.changes/windows-focused-event.md b/.changes/windows-focused-event.md new file mode 100644 index 000000000..7742341a5 --- /dev/null +++ b/.changes/windows-focused-event.md @@ -0,0 +1,6 @@ +--- +'tauri': 'patch' +'tauri-runtime-wry': 'patch' +--- + +On Windows, Fix missing `WindowEvent::Focused` in `App::run` callback. diff --git a/core/tauri-runtime-wry/src/lib.rs b/core/tauri-runtime-wry/src/lib.rs index cc7dba651..bf42ec7e2 100644 --- a/core/tauri-runtime-wry/src/lib.rs +++ b/core/tauri-runtime-wry/src/lib.rs @@ -2532,21 +2532,7 @@ fn handle_user_message( let _ = webview.print(); } } - WebviewMessage::WebviewEvent(event) => { - let window_event_listeners = windows - .borrow() - .get(&id) - .map(|w| w.window_event_listeners.clone()); - if let Some(window_event_listeners) = window_event_listeners { - if let Some(event) = WindowEventWrapper::from(&event).0 { - let listeners = window_event_listeners.lock().unwrap(); - let handlers = listeners.values(); - for handler in handlers { - handler(&event); - } - } - } - } + WebviewMessage::WebviewEvent(_event) => { /* already handled */ } }, Message::CreateWebview(window_id, handler) => match handler(event_loop, web_context) { Ok(webview) => { @@ -2840,6 +2826,24 @@ fn handle_event_loop( global_listener(id.0, &event); } } + Event::UserEvent(Message::Webview(id, WebviewMessage::WebviewEvent(event))) => { + if let Some(event) = WindowEventWrapper::from(&event).0 { + let windows = windows.borrow(); + let window = windows.get(&id); + if let Some(window) = window { + callback(RunEvent::WindowEvent { + label: window.label.clone(), + event: event.clone(), + }); + + let listeners = window.window_event_listeners.lock().unwrap(); + let handlers = listeners.values(); + for handler in handlers { + handler(&event); + } + } + } + } Event::WindowEvent { event, window_id, .. } => {