Explorar el Código

fix: dispatch focus event to app.run on Windows, closes #6460 (#6504)

Amr Bashir hace 2 años
padre
commit
ff4ea1eabb
Se han modificado 2 ficheros con 25 adiciones y 15 borrados
  1. 6 0
      .changes/windows-focused-event.md
  2. 19 15
      core/tauri-runtime-wry/src/lib.rs

+ 6 - 0
.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.

+ 19 - 15
core/tauri-runtime-wry/src/lib.rs

@@ -2532,21 +2532,7 @@ fn handle_user_message<T: UserEvent>(
           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<T: UserEvent>(
         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, ..
     } => {