Переглянути джерело

fix(core): use EventLoopProxy to prevent set_size freeze closes #3990 (#4014)

Lucas Fernandes Nogueira 3 роки тому
батько
коміт
8f259f4ef8
2 змінених файлів з 14 додано та 4 видалено
  1. 5 0
      .changes/fix-set-size-freeze.md
  2. 9 4
      core/tauri-runtime-wry/src/lib.rs

+ 5 - 0
.changes/fix-set-size-freeze.md

@@ -0,0 +1,5 @@
+---
+"tauri-runtime-wry": patch
+---
+
+Fixes a freeze when calling `set_size` in the main thread on Windows.

+ 9 - 4
core/tauri-runtime-wry/src/lib.rs

@@ -1388,10 +1388,15 @@ impl<T: UserEvent> Dispatch<T> for WryDispatcher<T> {
   }
 
   fn set_size(&self, size: Size) -> Result<()> {
-    send_user_message(
-      &self.context,
-      Message::Window(self.window_id, WindowMessage::SetSize(size)),
-    )
+    // NOTE: set_size cannot use the `send_user_message` function because tao freezes on Windows
+    self
+      .context
+      .proxy
+      .send_event(Message::Window(
+        self.window_id,
+        WindowMessage::SetSize(size),
+      ))
+      .map_err(|_| Error::FailedToSendMessage)
   }
 
   fn set_min_size(&self, size: Option<Size>) -> Result<()> {